Уже достаточно давно, еще с 14-й версии модуля "Информационные блоки" в 1С-Битрикс появилась возможность задавать шаблоны автоматической генерации мета-данных. Но не все до сих пор умеют пользоваться данным инструментом. В данном посте собраны основные моменты по созданию шаблонов мета-данных.
Механизм автоматических шаблонов мета-данных позволяет задать description, title,keywords для элементов и разделов, а также для элементов доступны шаблоны для установки alt, title и шаблона имени файла детального и анонсового изображений.
В шаблоне может быть несколько вариантов данных.
Во-первых, это, конечно-же, может быть любой произвольный текст. Этот текст будет выведен автоматически у заданного объекта (и всех потомков, если это раздел, так что не забывайте у потомков написать свой уникальный текст).
В системе создан набор специальных конструкций, прописанных в фигурных скобках и работающих по принципу отложенных функций. Указывается такая конструкция достаточно просто, например, чтобы вывести название текущего объекта, нужно задать конструкцию вида:
{=this.Name}
Вот список зарезервированных слов:
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 ", "}
- склады, перечисленные через запятую
Набор готовых конструкций достаточно большой и решает большую часть задач описания мета-данных. Дополнением к данным конструкциям служат предопределенные функции:
lower
- приведет значение к нижнему регистру. Пример:{=lower this.Name}
;upper
- приведет значение к верхнему регистру. Пример:{=upper this.Name}
;limit
- ограничить элементы по разделителю. Пример:{=limit {=this.PreviewText} "." 2}
- оставит текст до 2 точки, начиная с начала;concat
- задаётся разделитель и несколько строк объединяются через разделитель. Пример:{=concat this.sections.name " / "}
- все названия родительских разделов будут соединены с помощью слэша;min
- находит минимальный элемент. Пример:{=min this.catalog.sku.price.BASE}
;max
- находит максимальный элемент. Пример:{=max this.catalog.sku.price.BASE}
;distinct
- оставит только значения без повторения(уникальные).;translit
- транслитерация значения. Пример:{=translit this.Name}
;
Конечно же список функций можно расширять до бесконечности. Для этого, нужно воспользоваться обработчиком события OnTemplateGetFunctionClass
модуля "Информационные блоки".
В качестве примера рассмотрим создание функции, выводящей значение свойства только тогда, когда свойство заполнено. В init.php создаем обработчик события:
if (\Bitrix\Main\Loader::includeModule('iblock')) { \Bitrix\Main\EventManager::getInstance()->addEventHandler( "iblock", "OnTemplateGetFunctionClass", "seoTemplatesHandler" ); function seoTemplatesHandler(Bitrix\Main\Event $event) { $arParam = $event->getParameters(); $functionClass = $arParam[0]; if(is_string($functionClass) && class_exists($functionClass)){ switch ($functionClass){ case 'iffilled': // вывод свойства только если оно заполнено $result = new Bitrix\Main\EventResult(1,$functionClass); break; case 'take_first': // вывод первого из заполненных значений $result = new Bitrix\Main\EventResult(1,$functionClass); } } return $result; } //подключаем файл с определением класса FunctionBase //это пока требуется т.к. класс не описан в правилах автозагрузки include_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/iblock/lib/template/functions/fabric.php"); class iffilled extends \Bitrix\Iblock\Template\Functions\FunctionBase { public function onPrepareParameters(\Bitrix\Iblock\Template\Entity\Base $entity, $parameters) { $arguments = array(); /** @var \Bitrix\Iblock\Template\NodeBase $parameter */ foreach ($parameters as $parameter) { $arguments[] = $parameter->process($entity); } return $arguments; } public function calculate(array $parameters) { if(isset($parameters[0]) && $parameters[0] && isset($parameters[1])) { return sprintf($parameters[1],$parameters[0]); } return ""; } } class take_first extends \Bitrix\Iblock\Template\Functions\FunctionBase { public function calculate($parameters) { $arParams = $this->parametersToArray($parameters); return $arParams[0]; } } }
Чтобы воспользоваться данным шаблоном, нужно прописать данный шаблон в виде:
{=iffilled this.property.CML_ARTICLE "Артикул: %s"} - {=this.Name}
Update 2018-04-16
Добавил для примера класс, позволяющий вывести одно из значений - будет выведено первое непустое значение. Чтобы воспользоваться данным шаблоном, нужно указать:
Купить {=take_first this.property.HEADER this.Name}. Цена {=this.catalog.price.BASE} в интернет-магазине ...
В результате, если в свойстве HEADER контент-менеджер ввел какое-то значение - будет выведено оно, если же нет - будет выведено название товара.
Разработка сайта
Подайте заявку на разработку сайта на базе готового решения от компании 1С-Битрикс или одного из партнеров компании. Максимально подробно опишите, чему будет посвящен сайт, если это интернет-магазин - что он будет продавать, нужна ли мультиязычность, будут ли разные типы цен (розница, опт, крупный опт), будет ли интеграция с 1С, будет ли выгрузка товаров на различные торговые площадки...
Сопровождение сайта
Вы можете подать заявку на сопровождение вашего сайта на базе 1С-Битрикс. Сопровождение включает в себя: проверка актуальности обновлений сайта, проверка актуальности резервной копии, консультации по сайту. Опишите в заявке, какие еще объемы планируются на сопровождении и на какой срок вы планируете заключить договор на сопровождение - мы подберем подходящий вам бюджет на сопровождение
Работы по сайту
Вы можете подать заявку на выполнение определенного объема работ по сайту. Опишите в заявке объем работ. Это может быть разработка какого-то нового функционала, доработки по имеющемуся функционалу, доработки под требования сео-специалистов. На основании заявки вам будет сформирован бюджет работ, а также названы сроки на выполнение тех или иных работ.