Appearance
Модуль добавления контента. 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