@adap

Как сделать SEO данные для умного фильтра?

Есть умный фильтр и статичные страницы от него, нужно задать им уникальные мета теги и текст.
Видел уже множество вопросов по этой теме, но решения что-то не нашел.
Ближайшее изложено тут https://it-svalka.ru/razrabotka/tonkaya-nastroyka-... (и несколько копипастов находил). Хотя изложение тут не очень для "нубов", например не показан пример присвоение константы инфоблока в файле /bitrix/php_interface/init.php (но с этим вроде разобрался), нет примера кода элементов при создании инфоблоков (тоже вроде сделано) и самое важное, на чем застрял, куда и как вставить предлагаемый код в section.php, что бы он работал.
Как не пробовал или ломается каталог или игнорируется. Элемент инфоблока конечно уже задан для проверки.
  • Вопрос задан
  • 1369 просмотров
Решения вопроса 1
@adap Автор вопроса
Итак решение, за которое заплатил деньги (хорошо, что не большие) и которое работает:
$currentPageUrl = $APPLICATION->GetCurPage(false);
$currentPageSeo = array();
$arSelect = Array("ID", "PROPERTY_TITLE", "PROPERTY_META_KEYWORDS", "PROPERTY_META_DESCRIPTION", "PROPERTY_HEADER", "PROPERTY_SEO_TEXT");
$arFilter = Array("IBLOCK_ID"=>IBLOCK_SEO, "PROPERTY_PAGE_URL"=>$currentPageUrl);
$res = CIBlockElement::GetList(Array(), $arFilter, false, ["nTopCount" => 1], $arSelect);
if ($arItem = $res->GetNext()){
    $currentPageSeo = array(
            "TITLE" => $arItem["PROPERTY_TITLE_VALUE"],
            "KEYWORDS" => $arItem["PROPERTY_META_KEYWORDS_VALUE"],
            "DESCRIPTION" => $arItem["PROPERTY_META_DESCRIPTION_VALUE"],
            "HEADER" => $arItem["PROPERTY_HEADER_VALUE"],
            "SEO_TEXT" => $arItem["PROPERTY_SEO_TEXT_VALUE"]["TEXT"],
        );
}


Изменений буквально чуть-чуть. Обязательно размещать код в активном шаблоне, у меня он там и размещался - мог иногда сломать вывод каталога. Надеюсь код будет полезен, а сам позже попробую на своем сайте добавить про это статью, в надежде перебить в выдаче множество платных решений на этот счёт.

Будет странно отмечать свой же ответ, ответом на вопрос, но это работает.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@vcherepko
В init.php
define( 'IBLOCK_SEO', 'ID_Вашего созданного инфоблока' ); //лобо просто в $arFilter
В section.php в конце
$currentPageUrl = str_replace(' ','%20',$APPLICATION->GetCurPage(false)); //мне пришлось экранировать пробелы
	$currentPageSeo = array();
	$arSelect = Array("ID", "PROPERTY_SEO_TITLE", "PROPERTY_SEO_KEYWORDS", "PROPERTY_SEO_DESCRIPTION");
	$arFilter = Array("IBLOCK_ID"=>IBLOCK_SEO, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y", "PROPERTY_SEO_URL"=>$currentPageUrl);
	$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
	while($ob = $res->GetNextElement()){
	    $arFields = $ob->GetFields();
	    $currentPageSeo = array(
        "TITLE" => $arFields["PROPERTY_SEO_TITLE_VALUE"],
        "KEYWORDS" => $arFields["PROPERTY_SEO_KEYWORDS_VALUE"],
        "DESCRIPTION" => $arFields["PROPERTY_SEO_DESCRIPTION_VALUE"]
    	);
	};

//Устанавливаем полученные параметры
	if($currentPageSeo["TITLE"]){
	    $APPLICATION->SetPageProperty("title", $currentPageSeo["TITLE"]);
	}
	if($currentPageSeo["KEYWORDS"]){
	    $APPLICATION->SetPageProperty("keywords", $currentPageSeo["KEYWORDS"]);
	}
	if($currentPageSeo["DESCRIPTION"]){
	    $APPLICATION->SetPageProperty("description", strip_tags($cnt." ".$currentPageSeo["DESCRIPTION"]));
	};
Ответ написан
Ваш ответ на вопрос

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

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