Свои пременные в СЕО шаблонах

Home » Bitrix » bitrix рецепты » Свои пременные в СЕО шаблонах
bitrix рецепты Комментариев нет
Ниже описан код для 2ух новых функций шаблонов:
{=path parent.Name this.Name} - конкатенцация заголовков родительской категории и открытой. Если открыта категория 1ого уровня, то родительская (имя каталога) игнорируется {=counts this.Code parent.Name this.Name} - подсчитывается кол-во товаров в категории this.Code, выводится называние parent.Name с правильным окончанием относительно кол-ва товаров (-а, -ов), затем название дочерней категории. Если открыта категория 1ого уровня, то родительская (имя каталога) игнорируется. <? require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/iblock/lib/template/functions/fabric.php'); use Bitrix\Main; $eventManager = Main\EventManager::getInstance(); $eventManager->addEventHandler("iblock", "OnTemplateGetFunctionClass", "myOnTemplateGetFunctionClass"); function myOnTemplateGetFunctionClass(Bitrix\Main\Event $event) { $arParam = $event->getParameters(); $functionClass = $arParam[0]; if (is_string($functionClass) && class_exists($functionClass) && $functionClass=='counts'){ $result = new Bitrix\Main\EventResult(1,$functionClass); return $result; } if (is_string($functionClass) && class_exists($functionClass) && $functionClass=='path'){ $result = new Bitrix\Main\EventResult(1,$functionClass); return $result; } } class counts 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(CModule::IncludeModule("iblock")){ $arResult = array(); if(!empty($parameters[1]) && !empty($parameters[2])){ $db = CIBlock::GetByID(14); $arIBlock = $db->Fetch(); if($arIBlock['NAME'] == $parameters[1]){ $parameters[1] = $parameters[2]; unset($parameters[2]); } } if(!empty($parameters[0])){ $db = CIBlockSection::GetList(array(),array('IBLOCK_ID' => 14,'CODE' => $parameters[0]),array('CNT_ACTIVE' => 'Y'), array('ID','NAME'), array('nPageSize' => 1)); $arSection = $db->Fetch(); $arResult[] = $arSection['ELEMENT_CNT']; } if(!empty($parameters[1]) && !empty($arSection)){ $i = $arSection['ELEMENT_CNT']; if(($i % 100 >= 10 && $i % 100 <= 20) || $i % 10 >= 5 || $i % 10 == 0){ $end = 'ов'; }elseif($i % 10 == 1){ $end = ''; }else{ $end = 'а'; } if(substr($parameters[1],-1) == 'ы'){ $parameters[1] = strtolower(substr($parameters[1],0,-1)); } $arResult[] = $parameters[1].$end; } if(!empty($parameters[2])){ $arResult[] = $parameters[2]; } return implode(' ',$arResult); } return ""; } } class path 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 $arParams) { // [0] parent.Name // [1] this.Name // [2] bool tolowercase if(CModule::IncludeModule("iblock")){ $arResult = ''; if(!empty($arParams[0]) && !empty($arParams[1])){ $db = CIBlock::GetByID(14); $arIBlock = $db->Fetch(); if($arIBlock['NAME'] == $arParams[0]){ $arParams[0] = $arParams[1]; unset($arParams[1]); } } if(!empty($arParams[2])){ $arParams[0] = strtolower($arParams[0]); unset($arParams[2]); } $arResult = implode(' ',$arParams); return $arResult; } return ""; } }