Битрикс. Пользовательские поля раздела инфоблока
17.10.2018
Теги: CMS • component_epilog.php • Web-разработка • Битрикс • Инфоблок • ОтложенныеФункции • ПользовательскиеСвойства • РазделИнфоблока
Битрикс позволяет создавать пользовательские свойства для элементов инфоблока и пользовательские поля для разделов инфоблока, кроме тех, что доступны изначально. Давайте создадим два пользовательских поля для разделов инфоблока и посмотрим, как их можно получить, чтобы в дальнейшем использовать в шаблоне.
Это будут свойства для хранения мета-тегов description
и keywords
. В панели управления переходим на страницу управления разделами и элементами инфоблока
И вызываем форму редактирования какого-нибудь раздела. Переходим на вкладку «Доп.поля»:
Создаем два поля:
UF_SECT_DESCR
— для хранения мета-тегаdescription
UF_SECT_KEYWRD
— для хранения мета-тегаkeywords
Чтобы получить пользовательские поля в коде компонента:
/*...*/ if ($this->StartResultCache(false, $cacheDependence)) { // какие поля раздела инфоблока выбираем $arSelect = array( 'ID', 'NAME', 'DESCRIPTION', 'UF_*' // получаем пользовательские поля ); // условия выборки раздела инфоблока $arFilter = array( 'IBLOCK_ID' => $arParams['IBLOCK_ID'], 'ACTIVE' => 'Y', 'ID' => $arParams['SECTION_ID'] ); // выполняем запрос к базе данных $rsSection = CIBlockSection::GetList(array(), $arFilter, false, $arSelect); // устанавливаем шаблон пути для раздела, вместо того, // который указан в настройках информационного блока $rsSection->SetUrlTemplates('', $arParams['SECTION_URL']); $arResult = $rsSection->GetNext(); if (isset($arResult['ID'])) { // данные получены успешно? /*...*/ $this->SetResultCacheKeys( array( 'ID', 'UF_SECT_DESCR', 'UF_SECT_KEYWRD' ) ); $this->IncludeComponentTemplate(); } else { // какие-то проблемы $this->AbortResultCache(); \Bitrix\Iblock\Component\Tools::process404( trim($arParams['MESSAGE_404']) ?: 'Раздел инфоблока не найден', true, $arParams['SET_STATUS_404'] === 'Y', $arParams['SHOW_404'] === 'Y', $arParams['FILE_404'] ); } } /*...*/
Теперь можем установить значения мета-тегов для страницы раздела инфоблока — либо ниже по коду компонента:
/*...*/ if ($this->StartResultCache(false, $cacheDependence)) { /* * Здесь код, который получает данные о разделе инфоблока из базы данных */ if (isset($arResult['ID'])) { // данные получены успешно? /*...*/ $this->SetResultCacheKeys( array( 'ID', 'UF_SECT_DESCR', 'UF_SECT_KEYWRD' ) ); $this->IncludeComponentTemplate(); } else { // какие-то проблемы $this->AbortResultCache(); \Bitrix\Iblock\Component\Tools::process404(/*...*/); } } // кэш не затронет все действия ниже, здесь работаем уже с другим $arResult if (isset($arResult['ID'])) { // устанавливаем мета-теги с помощью отложенной функции $GLOBALS['APPLICATION']->SetPageProperty('description', $arResult['UF_SECT_DESCR']); $GLOBALS['APPLICATION']->SetPageProperty('keywords', $arResult['UF_SECT_KEYWRD']); }
либо в файле component_epilog.php
, который никогда не кешируется:
<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); // устанавливаем мета-теги с помощью отложенной функции $GLOBALS['APPLICATION']->SetPageProperty('description', $arResult['UF_SECT_DESCR']); $GLOBALS['APPLICATION']->SetPageProperty('keywords', $arResult['UF_SECT_KEYWRD']);
Отложенные функции — технология, позволяющая задавать заголовок страницы, пункты навигационной цепочки, CSS стили, дополнительные кнопки в панель управления, мета-теги и т.п. с помощью функций, используемых непосредственно в теле страницы. Соответствующие результаты работы этих функций выводятся в прологе, то есть выше по коду, чем они были заданы.
Технология была создана в первую очередь для использования в компонентах, которые, как правило, выводятся в теле страницы, но при этом внутри них могут быть заданы заголовок страницы, добавлен пункт в навигационную цепочку, добавлена кнопка в панель управления и так далее. Отложенные функции нельзя использовать в файлах шаблона компонента template.php
и result_modifier.php
(так как результаты их выполнения кешируются).
Обратите внимание, что нативные компоненты Битрикс могут сами устанавливать мета-теги descriptoin
и keywords
. И тем самым переопределять значения, установленные в component_epilog.php
. Вот типичный код нативного компонента:
/*...*/ if ($this->StartResultCache(false, $cacheDependence)) { /*...*/ $this->SetResultCacheKeys( array( 'ID', 'IBLOCK_ID', 'NAME', 'PATH', 'IPROPERTY_VALUES' ) ); // подключаем шаблон компонента $this->IncludeComponentTemplate(); } // этот код отработает уже после кода component_epilog.php if (isset($arResult['ID'])) { /*...*/ // установить мета-тег keywords? if ($arParams['SET_META_KEYWORDS'] == 'Y' && $arResult['IPROPERTY_VALUES']['SECTION_META_KEYWORDS'] != '') { $APPLICATION->SetPageProperty('keywords', $arResult['IPROPERTY_VALUES']['SECTION_META_KEYWORDS']); } // установить мета-тег description? if ($arParams['SET_META_DESCRIPTION'] == 'Y' && $arResult['IPROPERTY_VALUES']['SECTION_META_DESCRIPTION'] != '') { $APPLICATION->SetPageProperty('description', $arResult['IPROPERTY_VALUES']['SECTION_META_DESCRIPTION']); } /*...*/ }
Пользовательские поля других объектов
Пользовательское поле — инструмент, позволяющий добавлять к объектам системы поля, не предусмотренные штатным функционалом. Пользовательские поля могут создаваться в неограниченном количестве для каждого объекта. При выборе того или иного типа пользовательского поля становятся доступными дополнительные поля настройки для соответствующего типа.
Применение пользовательских полей в Битрикс в привязке к тем или иным модулям, задаётся с помощью объектов, которые необходимо указать при создании поля. Не все модули имеют объекты для пользовательских полей по умолчанию. Разработчик может создавать собственные объекты, но надо понимать, что в методах GetList()
поддерживаются только системные объекты:
Штатные объекты пользовательских полей | ||
---|---|---|
Модуль | Объект | Описание |
Главный модуль | USER |
для пользователя |
Блоги | BLOG_BLOG |
для блога |
BLOG_POST |
для сообщения в блоге | |
BLOG_COMMENT |
для комментария сообщения | |
Задачи | TASKS_TASK |
для задач |
Информационные блоки | IBLOCK_N_SECTION |
для секций инфоблока с ID=N |
IBLOCK_N |
Для инфоблока с ID=N |
|
Календарь | CALENDAR_EVENT |
для событий календаря |
Обучение | LEARN_ATTEMPT |
для попыток теста |
Социальная сеть | SONET_GROUP |
для групп соцсети |
Библиотека документов | WEBDAV |
для библиотек документов |
Форум | FORUM_MESSAGE |
для сообщений форума |
Highload-блоки | HLBLOCK_N |
для highload-блока с ID=N |
- Битрикс. Работа с инфоблоками в старом ядре
- Битрикс. Кеширование в компонентах
- Битрикс. Работа с инфоблоками в новом ядре
- Битрикс. Пользовательские свойства элемента инфоблока
- Битрикс. Создание комплексного компонента. Часть 4 из 4
- Битрикс. Создание комплексного компонента. Часть 3 из 4
- Битрикс. Создание комплексного компонента. Часть 2 из 4
Поиск: CMS • Web-разработка • Битрикс • Инфоблок • Пользовательские свойства • Раздел инфоблока • result_modifier.php • component_epilog.php • SetResultCacheKeys • Отложенные функции