Как добавить новые СЕО-возможности 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
Оцените статью
Мы работаем по одному из двух форматов:
  • аренда команды (от 2 человек, не менее 3 месяцев);
  • итерации с фиксированной ценой (1-3 месяца длительностью).
ИНТЕРВОЛГА предоставляет:
  • регулярные онлайн-планерки с заказчиком;
  • квалифицированных специалистов;
  • организованную команду (находятся в одном помещении, что упрощает решение рабочих вопросов);
  • полную прозрачность и регулярность отчетов о результатах.
Ключевые услуги:
  • нагруженный интернет-магазин;
  • личный кабинет;
  • оптовые продажи — B2B-платформа;
  • маркетплейс;
  • технический аудит сайта;
  • Битрикс24 — корпоративные HR-порталы;
  • Битрикс24 — построение CRM-системы;
  • Битрикс24 — личные кабинеты сотрудников;
  • Битрикс24 — аудит портала;
  • 1С — интеграция с другими системами;
  • 1С — доработка системы;
  • маркетинг — комплексное интернет-продвижение;
  • маркетинг — продвижение для B2B.

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

«Большие» объемы данных в Битрикс: что убивает производительностьБитрикс часто критикуют из-за проблем с производительностью. Цель статьи — разобрать, какие встроенные механизмы и настройки помогают повысить отзывчивость сист...
Как B2B-платформа помогает бизнесу больше зарабатывать и меньше тратитьB2B-платформа не просто дань тренду на цифровизацию продаж. Это инструмент, который помогает экономить и увеличивать прибыль. Разбираем на примерах, как он рабо...
5 главных вопросов о B2B-платформеЕсли вы слышали о B2B-платформе, но еще ничего о ней не знаете — пришло время это исправить. В статье собрали самое важное об автоматизации оптовых продаж. ...
«Поехали!»: запускаем ракету оптовых продаж по советам тех, кто леталЗапуск B2B-платформы подобен старту ракеты: успех зависит от множества факторов. Если все пройдет гладко, продолжение полета будет управляемым и полезным. И...
Как составить функциональные требования к B2B-платформеЧеткое описание желаемого результата — одна из составляющих успешного внедрения B2B-платформы. Объясняем, как составить ТЗ для первой встречи с интегратором. ...
Как подготовиться к внедрению B2B-платформы: планирование и работа с возражениямиВо второй статье цикла об автоматизации B2B-продаж поговорим о планировании: от определения бизнес-метрик до продажи идеи команде и работы с сопротивлением. ...
Хотите получать лучшие статьи от INTERVOLGA раз в месяц?
Подпишитесь на рассылку — спамить не будем