Полный цикл в digital

Пользовательские свойства раздела инфоблока

Битрикс позволяет создавать пользовательские свойства для элементов инфоблока и пользовательские поля для разделов инфоблока, кроме тех, что доступны изначально. Давайте создадим два пользовательских поля для разделов инфоблока и посмотрим, как их можно получить, чтобы в дальнейшем использовать в шаблоне.

Это будут свойства для хранения мета-тегов description и keywords. В панели управления переходим на страницу управления разделами и элементами инфоблока:

Вызываем форму редактирования какого-нибудь раздела, перейдем на вкладку Доп.поля:

Создаем два поля:

  1. UF_SECT_DESCR для хранения мета-тега description
  2. 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']);
// массив значений полей приведенный в HTML безопасный вид
$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(
'Страница не найдена',
true,
true
);
}
// кэш не затронет все действия ниже, здесь работаем уже с другим $arResult
if (isset($arResult['ID'])) {
// устанавливаем мета-теги с помощью отложенной функции
$GLOBALS['APPLICATION']->SetPageProperty('description', $arResult['UF_SECT_DESCR']);
$GLOBALS['APPLICATION']->SetPageProperty('keywords', $arResult['UF_SECT_KEYWRD']);
}
}

Обратите внимание, что нативные компоненты Битрикс могут сами устанавливать мета-теги 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']);
}
/*...*/
}
Заполните форму уже сегодня!
Для начала сотрудничества необходимо заполнить заявку или заказать обратный звонок. В ответ получите коммерческое предложение, которое будет содержать индивидуальную стратегию с учетом требований и поставленных задач
Работаем по будням с 9:00 до 18:00. Заявки, отправленные в выходные, обрабатываем в первый рабочий день до 12:00.
Спасибо, ваш запрос принят и будет обработан!
Эйч Маркетинг