Битрикс — meta-теги для умного фильтра

Meta-информация с помощью highload инфоблоков

Создать highload инфоблок

  • UF_URL — для занесения url результата фильтрации в ЧПУ;
  • UF_TITLE- для title;
  • UF_DESCRIPTION — для description;
  • UF_KEYWORDS — для keywords;
  • UF_H1 — для H1.

Данные поля кастомные, поэтому добавлять можно сколько угодно. Например, если есть необходимость формировать уникальный текст для отфильтрованной страницы.

Чтобы все это заработало необходимо в файле component_epilog в шаблоне компонента catalog.section прописать следующее:

// Получаем HighloadBlock
$arHLBlock = HighloadBlockTable::getList(array('filter' => array('TABLE_NAME' => $strIblockData)))->fetch(); // инициализируем класс сущности хайлоуд блока
$obEntity = HighloadBlockTable::compileEntity($arHLBlock); // обращаемся к DataManager
$strEntityDataClass = $obEntity->getDataClass();
$arQuery = array(); // Фильтруем по  URL
$arQuery['filter'] = array('=UF_URL' => trim($APPLICATION->GetCurPage(false))); $dbData = $strEntityDataClass::getList($arQuery);$arMeta = $dbData->fetch();// Заполняем метаданные страницы
$APPLICATION->SetPageProperty('title', $arMeta['UF_TITLE']);$APPLICATION->SetPageProperty(description, $arMeta['UF_DESCRIPTION']); $APPLICATION->SetPageProperty(keywords, $arMeta['UF_KEYWORDS']);$arResult[‘H1’] = $arMeta['H1'];

В разделе, в его шаблоне, задать поля для H1 и текста.

Мета-теги информация из свойств фильтра

В catalog.smart.filter в result_modifier.php, добавляем ключ FILTER_VALUE

$this->__component->SetResultCacheKeys(array("FILTER_VALUE"));

В catalog.smart.filter файле template.php или catalog.smart.filter файле result_modifier.php (проходимся циклом по $arResult[«ITEMS»]) — формируем масив, из которого в дальнейшем будем составлять метатеги.

Если необходимо добавить стоимость из фильтра, требуется сделать проверку

foreach($arResult["ITEMS"] as $key=>$arItem) {
    // Устоимости другая структура масива
    if(isset($arItem["PRICE"])) {
        $filter_value[$arItem["CODE"]]["NAME"] = "цена";
        $filter_value[$arItem["CODE"]]["MIN"] = $arItem["VALUES"]["MIN"]["HTML_VALUE"];
        $filter_value[$arItem["CODE"]]["MAX"] = $arItem["VALUES"]["MAX"]["HTML_VALUE"];
    } else {
        // Проверьте свой массив свойст, структура может отличаться в зависимости от типа свойств
        foreach($arItem["VALUES"] as $val => $ar){
            if($ar["CHECKED"]){
                $filter_value[$arItem["CODE"]]["NAME"] = $arItem["NAME"];
                $filter_value[$arItem["CODE"]]["VALUE"][$ar["FACET_VALUE"]] = $ar["VALUE"];
            }
        }
    }
}

После цикла, проверяем на наличие переменной $filter_value и добавляем ее в $arResult

//если фильтр не пустой, передаем данные в $arResult["FILTERLT_VALUES"]
if(!empty($filter_value)){
    $this->__component->arResult["FILTER_VALUE"] = $filter_value;
}

В component_epilog.php формируем метаданные:

$titleCategory = "";
$h1Category = "";
$descriptionCategory = "";
if (!empty($arResult["FILTER_VALUE"])) {
    foreach ($arResult["FILTER_VALUE"] as $key => $arProp) {
        if ($key !== "price") {
            $titleCategory .= $arProp["NAME"] " - " . mb_strtolower(implode(", ", $arProp["VALUE"])) . "; ";
            $h1Category .= ""; // Необходимые данные
            $descriptionCategory .= ""; // Необходимые данные
        } else {
            $minPrice = (!empty($arProp["MIN"])) ? "от " . $arProp["MIN"] : "";
            $maxPrice = (!empty($arProp["MAX"])) ? " до " . $arProp["MAX"] : "";
            if ($arProp["MIN"] || $arProp["MAX"]) {
                $titleCategory .= " стоимостью " . $minPrice . $maxPrice . " руб. "
                $h1Category .= ""; // Необходимые данные
                $descriptionCategory .= ""; // Необходимые данные
            }
        }
    }
}

// Записываем переменые в  свойства
$APPLICATION->SetPageProperty("filter_seo_title", $titleCategory);
$APPLICATION->SetPageProperty("filter_seo_h1", $h1Category);
$APPLICATION->SetPageProperty("filter_seo_description", $descriptionCategory);

В шаблоне компонента catalog в файле sections.php, добавляем проверку и перезаписываем метатеги страницы.

// Если используется доп. свойство для h1
if ($h1 = $APPLICATION->GetPageProperty("filter_seo_h1")) {
    $APPLICATION->SetPageProperty("h1", $h1);

}

if ($title = $APPLICATION->GetPageProperty("filter_seo_title")) {
    $APPLICATION->SetPageProperty("title", $title);

}

if ($descr = $APPLICATION->GetPageProperty("flt_seo_description")) {
    $APPLICATION->SetPageProperty("filter_seo_description", $descr);
}

Оцените статью
Разработчик на bitrix и wordpress