Появилась необходимость делать проверку на "заполненность свойства" и более гибко формировать мета теги.
Если кому пригодится, ниже код обработчика
[spoiler]
пример шаблона
=iffilled - название функции для обработки последующих данных
this.property.SOURCE - наше свойство которое проверяем на пустоту
"Cсылка %s" - шаблон подстановки если свойство заполнено
UPDATE, на текущий момент в проектах использую:
пример шаблона:
3-м параметром можно передать условие равенства...
Идея -
Если кому пригодится, ниже код обработчика
[spoiler]
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=='iffilled'){
$result = new Bitrix\Main\EventResult(1,$functionClass);
return $result;
}
}
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 "";
}
}
|
{=iffilled this.property.SOURCE "Cсылка %s"} - {=this.Name}
|
=iffilled - название функции для обработки последующих данных
this.property.SOURCE - наше свойство которое проверяем на пустоту
"Cсылка %s" - шаблон подстановки если свойство заполнено
UPDATE, на текущий момент в проектах использую:
public function calculate(array $parameters)
{
if(isset($parameters[0]) && $parameters[0] && isset($parameters[1]) && isset($parameters[2])) {
if(substr($parameters[2],0,1)=="!") {
$parameters[2] = substr($parameters[2],1,1000);
if($parameters[2]==$parameters[0]) return "";
}else{
if($parameters[2]!=$parameters[0]) return "";
}
return sprintf($parameters[1],$parameters[0]);
}
elseif(isset($parameters[0]) && $parameters[0] && isset($parameters[1])) {
return sprintf($parameters[1],$parameters[0]);
}
return "";
}
|
{=iffilled parent.Name "Ламинат %s," "!Ламинат"} {=iffilled parent.Name "%s" "Ламинат"} {=this.Name} купить в гомельской области, Гомель, Мозырь |
Идея -