Yandex Metrika
sanches.free

Свои функции в шаблонах SEO вкладки инфоблока (D7)

Зачем кастомные функции SEO

В шаблонах наследуемых SEO-свойств инфоблоков используются выражения вроде {=this.Name}. Ядро позволяет добавить собственные «мини-функции» с параметрами — например, вывести базовую цену только если она положительная.

Схема подключения

  1. Подключить фабрику шаблонов (как в стандартных примерах ядра).
  2. Зарегистрировать обработчик события OnTemplateGetFunctionClass модуля iblock.
  3. В обработчике по имени функции вернуть 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 дней гарантии