В 14 версии 1С-Битрикс появились новые возможности SEO, благодаря которым, можно создавать шаблоны для мета-тегов (подробнее здесь).
Одной из возможностей является отображение в мета-тегах цены товара. Все работает просто замечательно, за исключением одного нюанса. Если в настройках компонента каталога стоит настройка “Показывать цены в одной валюте”, то в мета-тегах цены все равно будут выводиться в той валюте, в которой они хранятся в каталоге. Т.е. фактически цена на странице товара будет отличаться от цены в мета-тегах, что может плохо отразиться на СЕО продвижении сайта.
По мнению СЕО специалистов возможны 3 варианта:
не выводить цены в мета-тегах вообще;
в шаблоне карточки товара нужно вывести дополнительно цену в валюте, которая будет соответствовать цене в мета-тегах;
цены в мета-тегах и странице должны полностью совпадать
Мне при разработке интернет-магазина необходим был именно 3 вариант.
Сделаем дорабтку.
Нам необходимо сделать 3 вещи:
Написать свой шаблон во вкладке SEO для вывода нашей цены. Например {component.price}
Доработать шаблон компонента catalog.element
Шаблон для цены в мета-тегах
Шаблон можно задавать в 3-х местах: настройках инфоблока, редактировании раздела инфоблока и редактировании самого элемента. У всех троих есть вкладка SEO, где это все и настраивается. Я задал шаблон для всего инфоблока.
Для нашей цены я указал шаблон {component.price} как писал выше. Далее перейдем к доработке шаблона компонента.
Доработка шаблона компонента catalog.element
В файл result_modifier.php просто добавляем код:
foreach($arResult["IPROPERTY_VALUES"] as $key => $value)
$arResult["IPROPERTY_VALUES"][$key] = str_replace("{component.price}", $arResult["PRICES"]["BASE"]["PRINT_VALUE"], $arResult["IPROPERTY_VALUES"][$key]);
В результате строка {component.price} заменяется на необходимую цену из карточки товара.
З.Ы.
Если нужно более гибкое формирование мета-тегов, можете почитать об этом здесь.
Не нахожу. В случае каталожных компонент (catalog.*) после вызова шаблона (result_modifier.php - template.php - component.php) в случае отсутствия кеша либо выполнения component_epilog.php шаблона идет достаточно большой кусок кода component.php, который и выставляет мета-теги, заголовок страницы, кнопки Эрмитажа, etc.
Жуков Евгений, то есть каталожные компоненты сделаны в обход схемы? Но ведь можно в параметрах указать SET_TITLE=N и component_epilog установить нужный заголовок? У меня (теперь почему-то) такая схема всегда работала даже без SET_TITLE=N.
Жуков Евгений, выше я картинку из документации прикрепил, по ней, после подключения шаблона component.php уже не исполняется.
Понятно, что физически код написать можно и работать он будет. Но это получается уже не по фен-шую, т.к. уже отходит от схемы выполнения компонента. Код catalog.element почитал - интересно, теперь не понимаю как у меня SetTitle в component_epilog работал до этого Значит надо все-таки ставить SET_TITLE=N, тогда component.php не установит заголовок самостоятельно.
Постоев Олег, Надо не парится и использовать уже class.php, которые так обещали миллион лет назад, где можно 1) отнаследоваться нормально, 2) Наконец написать методы в которых можно писать код "до кода", "до кэша", "после кэша", "перед сео", "во время сео", "после сео", "после всего кода" и т.д.....
Жуков Евгений, И я согласен с Олегом, по сути в схеме код компонента заказнчивается на подключении шаблона - но это не так. и с каждым новым релизом - всё дальше от этой схемы. Предлагаю её пересмотреть, так как код компонента продолжает выполнятся после кода шаблона - а на схеме обозначено иное
Постоев Олег написал: Сумин Алексей, прямо в component_epilog.php и можно сделать setTitle с замененным макросом
спасибо, буду исправляться. Почему то сразу это в голову не пришло.
Микулич Евгений написал: Я думал что есть функции расширяющие сео, а не событие которое на вывод буфреа используется. Ну то есть как думал - пользовался.
вы наверное говорите о том же о чем и Олег?
Жуков Евгений написал: Почему не сделать это на этапе result_modifier.php, закешировав данные?
И все таки, как этого можно добиться именно в result_modifier.php? Ссылка на учебный курс не помогла)
Сумин Алексей написал: И все таки, как этого можно добиться именно в result_modifier.php
К сожалению, я дал ссылку на снятый курс. Вот дубликат. Основная идея - заменить ключ ["IPROPERTY_VALUES"]["ELEMENT_PAGE_TITLE"] и ["IPROPERTY_VALUES"]["ELEMENT_META_TITLE"] в кеше. Либо воспользоваться идеей Андрея Загальского - это значительно лучше.
Микулич Евгений написал: Постоев Олег, Надо не парится и использовать уже class.php, которые так обещали миллион лет назад, где можно 1) отнаследоваться нормально, 2) Наконец написать методы в которых можно писать код "до кода", "до кэша", "после кэша", "перед сео", "во время сео", "после сео", "после всего кода" и т.д.....
Спасибо за подсказку, но, честно говоря, не понимаю, как его можно применить к существующему стандартному компоненту catalog.element. Буду рад, если просветите или хотя бы за линк на материал
Микулич Евгений написал: Постоев Олег, Надо не парится и использовать уже class.php, которые так обещали миллион лет назад, где можно 1) отнаследоваться нормально, 2) Наконец написать методы в которых можно писать код "до кода", "до кэша", "после кэша", "перед сео", "во время сео", "после сео", "после всего кода" и т.д.....
Спасибо за подсказку, но, честно говоря, не понимаю, как его можно применить к существующему стандартному компоненту catalog.element. Буду рад, если просветите или хотя бы за линк на материал
Жуков Евгений написал: Основная идея - заменить ключ ["IPROPERTY_VALUES"]["ELEMENT_PAGE_TITLE"] и ["IPROPERTY_VALUES"]["ELEMENT_META_TITLE"] в кеше. Либо воспользоваться идеей Андрея Загальского - это значительно лучше.
Спасибо! На мой взгляд ваша идея для решения данной задачи вполне самодостаточна, главное проста.
С 17 версии пример не работает? Модификация result_modifier.php меняет код в теле страницы, но в метатегах замены не происходит. Если использовать component_epilog.php, то ситуация аналогичная.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».