Как добавить новые СЕО-возможности 14-й версии 1С-Битрикс в кастомизированные компоненты

Алексей Шкарупа
Сразу скажу: восстановить работоспособность этих новых фишек - можно. Это не слишком сложно, но потребует знаний которые есть только у программистов (рядовому пользователю это не по силам).

Для примера возьмем 2 компонента которые были кастомизированы почти 2 года назад: список секций (catalog.section) и детальная страница элемента каталога (catalog.element). В обоих случаях нужно внести изменения в component.php

catalog.section

1. Нужно добавить следующий код перед строчкой $arResult["PICTURE"] = CFile::GetFileArray($arResult["PICTURE"]);
$ipropValues = new \Bitrix\Iblock\InheritedProperty\SectionValues($arResult["IBLOCK_ID"], $arResult["ID"]);
$arResult["IPROPERTY_VALUES"] = $ipropValues->getValues();

2. Добавить новый ключ в кеш
$this->SetResultCacheKeys(array(
//...
"IPROPERTY_VALUES",
));

3. Заменить все что между заменить все что между  (включая указанные строки) $this->SetTemplateCachedData($arResult["NAV_CACHED_DATA"]); и if($arParams["ADD_SECTIONS_CHAIN"] && isset($arResult["PATH"]) && is_array($arResult["PATH"])) на новый код:
if($arParams["SET_TITLE"])
{
if ($arResult["IPROPERTY_VALUES"]["SECTION_PAGE_TITLE"] != "")
$APPLICATION->SetTitle($arResult["IPROPERTY_VALUES"]["SECTION_PAGE_TITLE"], $arTitleOptions);
elseif(isset($arResult["NAME"]))
$APPLICATION->SetTitle($arResult["NAME"], $arTitleOptions);
}

$browserTitle = \Bitrix\Main\Type\Collection::firstNotEmpty(
$arResult["PROPERTIES"], array($arParams["BROWSER_TITLE"], "VALUE")
,$arResult["IPROPERTY_VALUES"], "SECTION_META_TITLE"
);
if (is_array($browserTitle))
$APPLICATION->SetPageProperty("title", implode(" ", $browserTitle), $arTitleOptions);
elseif ($browserTitle != "")
$APPLICATION->SetPageProperty("title", $browserTitle, $arTitleOptions);

$metaKeywords = \Bitrix\Main\Type\Collection::firstNotEmpty(
$arResult["PROPERTIES"], array($arParams["META_KEYWORDS"], "VALUE")
,$arResult["IPROPERTY_VALUES"], "SECTION_META_KEYWORDS"
);
if (is_array($metaKeywords))
$APPLICATION->SetPageProperty("keywords", implode(" ", $metaKeywords), $arTitleOptions);
elseif ($metaKeywords != "")
$APPLICATION->SetPageProperty("keywords", $metaKeywords, $arTitleOptions);

$metaDescription = \Bitrix\Main\Type\Collection::firstNotEmpty(
$arResult["PROPERTIES"], array($arParams["META_DESCRIPTION"], "VALUE")
,$arResult["IPROPERTY_VALUES"], "SECTION_META_DESCRIPTION"
);
if (is_array($metaDescription))
$APPLICATION->SetPageProperty("description", implode(" ", $metaDescription), $arTitleOptions);
elseif ($metaDescription != "")
$APPLICATION->SetPageProperty("description", $metaDescription, $arTitleOptions);

catalog.element

1. Сразу после $arResult["CAT_PRICES"] = $arResultPrices; вставить
$ipropValues = new \Bitrix\Iblock\InheritedProperty\ElementValues($arResult["IBLOCK_ID"], $arResult["ID"]);
$arResult["IPROPERTY_VALUES"] = $ipropValues->getValues();

2. Добавить новый ключ в кеш
$this->SetResultCacheKeys(array(
//...
"IPROPERTY_VALUES",
));

3. Заменить все что между заменить все что между (включая указанные строки) if($arParams["SET_TITLE"]) и if($arParams["ADD_SECTIONS_CHAIN"] && is_array($arResult["SECTION"])) на новый код:
if($arParams["SET_TITLE"])
{
    if ($arResult["IPROPERTY_VALUES"]["ELEMENT_PAGE_TITLE"] != "")
        $APPLICATION->SetTitle($arResult["IPROPERTY_VALUES"]["ELEMENT_PAGE_TITLE"], $arTitleOptions);
    else
        $APPLICATION->SetTitle($arResult["NAME"], $arTitleOptions);
}

$browserTitle = \Bitrix\Main\Type\Collection::firstNotEmpty(
    $arResult["PROPERTIES"], array($arParams["BROWSER_TITLE"], "VALUE")
    ,$arResult, $arParams["BROWSER_TITLE"]
    ,$arResult["IPROPERTY_VALUES"], "ELEMENT_META_TITLE"
);
if (is_array($browserTitle))
    $APPLICATION->SetPageProperty("title", implode(" ", $browserTitle), $arTitleOptions);
