Задать вопрос
@sunresort

Как в Битрикс сформировать динамические мета инфоблока в разделе SEO, используя код в настройках инфоблока?

Здравствуйте.
Сайт-магазин без модуля Каталог.
В свойствах инфоблока есть числовой код PRICE_MOD, который отвечает за вывод определенного числа.
Я пытаюсь сформировать динамический мета-тэг Title с использованием данного кода.
Пробовала разные варианты:
{=this.PRICE_MOD}
{{PRICE_MOD}}
#PROPERTY_PRICE_MOD_VALUE#
#PROPERTY_PRICE_MOD.PROPERTY_VALUE#

пробовала через init.php

<?php
	AddEventHandler('main', 'OnEpilog', function() {
    global $APPLICATION;
    
    if (CModule::IncludeModule('iblock') && $_SERVER['SCRIPT_NAME'] == '/catalog/index.php') {
        $elementId = (int)$_GET['ID'];
        $element = CIBlockElement::GetByID($elementId)->GetNextElement();
        
        if ($element) {
            $props = $element->GetProperties();
            $priceMod = $props['PRICE_MOD']['VALUE'];
            
            if ($priceMod) {
                $APPLICATION->SetPageProperty('title', 
                    $element->GetFields()['NAME'] . ' — ' . $priceMod . ' руб.');
            }
        }
    }
});
?>


Не работает ни один вариант, либо вместо кода отображаются 3 точки ...

Подскажите, как правильно вывести это код в мета-тэги?
  • Вопрос задан
  • 40 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
Код какой-то ужасный. Его что, ИИ писал?
Вам надо поменять тайтл на детальной странице товара.
Значит надо найти шаблон детальной страницы товара, добавить (если нужно) туда файл component_epilog.php с таким содержимым:
<?php
use Bitrix\Main\EventManager;

/**
 * @var array $arParams
 * @var array $arResult
 */

Bitrix\Main\Loader::includeModule('iblock'); // уверен, что эта строчка не нужна, даже если сработал кэш

$priceMod = $arResult["PROPERTIES"]['PRICE_MOD']['VALUE'];
if ( $priceMod ) {
    $title = "{$arResult['NAME']} — $priceMod руб.";
    $eventManager = EventManager::getInstance();
    $eventManager->addEventHandler('main', 'OnEpilog', function() use ($title){
        global $APPLICATION;
        $APPLICATION->SetPageProperty('title', $title);
    }, false, 1000);
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы