Документация для разработчиков
Темная тема

Собственные типы нод

Внимание! Мы настоятельно рекомендуем ознакомиться сначала с REST-документацией модуля Сайты, чтобы понять как модуль функционирует (тем более REST доступен и в коробочной версии). Данную документацию рассматривайте как подспорье при работе в коробке, когда вам действительно мало функционала REST, или вы хотите детальнее разобраться в API.

Как вы уже знаете, в системе есть ряд предустановленных типов нод (и +1 коробочный тип component). Данные типы охватывают максимально допустимый для редактирования контент и предполагают, что 99% задач могут быть ими решены.

Если же вы уверены, что для вашей задачи просто необходим собственный тип ноды, вам нужно сделать следующее:

  1. Создать класс-наследник от абстрактного класса Bitrix\Landing\Node. Если вы хотите всего лишь изменить поведение стандартных типов, то можете отнаследоваться от подходящего вам класса в пространстве Bitrix\Landing\Node.
  2. В наследуемом классе необходимо реализовать следующие методы:
    • getHandlerJS, возвращающий строку, название JS-класса обработчика типа для редактора (об этом еще ниже),
    • saveNode, обработчик сохранения контента вашего типа (его задача изменить по передаваемому селектору и позиции контент согласно вашей логике),
    • getNode, обработчик получения контента вашего типа (его задача по переданному селектору вернуть массив данных этого типа; в данный момент метод применяется для экспорта сайта),
    • при желании вы можете реализовать еще метод prepareManifest, который позволит вам изменять манифест блока до того как он будет отдан редактору.
  3. Этот класс должен быть доступен в момент вызова обработчика на регистрацию вашего типа.
    $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. Детальное описание создание собственных типов выходит за рамки данной статьи.


© «Битрикс», 2001-2024, «1С-Битрикс», 2024