elseif ($browserTitle != "")
    $APPLICATION->SetPageProperty("title", $browserTitle, $arTitleOptions);

$metaKeywords = \Bitrix\Main\Type\Collection::firstNotEmpty(
    $arResult["PROPERTIES"], array($arParams["META_KEYWORDS"], "VALUE")
    ,$arResult["IPROPERTY_VALUES"], "ELEMENT_META_KEYWORDS"
);
if (is_array($metaKeywords))
    $APPLICATION->SetPageProperty("keywords", implode(" ", $metaKeywords), $arTitleOptions);
elseif ($metaKeywords != "")
    $APPLICATION->SetPageProperty("keywords", $metaKeywords, $arTitleOptions);

$metaDescription = \Bitrix\Main\Type\Collection::firstNotEmpty(
    $arResult["PROPERTIES"], array($arParams["META_DESCRIPTION"], "VALUE")
    ,$arResult["IPROPERTY_VALUES"], "ELEMENT_META_DESCRIPTION"
);
if (is_array($metaDescription))
    $APPLICATION->SetPageProperty("description", implode(" ", $metaDescription), $arTitleOptions);
elseif ($metaDescription != "")
    $APPLICATION->SetPageProperty("description", $metaDescription, $arTitleOptions);



Финализация

После того как все изменения внесены, нужно сделать еще 2 шага:
  1. Сбросить кеш всего сайта (Настройки - Настройки продукта - Автокеширование - ...)
  2. Очистить кеш вычисленных значений для инфоблока, который вы настраиваете (Контент - Типы информ. блоков - <нужный инфоблок> - Закладка "SEO" - флажок "Очистить кеш вычисленных значений" в самом низу).

И напоследок

Для других компонентов рекомендую использовать что-то вроде WinMerge для выявления того кода, который нужно добавить.
Как можно заметить - все вышеописанное завязано но новый тип наследуемых свойств и все в вышеприведенных изменениях завязано на ключ IPROPERTY_VALUES в массиве $arResult. Ориентируйтесь на этот ключ как на маяк, говорящий "Перенеси этот код в старый компонент".

Оцените статью
09.12.2013
Понравилась статья?
Поделитесь ссылкой с друзьями и коллегами!

Статьи по теме

07.03.2023
Дорожная карта внедрения платформы автоматизации оптовых продаж Про построение эффективных отделов продаж написано много крутых статей. Одни эксперты готовы сделать это за 10 шагов, другие предлагают многоэтапную эволюц...
16.02.2023
Как начать B2B-продажи онлайн - особенности и методы оптовой торговли После пандемии рынок e-commerce начал стремительно расти. Мы говорим не только о B2C, но и о B2B-сегменте. Многие крупные компании уже разглядели потенциал...
10.01.2023
Как битриксоиды в React уходили Приятно познакомиться, мы битриксоиды. Да-да, те самые которые: вообще не модные, пишут НЕ на Laravel и Symfony, ...
10.01.2023
Товарная дистрибуция 30 лет спустя. Как программисты изменили продажи крупного бизнеса «Я думал, что буду строить банк, а на самом деле построил ИТ-компанию» Олег Тиньков, безработный Есть такая штука — товарная дистри...
10.01.2023
Как мы решили выпускать собственный продукт через CustDev и у нас получилось Собственный продукт как фиксация компетенции&nbsp; В развитии крупных компаний-аутсорсеров наступает момент, когда они уже обросли опытом и компетенциями ...
19.12.2022
Учимся настраивать свою почту, не наступая на чужие грабли: Postfix + msmtp + сайт Привет, меня зовут Никита, я backend-разработчик в компании ИНТЕРВОЛГА. Работаю в компании уже 3 года, и за этот срок достаточно часто мне приходилось вози...

Мы работаем по одному из двух форматов:

  • аренда команды (от 2 человек, не менее 3 месяцев);
  • итерации с фиксированной ценой (1-3 месяца длительностью).

ИНТЕРВОЛГА предоставляет:

  • регулярные онлайн-планерки с заказчиком;
  • квалифицированных специалистов;
  • организованную команду (находятся в одном помещении, что упрощает решение рабочих вопросов);
  • полную прозрачность и регулярность отчетов о результатах.

Для доработок и развития мы предлагаем формат 100 часов в месяц. Что можно сделать за это время:

  • новые нетиповые страницы или раздел;
  • 2 отчета с индивидуальными настройками;
  • 3-5 веб-сервисов интеграции;
  • замудренный калькулятор и т.п.

Поддержка «чтобы все работало как часы» стоит 45 тысяч рублей в месяц и описана тут.

Хочешь получать лучшие статьи от INTERVOLGA раз в месяц?
Подпишись на рассылку — спамить не будем