Зачем кастомные функции SEO
В шаблонах наследуемых SEO-свойств инфоблоков используются выражения вроде {=this.Name}. Ядро позволяет добавить собственные «мини-функции» с параметрами — например, вывести базовую цену только если она положительная.
Схема подключения
- Подключить фабрику шаблонов (как в стандартных примерах ядра).
- Зарегистрировать обработчик события
OnTemplateGetFunctionClassмодуляiblock. - В обработчике по имени функции вернуть
EventResultс классом-наследником\Bitrix\Iblock\Template\Functions\FunctionBase.
Разобраться с эталоном можно по файлу /bitrix/modules/iblock/lib/template/functions/fabric.php в вашей сборке.
Пример: pricenotnull
<?php
namespace Partner\SeoFunctions;
require_once $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/iblock/lib/template/functions/fabric.php';
\Bitrix\Main\EventManager::getInstance()->addEventHandler(
'iblock',
'OnTemplateGetFunctionClass',
__NAMESPACE__ . '\Registry::dispatch'
);
class Registry
{
public static function dispatch(\Bitrix\Main\Event $event)
{
[$functionId] = $event->getParameters();
if ($functionId === 'pricenotnull') {
return new \Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS, '\Partner\SeoFunctions\PriceNotNull');
}
return null;
}
}
class PriceNotNull extends \Bitrix\Iblock\Template\Functions\FunctionBase
{
public function calculate(array $parameters)
{
// {=pricenotnull this.catalog.price.BASE}
$raw = $parameters[0] ?? '';
return (float)$raw > 0 ? $raw : '';
}
}Вызов в шаблоне
{=pricenotnull this.catalog.price.BASE}Параметры перечисляются через пробел; строковые литералы допускаются в кавычках по правилам парсера шаблонов.
Готовые расширения
На Маркетплейсе есть решения вроде «Дополнительные SEO функции» — если не хочется поддерживать свой модуль, можно взять их как основу или для вдохновения.
Итог
Кастомные функции — лёгкий способ убрать «нулевые» значения из мета-тегов и собрать составные шаблоны без лишней логики в шаблонах компонентов.
Не хотите копаться сами?
Починю за 1-3 дня. Без предоплаты — оплата по результату.
15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии