Собственные типы нод
Внимание! Мы настоятельно рекомендуем ознакомиться сначала с REST-документацией модуля Сайты, чтобы понять как модуль функционирует (тем более REST доступен и в коробочной версии). Данную документацию рассматривайте как подспорье при работе в коробке, когда вам действительно мало функционала REST, или вы хотите детальнее разобраться в API.
Как вы уже знаете, в системе есть ряд предустановленных типов нод (и +1 коробочный тип component). Данные типы охватывают максимально допустимый для редактирования контент и предполагают, что 99% задач могут быть ими решены.
Если же вы уверены, что для вашей задачи просто необходим собственный тип ноды, вам нужно сделать следующее:
- Создать класс-наследник от абстрактного класса
Bitrix\Landing\Node
. Если вы хотите всего лишь изменить поведение стандартных типов, то можете отнаследоваться от подходящего вам класса в пространствеBitrix\Landing\Node
. - В наследуемом классе необходимо реализовать следующие методы:
- getHandlerJS, возвращающий строку, название JS-класса обработчика типа для редактора (об этом еще ниже),
- saveNode, обработчик сохранения контента вашего типа (его задача изменить по передаваемому селектору и позиции контент согласно вашей логике),
- getNode, обработчик получения контента вашего типа (его задача по переданному селектору вернуть массив данных этого типа; в данный момент метод применяется для экспорта сайта),
- при желании вы можете реализовать еще метод prepareManifest, который позволит вам изменять манифест блока до того как он будет отдан редактору.
- Этот класс должен быть доступен в момент вызова обработчика на регистрацию вашего типа.
$eventManager = \Bitrix\Main\EventManager::getInstance(); $eventManager->addEventHandler('landing', 'onGetNodeClass', function(\Bitrix\Main\Event $event) { $result = new \Bitrix\Main\Entity\EventResult; $type = $event->getParameter('type'); if ($type == 'my_type') { $result->modifyFields(array( 'class' => 'MyTypeNode' )); } return $result; } );
Именно данный обработчик свяжет ваш класс MyTypeNode с новым типом my_type.
В заключении о JS-обработчике, упомянутом выше. Если серверная часть отвечает за сохранение данных определенного типа, то на клиентской части остаются интерфейсы взаимодействия данного типа с пользователем. Как они будут выглядеть и как взаимодействовать, это уже решать разработчику такого типа. За примерами вы можете обратить к одному из существующих JS-типов по пути /bitrix/js/landing/node
.
Одним из самых простых для интуитивного понимания по коду является тип icon. Детальное описание создание собственных типов выходит за рамки данной статьи.
Пользовательские комментарии
Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.Для этого нужно всего лишь авторизоваться на сайте
Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.
Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.