Следи за нами

Работаем с SEO-шаблонами. Настройка. Доработка

Дата создания: г.

Уже достаточно давно, еще с 14-й версии модуля "Информационные блоки" в 1С-Битрикс появилась возможность задавать шаблоны автоматической генерации мета-данных. Но не все до сих пор умеют пользоваться данным инструментом. В данном посте собраны основные моменты по созданию шаблонов мета-данных.

Данный механизм на основе заранее заготовленного шаблона позволяет генерировать мета-данные (description, title,keywords) для элементов и разделов, а также для элементов доступны шаблоны для установки alt, title и шаблона имени файла детального и анонсового изображений. В шаблоне может быть несколько вариантов данных. Во-первых, это, конечно-же, может быть любой произвольный текст. Этот текст будет выведен автоматически у заданного объекта (и всех потомков, если это раздел, так что не забывайте у потомков написать свой уникальный текст).

В системе создан набор специальных конструкций, прописанных в фигурных скобках и работающих по принципу отложенных функций. Указывается такая конструкция достаточно просто.

Вот список зарезервированных слов:

  • this - означает текущий объект;
  • parent - родительский объект. Пример: {=parent.PreviewText} - анонсовый текст родительского раздела;
  • sections - родительские секции начиная с верхнего уровня. пример: {=this.sections.name} - названия родительских разделов;
  • iblock - инфоблок текущего объекта. Пример: {=iblock.PreviewText} - описание инфоблока;
  • property - свойство текущего объекта. Пример: {=this.property.CML_ARTICLE} - выведет значение свойства с артикулом. Для того чтобы у элемента показать пользовательское свойство, заданное для раздела, можно воспользоваться шаблоном: {=this.parent.property.name} - выдаст значение свойства UF_NAME;
  • Для редакций, имеющих модуль Торговый каталог, можно также получить свойство торгового предложения: {=this.catalog.sku.property.COLOR} - выдаст значение свойства "Цвет" торгового предложения. Чтобы получить значения данного свойства у торговых предложений, но без повторяющихся значений, можно воспользоваться функцией: {=distinct this.catalog.sku.property.COLOR};
  • Чтобы получить цены торговых предложений, необходимо указать тип цены, которая должна быть выведена: {=this.catalog.sku.price.BASE;} - выдаст все цены, либо так: {=min this.catalog.sku.price.BASE} можно получить минимальную цену;
  • Для получения габаритов товара, необходимо обратиться к соответствующим данным: {=this.catalog.weight} - вес товара, {=this.catalog.measure} - единица измерения, {=concat catalog.store ", "} - склады, перечисленные через запятую
  • Для редакций, имеющих модуль Торговый каталог, можно также получить свойство торгового предложения: {=this.catalog.sku.property.COLOR} - выдаст значение свойства "Цвет" торгового предложения. Чтобы получить значения данного свойства у торговых предложений, но без повторяющихся значений, можно воспользоваться функцией: {=distinct this.catalog.sku.property.COLOR};
  • Чтобы получить цены торговых предложений, необходимо указать тип цены, которая должна быть выведена: {=this.catalog.sku.price.BASE;} - выдаст все цены, либо так: {=min this.catalog.sku.price.BASE} можно получить минимальную цену;
  • Для получения габаритов товара, необходимо обратиться к соответствующим данным: {=this.catalog.weight} - вес товара, {=this.catalog.measure} - единица измерения, {=concat catalog.store ", "} - склады, перечисленные через запятую

Конечно же список функций можно расширять до бесконечности. Для этого, нужно воспользоваться обработчиком события OnTemplateGetFunctionClass модуля "Информационные блоки".

В качестве примера рассмотрим создание функции, выводящей значение свойства только тогда, когда свойство заполнено. В init.php создаем обработчик события:

\Bitrix\Main\EventManager::getInstance()->addEventHandler( "iblock", "OnTemplateGetFunctionClass", array("ManaoIblockSeoTemplate", "eventHandler") );

class ManaoIblockSeoTemplate{
    public static function eventHandler($event) {
        $parameters = $event->getParameters();
        $functionClass = $parameters[0];
        if(is_string($functionClass)){
            switch ($functionClass){
                case 'manao_limitchars': //выводить определенное количество символов return new Bitrix\Main\EventResult(\Bitrix\Main\EventResult::SUCCESS,"\\FunctionLimitChars");
            }
        }
    }
} //подключаем файл с классом FunctionBase, т.к. автозагрузка еще не реализована

include_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/iblock/lib/template/functions/fabric.php");

class FunctionLimitChars extends Bitrix\Iblock\Template\Functions\FunctionBase {
    public function calculate($parameters) {
        $arParams = $this->parametersToArray($parameters);
        $limit = intval(array_pop($arParams));
        $text = strip_tags(trim(implode(" ", $arParams)));
        $words = explode(" ", $text);
        if ($limit === 0){
            return $text;
        }

        $result = "";
        foreach ($words as $word){
            $word = trim($word);
            if (strlen($result) === 0){
                $result = $word;
            }elseif (strlen($result . " " . $word) >= $limit){
                break;
            }else{
                $result .= " " . $word;
            }
        }
        return $result;
    }
}

Чтобы воспользоваться данным шаблоном, нужно прописать его в виде: Купить {=take_first this.property.HEADER this.Name}. Цена {=this.catalog.price.BASE} в интернет-магазине ...

Прикрепить файл

до 50мб