Как добавить новые СЕО-возможности 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-продаж поговорим о планировании: от определения бизнес-метрик до продажи идеи команде и работы с сопротивлением. ...
Зачем оптовику и производителю нужна B2B-платформаB2B-платформа — тренд десятилетия. Рассказываем, зачем крупные компании создают их, что они им дают и как понять, что пора внедрять личный кабинет клиента у себ...
Масштабирование продаж в B2B: увеличиваем средний чекПродолжаем тему масштабирования в B2B-продажах. Говорим об инструментах, помогающих менеджерам увеличить средний чек в сделке и средствах автоматизации их работ...
Масштабирование продаж в B2B: увеличиваем конверсию вдвоеСтатья по итогам вебинара, посвященного опыту масштабирования в B2B-продажах. Рассматриваем вопрос увеличения конверсии на каждом этапе воронки продаж, показыва...
Автоматизация пропускного режима в промышленном холдинге: 3 часа от заявки до результатаОформление пропусков на предприятие — задача не менее ответственная, чем выплавка стали. Расскажем, как превратить бумажную бюрократию в управляемый процесс. ...
Миграция с MySQL на PostgreSQL в Битрикс24Выбираете между MySQL и PostgreSQL для своего проекта на Битрикс? Подготовили аргументы, которые помогут большим и маленьким компаниям сделать правильный выбор...
Хотите получать лучшие статьи от INTERVOLGA раз в месяц?
Подпишитесь на рассылку — спамить не будем