Битрикс: API D7 SEO-шаблоны Title
В битриксе есть встроенная гибкая система управления SEO-данными страниц, основанных на инфоблоках. По традиции куцая документация для разработчика. Хотя есть и более продуманная документация для пользователя. В этой заметке опишу на примере одного поля - Title (заголовок окна браузера) - как управляться с этими шаблонами из кода.
Есть возможность дать шаблоны на разных уровнях - будет взят первый из наиболее приоритетных. Самый общий шаблон, который есть - шаблон Title на уровне инфоблока.

Если для раздела не найдётся ничего более точного, то Title будет формироваться на базе этого шаблона из инфоблока.
Получить установленное значение шаблона для Title разделов в инфоблоке можно так:
if ($iblockId > 0 && \Bitrix\Main\Loader::includeModule('iblock')) {
$ipropTemplates = new \Bitrix\Iblock\InheritedProperty\IblockTemplates($iblockId);
$templates = $ipropTemplates->findTemplates();
if (isset($templates['SECTION_META_TITLE'])) {
echo '<pre>';
print_r($templates['SECTION_META_TITLE']);
echo '</pre>';
}
}
Это выведет массив данных вида:
Array
(
[ID] => 2175
[CODE] => SECTION_META_TITLE
[TEMPLATE] => Мой шаблон Title из настроек инфоблока
[ENTITY_TYPE] => B
[ENTITY_ID] => 12
[INHERITED] => N
)
Но если шаблон не задан, то ничего не выведется.
Задать значение шаблона Title для всех разделов в инфоблоке в коде можно так:
if ($iblockId > 0 && \Bitrix\Main\Loader::includeModule('iblock')) {
$ipropTemplates = new \Bitrix\Iblock\InheritedProperty\IblockTemplates($iblockId);
$ipropTemplates->set(['SECTION_META_TITLE' => 'Новый шаблон Title разделов в инфоблоке']);
}
Следующий уровень, на котором можно работать с шаблоном Title для разделов - это на уровне самого раздела инфоблока.
if ($iblockId > 0 && $sectionId > 0 && \Bitrix\Main\Loader::includeModule('iblock')) {
$ipropTemplates = new \Bitrix\Iblock\InheritedProperty\SectionTemplates($iblockId, $sectionId);
$templates = $ipropTemplates->findTemplates();
if (isset($templates['SECTION_META_TITLE'])) {
echo '<pre>';
print_r($templates['SECTION_META_TITLE']);
echo '</pre>';
}
}
Выхлоп будет в аналогичном виде, как было для инфоблока:
Array
(
[ID] => 2173
[CODE] => SECTION_META_TITLE
[TEMPLATE] => {=this.Name}, цены в Магазин.Ру
[ENTITY_TYPE] => S
[ENTITY_ID] => 24
[INHERITED] => N
)
В этих шаблонных данных ENTITY_TYPE может быть одним из следующих значений:
- B - инфоблок
- S - раздел инфоблока
- E - элемент инфоблока
Для шабона Title в разделе появляется смысл в параметре INHERITED - переключает сферу применения шаблона - либо только на текущий раздел (N), либо также на все его дочерние подразделы (Y)

Задать значение шаблона Title для разделов в инфоблока в коде можно так:
if ($iblockId > 0 && \Bitrix\Main\Loader::includeModule('iblock')) {
$ipropTemplates = new \Bitrix\Iblock\InheritedProperty\SectionTemplates($iblockId, $sectionId);
$ipropTemplates->set([
'SECTION_META_TITLE' => 'Новый шаблон Title раздела и всех подразделов',
'INHERITED' => 'Y',
]);
}
Дале по иерархии можно посмотреть и задать шаблон Title для элементов инфоблока - по аналогии, как это делается для раздела.
if ($iblockId > 0 && $elementId > 0 && \Bitrix\Main\Loader::includeModule('iblock')) {
$ipropTemplates = new \Bitrix\Iblock\InheritedProperty\ElementTemplates($iblockId, $elementId);
$templates = $ipropTemplates->findTemplates();
if (isset($templates['SECTION_META_TITLE'])) {
echo '<pre>';
print_r($templates['SECTION_META_TITLE']);
echo '</pre>';
}
}
Если у элемента нет своего собственного шаблона - ищется шаблон у раздела; если у раздела (или любого родительского раздела) нет шаблона, ищется шаблон в инфоблоке.
Комментарии
Отправить комментарий