Ниже описан код для 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 "";
}
}
Свежие комментарии