Appearance
Инфоблоки
Для работы с инфоблоками предусмотрен ряд классов, которые по сути являются оберткой над D7 облегчающие работу с ним.
ID инфоблоков
Стандартом разработки в runway является использование миграций, поэтому использование "захардкоженных" ID инфоблоков невозможно.
Пример
На одном и том же проекте выполняются одновременно 2 задачи: Внедрение новостей и внедрение страницы с контактами. В обеих задачах используются инфоблоки. Без использования миграций для выполнения задач со стороны БД требуется:
- Создать инфоблок - для каждой задачи свой
- Создать свойства
- Перенести (По сути снова создать) ИБ на dev сервер, а после и на prod.
Также не ясно как решать проблему совпадающих ID инфоблоков - ID автоинкрементный и добиться одинаковой БД у всех программистов и серверов практически не реально. Модуль миграций в значительной мере облегчает разработку
Для решения проблемы определения инфоблока по ID на проектах используются константы определяемые с помощью класса \Realweb\Api\Model\Iblock\Helper
Каждый инфоблок на сайте обязан удовлетворять 2 требованиям:
- Иметь уникальный в рамках
типа инфоблокасимвольный кодCODE - Быть 2.0 (Т.е. свойства инфоблока должны содержаться в отдельной таблице)
При каждом запросе (это удобно делать в файле init.php или при подключении модуля realweb.api.modules) необходимо выполнить метод
php
\Realweb\Api\Model\Iblock\Helper::getInstance()->definers();Данный метод объявит ряд констант вида IBLOCK_#ТИП ИНФОБЛОКА#_#КОД ИНФОБЛОКА#
Эти константы затем будут использоваться в построении запросов к инфоблокам.
Основной запрос
Основной запрос к получению элементов или разделов ИБ \Realweb\Api\Model\Iblock\Query наследуется от общего запроса к таблицам \Realweb\Api\Model\Orm\Query и содержит общие методы для обеих сущностей.
Имеет ряд встроенных методов:
public function setSelect(array $arSelect): static- добавление стандартных полей таблицы в выборкуpublic function setOrder($mOrder): static- указание сортировкиpublic function registerParentSectionField(?int $iBlockId = null): static- добавление родительского раздела в выборку. По умолчанию добавляются поляNAME,CODEиSORT. По желанию также можно добавить любые поля через->addSelect('IBLOCK_SECTION.FIELD', 'IBLOCK_SECTION_FIELD')public function registerSectionCodePath(): static- добавление в выборку пути из символьных кодов родительских разделов. Используется для построения ссылки на сущность.
Особенность
Для разделов символьный код самого раздела не включается в путь
public function registerSectionNamePath(): static- добавление в выборку пути из имен родительских разделов. Вместе с методомregisterSectionCodePath()используется для построения хлебных крошек для сущностиpublic function registerAccessField(string $strField, array $arUserGroups, string $strEntityType, ?string $strRuntimeField = null): static- Добавление в выборку полей с правами на сущность
Сущность БД
Единая сущность для элемента, раздела и самого инфоблока \Realweb\Api\Model\Iblock\Entity наследуется от \Realweb\Api\Model\Data\Entity
Имеет встроенные методы общие для всех 3-х сущностей
public function getUrlTemplate(): ?string- Получение шаблона урл сущностиpublic function processMetaValues(): void- Получение сео мета данных сущности
Особенность
Мета данные инфоблока устанавливаются с помощью Метаданных для Инфоблоков
public function addBreadCrumb(): self- Добавление хлебной крошки в общий контейнер для работы с Seopublic function setMeta(): self- Установка метаданных на страницеpublic function getId(): ?int- Получение первичного ключа- Определение типа сущности, используется для внутренних нужд ядра
php
public function isIblock(): bool
public function isSection(): bool
public function isElement(): boolЭлементы
Сущность для работы с элементами ИБ \Realweb\Api\Model\Iblock\Element\Entity наследуется от общей сущности ИБ \Realweb\Api\Model\Iblock\Entity
Дополнительно имеет следующие методы
public function getIblock(): ?\Realweb\Api\Model\Iblock\Iblock\Entity- получение сущности инфоблокаpublic function getPreviewPicture(): ?PublicFile- получение файла картинки для анонсаpublic function getDetailPicture(): ?PublicFile- получение файла детальной картинкиpublic function getUrl(): string- получение ссылки на элемент в публичной частиpublic function save(): bool- сохранение элементаpublic function delete(): bool- удаление элементаpublic function addBreadCrumb(): self- добавление хлебной крошки элемента (Мета выводится через класс\Realweb\Api\Model\Utils\Seo)public function setMeta(): self- установка мета тегов элемента (Мета выводится через класс\Realweb\Api\Model\Utils\Seo)public function getMetaValues(): Meta\Collection- получение коллекции мета тегов (вернет пустую коллекцию без использования методаprocessMetaValues)public function processMetaValues(): void- получение мета тегов элемента и добавление их в коллекцию\Realweb\Api\Model\Iblock\Meta\Collection- Ряд других вспомогательных методов
Замечание
Получение мета тегов осуществляется в кешируемой части контроллера методом processMetaValues(). Без вызова этого метода - getMetaValues вернет пустую коллекцию
Каждая наследуемая сущность элемента обязана реализовывать метод возвращающий название класса БД protected static function _getDatabase(): string.
Основной запрос
Основной запрос к списку элементов \Realweb\Api\Model\Iblock\Element\Query наследует \Realweb\Api\Model\Iblock\Query и имеет ряд встроенных методов:
public function registerDropdownField(string $strName, int $iBlockId): static- регистрация свойства типа "список"public function registerMultiDropdownField(string $strName, int $iBlockId): static- регистрация множественного свойства типа "список"public function registerPreviewPicture(bool $bWithSize = false): static- регистрация картинки для анонсаpublic function registerDetailPicture(bool $bWithSize = false): static- регистрация детальной картинкиpublic function registerMultiFileField(string $strName, int $iBlockId): static- регистрация множественного свойства типа "Файл"public function registerMultiParentSectionField(): static- регистрация множественной привязки элемента к разделамpublic function registerElementLinkField(string $strName, int $iBlockId): static- регистрация привязки к элементу ИБ
Рекомендация
Для получения множественных свойств рекомендуется пользоваться Получением множественных свойств через коллекцию
База данных
База данных элементов \Realweb\Api\Model\Iblock\Element\Database наследуется от стандартной БД \Realweb\Api\Model\Data\Database и имеет встроенные методы:
public static function getQuery(?Pagination $obNav = null): Query- основной запрос к элементам инфоблока В качестве параметров можно предавать следующие:active-boolean, активность элементов, по умолчаниюfalseid-integer, фильтр поIDids-array, фильтр по массивуIDcode-string, фильтр по символьному кодуCODEcodes-array, фильтр по массиву символьных кодовCODEiblock_section_id-integer, фильтр по полюIBLOCK_SECTION_IDiblock_section_ids-array, фильтр по массивуIBLOCK_SECTION_IDsection_id-integer, фильтр по родительскому разделу (в том числе, учитывая множественную привязку)section_ids-array, фильтр по массиву родительских разделов (в том числе, учитывая множественную привязку)include_subsections-boolean, в случае наличия параметровsection_idилиsection_ids- учитывать ли дочерние разделыorder-array, сортировка
public static function getCacheTag(): string- получение тэга для кеша, используется в контроллереpublic static function getMetaCacheTag(): string- получение тэга для кеша данных инфоблока, используется в контроллереpublic static function clearCache(): void- очищение кеша инфоблокаpublic static function getSingleTable(): Property\Single\Table- получение ORM сущности таблицы свойств элементовpublic static function getMultiTable(): Property\Multi\Table- получение ORM сущности таблицы множественных свойств элементов
Сохранение элемента
Для успешного сохранения полей элемента, необходимо, чтобы БД элемента возвращала массив полей методом public static function getFields(): array - по умолчанию возвращается свойство класса БД $arFields.
Для успешного сохранения свойств элемента, необходимо, чтобы БД элемента возвращала массив полей методом public static function getProps(): array - по умолчанию возвращается свойство класса БД $arProps
Свойства
Для работы со свойствами следует использовать Orm структуру свойств.
Для получения свойств удобно пользоваться встроенным в ядро модулем Iblock: контроллеры \Realweb\Api\Module\Iblock\Controller\PropertyController и \Realweb\Api\Module\Iblock\Controller\Property\EnumController.
Запрос базы данных \Realweb\Api\Model\Iblock\Element\Property\Database поддерживает следующие параметры:
codes-array, фильтр по массивуCODEmultiple-string,NилиY, фильтр поMULTIPLEiblock_id-integer, фильтр поIBLOCK_IDiblock_ids-array, фильтр по массивуIBLOCK_ID
Сущность свойства \Realweb\Api\Model\Iblock\Element\Property\Entity наследуется от стандартной \Realweb\Api\Model\Data\Entity и имеет встроенные методы:
public function getValueColumnName(): string- получение название поля, где хранится значениеpublic function getDescriptionColumnName(): string- получение название поля, где хранится описание к значениюpublic function isDetailShow(): bool- настройки свойства, показывать ли на детальной страницеpublic function isInBasket(): bool- настройки свойства, значение добавляется в корзинуpublic function isOfferTree(): bool- настройки свойства, используется для выбора торговых предложенийpublic function getCodeFormatted(): string- получение кода свойства в нижнем регистреpublic function isDescription(): bool- выводить ли описание в редактировании элементаpublic function isMultiple(): bool- множественностьpublic function isRequired(): bool- обязательность к заполнениюpublic function isEnum(): bool- тип свойства "список выбора"public function isString(): bool- тип свойства "строка"public function isFile(): bool- тип свойства "файл"public function isElement(): bool- тип свойства "привязка к элементу"public function isSection(): bool- тип свойства "привязка к разделу"public function isNumber(): bool- тип свойства "число"public function isDirectory(): bool- тип свойства "cправочник" (HL блок)public function getEnumValues(): Enum\Collection- коллекция значений типа Enumpublic function isSmartFilter(): bool- отображать в "умном" фильтреpublic function getArUserTypeSettings(): ?array- получение настроек свойстваpublic function getFeature(): Feature\Collectionполучение коллекции дополнительных данных
Коллекция сущностей \Realweb\Api\Model\Iblock\Element\Property\Collection наследуется от стандартной и имеет встроенные методы:
getByCode- получение свойства по символьному кодуgetByXmlId- получение свойства по внешнему кодуprocessFeatures- получение дополнительных данныхFeatureprocessFilter- получение данных для "умного" фильтраFilter, в качестве параметра передаетсяIDраздела, 0 - значит для всехprocessEnumValues- получение значений типа список EnumgetOfferTree- получение коллекции свойств для отбора ТПgetSingle- получение коллекции одиночных свойствgetMultiple- получение коллекции множественных свойствgetFilterProperties- получение коллекции свойств отображаемых в "умном" фильтре
Множественные свойства
Для работы со значениями множественных свойств используется Orm структура \Realweb\Api\Model\Iblock\Element\Property\Multi.
База данных \Realweb\Api\Model\Iblock\Element\Property\Multi\Database содержит основной запрос к таблице со значениями. Так как стандартом разработки является использование инфоблоков 2.0 (Т.е. свойства инфоблока содержатся в отдельной таблице) для получения значений для конкретного ИБ необходимо создать собственную Orm структуру, наследуемую от "ядерной" и в классе Database реализовать метод public static function getIblockId(): int; возвращающий ID необходимого ИБ.
По умолчанию база данных \Realweb\Api\Model\Iblock\Element\Property\Multi\Database принимает следующие параметры (Которые при необходимости можно расширить в своем классе)
id-integer, фильтр поIDids-array, фильтр по массивуIDproperty_id-integer, фильтр поPROPERTY_IDproperty_code-string, фильтр поPROPERTY_CODEelement_id-integer, фильтр поIBLOCK_ELEMENT_ID
Рекомендация
Получение значений множественных свойств для элементов удобно производить через коллекцию элементов
Значения свойства типа список
Для работы со значениями свойства типа список используется Orm структура \Realweb\Api\Model\Iblock\Element\Property\Enum
Запрос базы данных \Realweb\Api\Model\Iblock\Element\Property\Enum\Database принимает следующие параметры:
id-integer, фильтр поIDids-array, фильтр по массивуIDxml_id-integer, фильтр поXML_IDxml_ids-array, фильтр по массивуXML_IDproperty_code-string, фильтр поPROPERTY_CODEproperty_codes-array, фильтр по массивуPROPERTY_CODEproperty_id-integer, фильтр поPROPERTY_IDproperty_ids-array, фильтр по массивуPROPERTY_IDiblock_id-integer, фильтр поIBLOCK_ID
Коллекция значений \Realweb\Api\Model\Iblock\Element\Property\Enum\Collection наследуется от стандартной и дополнительно содержит методы:
getByXmlId- получение объекта значения, по внешнему ключуXML_IDgetXmlIds- получение массива внешних ключейXML_ID
Рекомендация
Получение значений свойств типа список для элементов удобно производить через контроллер \Realweb\Api\Module\Iblock\Controller\Property\EnumController.
База данных
Содержит основной запрос к БД. В качестве параметров можно предавать следующие:
codes-array, фильтр по массивуCODEmultiple-string, N или Y, фильтр поMULTIPLEiblock_id-integer, фильтр поIBLOCK_IDiblock_ids-array, фильтр по массивуIBLOCK_ID
Коллекция
Коллекция сущностей \Realweb\Api\Model\Iblock\Element\Property\Collection наследуется от стандартной \Realweb\Api\Model\Data\Collection и имеет дополнительные методы:
getByCode- получение свойства по символьному кодуgetByXmlId- получение свойства по внешнему кодуprocessFeatures- получение дополнительных данных FeatureprocessFilter- получение данных для "умного" фильтра Filter, в качестве параметра передаетсяIDраздела, 0 - значит для всехprocessEnumValues- получение значений типа список EnumgetOfferTree- получение коллекции свойств для отбора ТПgetSingle- получение коллекции одиночных свойствgetMultiple- получение коллекции множественных свойствgetFilterProperties- получение коллекции свойств отображаемых в "умном" фильтре
Дополнительные данные
Дополнительные данные для свойств содержатся в таблице b_iblock_property_feature. Таблица имеет следующую структуру:
ID | PROPERTY_ID | MODULE_ID | FEATURE_ID | IS_ENABLED |
|---|---|---|---|---|
| Первичный ключ | ID свойства | Символьный код модуля | Символьный код "фичи" | Активность |
MODULE_ID и FEATURE_ID могут принимать значения
iblock- инфоблокиLIST_PAGE_SHOW- Показывать на странице списка элементовDETAIL_PAGE_SHOW- Показывать на детальной странице элемента
catalog- каталогIN_BASKET- Значение добавляется в корзину
Умный фильтр
Для работы с "умным" фильтром (какие свойства в каком виде и в каких разделах отображать) можно воспользоваться Orm структурой \Realweb\Api\Model\Iblock\Element\Property\Filter.
Данные хранятся в таблице b_iblock_section_property, которая имеет следующую структуру
IBLOCK_ID | SECTION_ID | PROPERTY_ID | SMART_FILTER | DISPLAY_TYPE | DISPLAY_EXPANDED | FILTER_HINT |
|---|---|---|---|---|---|---|
| ID инфоблока | ID раздела | ID свойства | Присутствие в смартфильтре Y/N | Вид отображения | Отображать "открытым" Y/N | Подсказка |
Вид отображения DISPLAY_TYPE может принимать значения
A- Поле ввода для чисел со слайдеромB- Поле ввода для чиселF- чекбоксыG- чекбоксы с изображениямиH- чекбоксы с изображениями и подписямиK- радио-кнопкаP- список выбораR- список выбора с изображениями и подписямиU- календарь
База данных \Realweb\Api\Model\Iblock\Element\Property\Filter\Database наследуется от стандартной.
В качестве параметров можно предавать следующие:
property_id-integer, фильтр поPROPERTY_IDproperty_ids-array, фильтр по массивуPROPERTY_IDiblock_id-integer, фильтр поIBLOCK_IDsection_id-integer, фильтр поSECTION_IDsmart_filter-string,YилиN, фильтр поSMART_FILTER
Сущность записи \Realweb\Api\Model\Iblock\Element\Property\Filter\Entity наследуется от стандартной и имеет методы:
isSmartFilter- отображать в фильтреisDisplayExpanded- отображать развернутымisCheckbox- отображать как чекбоксisRadio- отображать как радио-кнопку
Получение множественных свойств через коллекцию
Для получения множественных свойств необходимо в коллекции реализовать метод получения класса базы данных _getDatabase
php
protected function _getDatabase(): string
{
return Database::class;
}Далее необходимо вызвать метод processMultiProperties, передав массив $arProps с символьными кодами свойств, при необходимости
php
$obCollection->processMultiProperties($arProps);Поддерживается три типа данных:
\Realweb\Api\Model\Iblock\Element\Property\Multi\Value\Collection- коллекция значений с описанием (Все типы свойств, кроме файлов и списков [enum])\Realweb\Api\Model\FileSystem\Bitrix\Collection- коллекция файлов\Realweb\Api\Model\Iblock\Element\Property\Enum\Collection- коллекция значения типа список
Для получения данных необходимо в Entity добавить магические методы для получения свойств, например
php
@method \Realweb\Api\Model\Iblock\Element\Property\Multi\Value\Collection getEmails()
@method \Realweb\Api\Model\FileSystem\Bitrix\Collection getPictures()
@method \Realweb\Api\Model\Iblock\Element\Property\Enum\Collection getTypes()При этом название метода строится по следующему алгоритму:
- Преобразовываем название поля в CamelCase (знаки "_" опускаются, следующая буква после этого знака - с большой буквы)
- Добавляем префикс get
Для типа коллекция значений с описанием \Realweb\Api\Model\Iblock\Element\Property\Enum\Collection метод toJson вернет массив значений, если нужен иной вывод, то в Entity необходимо добавить соответствующий метод, где формируется необходимая структура.
Для получения значений типа элемент или раздел или ХБ, где значением будет коллекция сущностей соответствующего типа, необходимо в коллекции реализовать методы processElements/processSections/processHighLoadBlock взяв ИД сущностей из коллекции значений \Realweb\Api\Model\Iblock\Element\Property\Multi\Value\Collection нужных свойств в Entity
Пользовательские типы свойств
Список пользовательских свойств
Разделы
Сущность для работы с разделами ИБ \Realweb\Api\Model\Iblock\Section\Entity наследуется от общей сущности ИБ \Realweb\Api\Model\Iblock\Entity
Дополнительно имеет следующие методы
public function getPicture(): ?PublicFile- получение картинки раздела в виде объектаPublicFilepublic function getDetailPicture(): ?PublicFile- получение детальной картинки раздела в виде объектаPublicFilepublic function getIblock(): ?\Realweb\Api\Model\Iblock\Iblock\Entity- получение сущности инфоблокаpublic function getUrl(): string- получение ссылки на раздел в публичной частиpublic function getChildSections(): Collection- получение коллекции дочерних разделовpublic function setChildSections($obCollection): self- установка коллекции дочерних разделовpublic function addChildSection($obSection): self- добавление раздела в коллекцию дочерних разделовpublic function getChain(): Collection- получение "цепочки" разделов начиная от корневого, заканчивая текущим (Например, для получения хлебных крошек)public function save(): bool- сохранение разделаpublic function delete(): bool- удаление разделаpublic function addBreadCrumb(): self- добавление хлебной крошки раздела (Мета выводится через класс\Realweb\Api\Model\Utils\Seo)public function setMeta(): self- установка мета тегов раздела (Мета выводится через класс\Realweb\Api\Model\Utils\Seo)public function getMetaValues(): Meta\Collection- получение коллекции мета тегов (вернет пустую коллекцию без использования методаprocessMetaValues)public function processMetaValues(): void- получение мета тегов раздела и добавление их в коллекцию\Realweb\Api\Model\Iblock\Meta\Collection- Ряд других вспомогательных методов
Замечание
Получение мета тегов осуществляется в кешируемой части контроллера методом processMetaValues(). Без вызова этого метода - getMetaValues вернет пустую коллекцию
Каждая наследуемая сущность элемента обязана реализовывать метод возвращающий название класса БД protected static function _getDatabase(): string.
Основной запрос
Основной запрос к списку элементов \Realweb\Api\Model\Iblock\Section\Query наследует \Realweb\Api\Model\Iblock\Query и имеет ряд встроенных методов:
public function registerPicture(bool $bWithSize = false): static- получение пути к картинке разделаpublic function registerDetailPicture(bool $bWithSize = false): static- получение пути к детальной картинке разделаpublic function registerPathCode(): static- получение "пути" символьных кодов до текущего разделаpublic function registerPathName(): static- получение "пути" имен до текущего разделаpublic function registerSectionEnumField(string $strField): static- регистрация свойства типа "Список"public function registerSectionMultiField(string $strField, int $iBlockId, ?string $strAlias = null): static- регистрация множественного свойстваpublic function registerSectionMultiFileField(string $strField, int $iBlockId, ?string $strAlias = null): static- регистрация множественного свойства типа "файл"
База данных
База данных разделов \Realweb\Api\Model\Iblock\Section\Database наследуется от стандартной БД \Realweb\Api\Model\Data\Database и имеет встроенные методы:
public static function getQuery(?Pagination $obNav = null): Query- основной запрос к разделам инфоблока В качестве параметров можно предавать следующие:active-boolean, активность разделов, по умолчаниюfalseid-integer, фильтр поIDids-array, фильтр по массивуIDcode-string, фильтр по символьному кодуCODEcodes-array, фильтр по массиву символьных кодовCODEiblock_section_id-integer, фильтр по полюIBLOCK_SECTION_IDiblock_section_ids-array, фильтр по массивуIBLOCK_SECTION_IDsection_id-integer, фильтр по родительскому разделу (в том числе, учитывая множественную привязку)section_ids-array, фильтр по массиву родительских разделов (в том числе, учитывая множественную привязку)left_margin-array, фильтр по полюLEFT_MARGIN. Массив из строго двух элементов- 1-ый элемент - символ операции (=,<,>,<=,>=)
- 2-ой элемент - значение
right_margin-array, фильтр по полюRIGHT_MARGIN. Массив из строго двух элементов- 1-ый элемент - символ операции (=,<,>,<=,>=)
- 2-ой элемент - значение
depth_level-integer, фильтр по полюDEPTH_LEVELorder-array, сортировка
public static function getCacheTag(): string- получение тэга для кеша, используется в контроллереpublic static function clearCache(): void- очищение кеша инфоблока
Для того чтобы была возможность добавлять в запрос поля UF_* необходимо в классе Database установить специальную константу
php
protected const QUERY_WITH_UF = true;Коллекция
Коллекция разделов \Realweb\Api\Model\Iblock\Section\Collection наследуется от стандартной коллекции \Realweb\Api\Model\Data\Collection и имеет встроенные методы:
public function getTreeArray(): array- получение "дерева" из плоской коллекции разделов в виде массиваpublic function getTree(): self- получение "дерева" из плоской коллекции разделов в виде коллекции
Сохранение раздела
Для успешного сохранения раздела, необходимо, чтобы БД раздела возвращала массив полей методом public static function getFields(): array - по умолчанию возвращается свойство класса БД $arFields
Для успешного сохранения свойств UF_* раздела, необходимо, чтобы они присутствовали в массиве возвращаемых полей для сохранения, а также присутствие константы QUERY_WITH_UF в БД раздела
php
protected const QUERY_WITH_UF = true;Необходимости регистрировать свойства UF_* отдельно нет, достаточно просто добавить их в список выбора полей.
Привязка к элементам
Для работы с множественной привязкой элементов к разделам (таблица b_iblock_section_element) следует пользоваться Orm структурой \Realweb\Api\Model\Iblock\Section\Element
База данных \Realweb\Api\Model\Iblock\Section\Element\Database наследуется от стандартной БД \Realweb\Api\Model\Data\Database
Доступные параметры:
element_id- фильтр по полюIBLOCK_ELEMENT_IDsection_id- фильтр по полюIBLOCK_SECTION_IDadditional_property_id- фильтр по полюADDITIONAL_PROPERTY_IDadditional_property_id_null- фильтр по полюADDITIONAL_PROPERTY_ID=nullwith_depth_level- добавление к полям запроса поля разделаDEPTH_LEVEL
Коллекция сущностей \Realweb\Api\Model\Iblock\Section\Element\Collection наследуется от стандартной коллекции \Realweb\Api\Model\Data\Collection и имеет встроенные методы:
public function processSectionParents(): void- получение ИД родительских разделов
Сущность записи в БД \Realweb\Api\Model\Iblock\Section\Element\Entity наследуется от стандартного класса \Realweb\Api\Model\Data\Entity и имеет встроенные методы:
public function getSectionParentIds(): void- получение ИД родительских разделов (доступно после выполнения метода коллекцииprocessSectionParents())
Пользовательские типы свойств
Список пользовательских свойств
Инфоблок
Для работы с сущностями ИБ следует пользоваться Orm структурой \Realweb\Api\Model\Iblock\Iblock.
Пользовательские свойства
Интерфейс

