Работаем с seo-шаблонами в 1С-Битрикс

Работаем с seo-шаблонами в 1С-Битрикс

550
12.03.2018

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

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

В шаблоне может быть несколько вариантов данных.

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

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

{=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 контент-менеджер ввел какое-то значение - будет выведено оно, если же нет - будет выведено название товара.



Благодарю за внимание! Делитесь вашими замечаниями в комментариях ниже.


P.S. Обращайтесь ко мне за приобретением лицензий и продлений на 1C-Битрикс "Управление сайтом", лицензий на облачную и коробочную версии Битрикс 24 а также за приобретением и внедрением готовых решений на базе 1С-Битрикс от партнеров. За более подробной информацией свяжитесь со мной любым удобным для вас способом


Комментарии

Еще никто не комментировал данную публикацию. Будьте первыми!

Добавить комментарий

captcha

Возврат к списку