Работаем с 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} в интернет-магазине ...