Наравне с разделами у инфоблока также есть возможность добавлять пользовательские свойства UF_*.
Вкладка Пользовательские свойства появляется автоматически при подключении модуля realweb.api.
Для работы со значениями свойств ИБ необходимо создать кастомную Orm структуру в модуле realweb.api.module, для получения данных уже не нужен объект Pagination
Пример Database
php
class Database extends \Realweb\Api\Model\Iblock\Iblock\Database
{
protected const QUERY_WITH_UF = true;
protected static function _getIblockId(): int
{
return IBLOCK_CATALOG_CATALOG;
}
public static function getFields(): array
{
return array_merge(parent::getFields(), array('UF_COUNT', 'UF_TAGS'));
}
public static function getEntity(): string
{
return Entity::class;
}
}Пример Entity
php
/**
* @method int getUfCount()
* @method array getUfTags()
* @method Entity setUfCount(int $iValue)
* @method Entity setUfTags(array $arValue)
*/
class Entity extends \Realweb\Api\Model\Iblock\Iblock\Entity
{
protected static function _getDatabase(): string
{
return Database::class;
}
}Пользовательские типы свойств
Список пользовательских свойств
Метаданные для Инфоблоков
Интерфейс

Внедрение seo мета тегов для инфоблоков (По аналогии с элементами и разделами) может быть полезно для вывода метаданных на разводящих страницах инфоблока (Корневая страница ИБ)
Вкладка SEO инфоблока появляется автоматически при подключении модуля realweb.api.
По умолчанию добавляются поля
IBLOCK_META_TITLE- Шаблон META TITLEIBLOCK_META_KEYWORDS- Шаблон META KEYWORDSIBLOCK_META_DESCRIPTION- Шаблон META DESCRIPTIONIBLOCK_PAGE_TITLE- Заголовок страницы
На событии onBeforeIblockMetaShow есть возможность добавить дополнительные поля
php
use Bitrix\Main\EventManager;
use Bitrix\Main\EventResult;
EventManager::getInstance()
->addEventHandler('realweb.api', 'onBeforeIblockMetaShow', 'onBeforeIblockMetaShow');
function onBeforeIblockMetaShow(\Bitrix\Main\Event $obEvent):EventResult
{
$obResult = new EventResult(EventResult::UNDEFINED,array(
"IBLOCK_META_TEST"=>"Test"
));
return $obResult;
}ToDo
Использовать только актуальные для ИБ формулы (Сейчас используются для раздела)