Уже достаточно давно, еще с 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С-Битрикс. Сопровождение включает в себя: проверка актуальности обновлений сайта, проверка актуальности резервной копии, консультации по сайту. Опишите в заявке, какие еще объемы планируются на сопровождении и на какой срок вы планируете заключить договор на сопровождение - мы подберем подходящий вам бюджет на сопровождение
Вы можете подать заявку на выполнение определенного объема работ по сайту. Опишите в заявке объем работ. Это может быть разработка какого-то нового функционала, доработки по имеющемуся функционалу, доработки под требования сео-специалистов. На основании заявки вам будет сформирован бюджет работ, а также названы сроки на выполнение тех или иных работ.