Как добавить новые СЕО-возможности 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
Понравилась статья?
Поделитесь ссылкой с друзьями и коллегами!

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

Биллинг ИТ-компании на laravelОбычно мы рассказываем, как принесли пользу клиенту. Но сегодня у нас будет особый разговор, ведь заказчиком биллинговой системы ИТ-компании была… ИНТЕРВОЛГА! ...
Почему мы рекомендуем начинать с внедрения базовой версии b2b-платформыК нам в компанию ИНТЕРВОЛГА часто обращаются клиенты с заявками на внедрение личного кабинета дилера с длинным списком желаемых функций. Однако мы рекомендуем н...
Функция b2b-платформы — отправка рекламаций в CRMОптовые покупатели — ключевой сегмент экономики торгово-производственного предприятия, и их удовлетворённость напрямую влияет на успех бизнеса. Новый функционал...
Как b2b-платформа передает в 1С данные по новым контрагентам В этой статье мы расскажем, что происходит после того, как клиент зарегистрировал в б2б-кабинете новое юридическое лицо и сделал заказ, а также покажем, как...
Автоматизация и оптимизация бизнес-процессов — лонгрид, чтобы не запутаться Статья будет полезна всем, кто хочет улучшить эффективность своего бизнеса или узнать больше о возможностях автоматизации бизнес-процессов для повышения ко...
10 обязательных задач поддержки сайта на БитриксСтатья посвящена организации поддержки сайтов на Битрикс. Здесь не только про решение технических проблем и устранение багов. Здесь про развитие живых проектов...
Мы работаем по одному из двух форматов:
  • аренда команды (от 2 человек, не менее 3 месяцев);
  • итерации с фиксированной ценой (1-3 месяца длительностью).
ИНТЕРВОЛГА предоставляет:
  • регулярные онлайн-планерки с заказчиком;
  • квалифицированных специалистов;
  • организованную команду (находятся в одном помещении, что упрощает решение рабочих вопросов);
  • полную прозрачность и регулярность отчетов о результатах.
Ключевые услуги:
  • нагруженный интернет-магазин;
  • личный кабинет;
  • оптовые продажи — B2B-платформа;
  • маркетплейс;
  • технический аудит сайта;
  • Битрикс24 — корпоративные HR-порталы;
  • Битрикс24 — построение CRM-системы;
  • Битрикс24 — личные кабинеты сотрудников;
  • Битрикс24 — аудит портала;
  • 1С — интеграция с другими системами;
  • 1С — доработка системы;
  • маркетинг — комплексное интернет-продвижение;
  • маркетинг — продвижение для B2B.
Хотите получать лучшие статьи от INTERVOLGA раз в месяц?
Подпишитесь на рассылку — спамить не будем