Skip to content

Модуль добавления контента. realweb.api.content v6

Совместимость

realweb.api v.6

Описание

Модуль позволяет быстро создавать контентные блоки для элементов инфоблоков, на основе инфоблока. Интерфейс добавления и редактирования точно такой же как и стандартный вид у инфоблоков. Каждый контентный блок имеет бесконечную вложенность самих себя (рекурсию), что позволяет создавать контент любой структуры. Существующие контентные блоки можно переиспользовать на других страницах (необходимо добавить ИД в свойство “элемент“)

По умолчанию доступны три типа контентных блоков

Контент-блоки

Простой HTML текст

Доступны следующие поля:

  • заголовок
  • тип заголовка
  • ссылка
  • описание для анонса (краткое описание для заголовка)
  • детальное описание
Пример интерфейса

Пример интерфейса

Галерея фотографий

Доступны следующие поля:

  • заголовок
  • тип заголовка
  • ссылка
  • описание для анонса (краткое описание для заголовка)
  • детальное описание
  • картинки
Пример интерфейса

Пример интерфейса

Баннер

Доступны следующие поля:

  • заголовок
  • тип заголовка
  • ссылка
  • описание для анонса (краткое описание для заголовка)
  • детальное описание
  • картинка для анонса в качестве основной картинки.
Пример интерфейса

Пример интерфейса

Новые контент-блоки

У каждого контентного блока может быть свой набор полей, новые поля - это новые свойства ИБ. Создание нового типа сводится к созданию новых свойств и значения свойства “Тип“. Все существующие свойства можно переиспользовать для других типов т.е. в ряде случаев даже не придется добавлять новые. Для каждого типа доступны все стандартные поля инфоблока. Например, в типе текст используется детальное описание в качестве основного поля, если это кажется не очевидным, то можно добавить свое свойство с нужным названием. Интерфейс для пользователя в админке реализуется несколькими строчками на JS (скрытие свойств).

Управление выводом осуществляется через js-скрипт realweb.api.content/dist/js/content_block.js

При создании нового типа данный файл необходимо скопировать в модуль realweb.api.module, далее добавить необходимую функциональность и перенести его в bitrix/js/ realweb.api.content/content_block.js через миграцию.

Пример добавления нового свойства и типа
js
contentBlockData.processIcon = function (display) {
		document.getElementById(strIdProperty + contentBlockData.props.ICON).style.display = display;
}

if (contentBlockData.type[contentBlockData.typeElement.value] === 'block-advantages-item') {
		contentBlockData.processIcon('');
		contentBlockData.processTitle('');
		contentBlockData.processTitleType('');
}

Для реализации вывода на фронт необходимо создать в модуле realweb.api.module подмодуль контентных блоков, создать три класса унаследованные от базовых:

  • Collection(\Realweb\Api\Module\Content\Model\Block\Collection)
  • Entity(\Realweb\Api\Module\Content\Model\Block\Entity)
  • Database(\Realweb\Api\Module\Content\Model\Block\Database)

В Database добавляется подключение новых одиночных свойств

php
public static function getQuery(Pagination $obNav = null): Query
{
		return parent::getQuery($obNav)
			->registerFields(array('ICON'), self::getIblockId())
			->registerFileField('ICON');
}

В Collection получение множественных свойств, пример реализации в базовом классе processMultiProperties, необходимо переопределить данную функцию

В Entity реализация метода toJson.

php
public function toJson(): array
{
	  if ($this->isTypeBlockAdvantageItem()) {
          return array(
            'title' => $this->getName(),
            'icon' => $this->getIconSrc()
          );
      } else {
		  return parent::toJson();
	  }
}

В init.php необходимо добавить код, который установит кастомную Database для модуля

php
if (Loader::includeModule('realweb.api.content')) {
		\Realweb\Api\Module\Content\Model\Helper::getInstance()->setDatabase(\Realweb\Api\Module\Content\Model\Element\Block\Database::class);
}

Реальный пример использования с новыми типами можно увидеть тут karamelkaplace.bitrix.dev.realweb.ru

Репозиторий

Репозиторий модуля