Yandex Metrika
sanches.free 20 просмотров

InheritedProperty: шаблоны SEO инфоблока, раздела и элемента

Три уровня наследования

API \Bitrix\Iblock\InheritedProperty разделяет шаблоны по носителю: весь инфоблок, конкретный раздел или элемент. Для каждого уровня есть свой класс шаблонов с одинаковым паттерном findTemplates() → правка массива → set() или delete().

Инфоблок

use Bitrix\Iblock\InheritedProperty\IblockTemplates;

$gate = new IblockTemplates($iblockId);
$current = $gate->findTemplates();
$patch = [
    'SECTION_META_TITLE' => $current['SECTION_META_TITLE']['TEMPLATE'] . ' — {=this.Name}',
];
$gate->set($patch);

Раздел

use Bitrix\Iblock\InheritedProperty\SectionTemplates;

$gate = new SectionTemplates($iblockId, $sectionId);
$current = $gate->findTemplates();
$gate->set([
    'SECTION_META_TITLE' => $current['SECTION_META_TITLE']['TEMPLATE'] . ' | доп. суффикс',
]);

Элемент

use Bitrix\Iblock\InheritedProperty\ElementTemplates;

$gate = new ElementTemplates($iblockId, $elementId);
$current = $gate->findTemplates();
$gate->set([
    'ELEMENT_META_TITLE' => $current['ELEMENT_META_TITLE']['TEMPLATE'] . ' — {=this.Name}',
]);

Сброс шаблонов

delete() на соответствующем объекте убирает переопределения на выбранном уровне — полезно при откате миграций или очистке тестовых данных.

(new IblockTemplates($iblockId))->delete();
(new SectionTemplates($iblockId, $sectionId))->delete();
(new ElementTemplates($iblockId, $elementId))->delete();

Смежные темы

Значения вычисленных SEO-полей и работа с функциями в фигурных скобках описаны в соседних заметках про значения inherited properties и кастомные функции шаблона.

Итог

Три класса с симметричным API закрывают массовые правки и точечные правки на разделе/элементе без ручного ковыряния в b_iblock_element_property.

Не хотите копаться сами?

Починю за 1-3 дня. Без предоплаты — оплата по результату.

15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии