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);
}