В этой статье вы узнаете как из описания вырезать первый абзац и поместить его в мета тег description.
Как вырезать из описания элемента 1 абзац в Битриксе и установить его на мета тег description
Внимание! В битриксе вышло обновление (и довольно давно), которое берет на себя всю работу по настройке мета данных, таких как тайтл, кейвордс и многое другое. Это удобнее для пользователей – менеджера, контенщика и SEO-шника. Речь идет про SEO вкладку в разделах и товарах. Статья для разработчиков.
На тему мета данных было написано уже много статей. Говорить сегодня будем про тег meta description. Давайте для начала вспомним как он выглядит. Записывают его только в head страницы:
<!DOCTYPE html> <html lang="ru"> <head> <meta name="description" content="Магазин подарков в Москве, лучшие цены." /> ...
Чтобы хоть как-то повлиять на этот тег или же задавать его в зависимости от каких-то условий и переменных, нам понадобится шаблон для элемента каталога товаров.
Вам необходимо создать файл, если он еще не создан component_epilog.php. Рассмотрим вариант, когда вам известен ID элемента, а описание в этом файле вы не можете получить.
Используем CIBlockElement::GetByID и получаем необходимое для нас поле (при условии, что его нет в стандартном $arResult[‘DETAIL_TEXT’]):
<? $res = CIBlockElement::GetByID($arResult['ID']); if($ar_res = $res->GetNext()) { $DETAIL_TEXT = $ar_res['DETAIL_TEXT']; }
В нашей переменной будет текст из карточки товара, если вам нужен текст анонса, замените DETAIL_TEXT на PREVIEW_TEXT, вот так:
<? $res = CIBlockElement::GetByID($arResult['ID']); if($ar_res = $res->GetNext()) { $PREVIEW_TEXT= $ar_res['PREVIEW_TEXT']; }
После этого, разбиваем на массив, ограничив его 2-мя элементами:
$FIRST_STR = explode('.', $DETAIL_TEXT, 2);
Обратите внимание, что разделитель у нас точка. Одного предложения как правило хватает, и при грамотном контенте, оно идеально впишется в СЕО текст описания.
Теперь, убираем лишние символы кавычек и HTML теги:
$FIRST_STR_LAST = htmlspecialchars_decode(strip_tags($FIRST_STR[0])).'.'; $FIRST_STR_LAST = str_replace('«', '', $FIRST_STR_LAST); $FIRST_STR_LAST = str_replace('»', '', $FIRST_STR_LAST);
Остается лишь заменить meta тег описания:
if ($FIRST_STR_LAST != false) { $APPLICATION->SetPageProperty("description", $FIRST_STR_LAST); }
ВНИМАНИЕ: SEO параметры битрикса имеют высший приоритет, и бывают случаи, когда данный код не работает. Исправляется отключением настроек компонента каталога.
Полный код выглядит следующим образом:
<? $res = CIBlockElement::GetByID($arResult['ID']); if($ar_res = $res->GetNext()) { $DETAIL_TEXT = $ar_res['DETAIL_TEXT']; } $FIRST_STR = explode('.', $DETAIL_TEXT, 2); $FIRST_STR_LAST = htmlspecialchars_decode(strip_tags($FIRST_STR[0])).'.'; $FIRST_STR_LAST = str_replace('«', '', $FIRST_STR_LAST); $FIRST_STR_LAST = str_replace('»', '', $FIRST_STR_LAST); if ($FIRST_STR_LAST != false) { $APPLICATION->SetPageProperty("description", $FIRST_STR_LAST); }
Удачи с Битриксом, поверьте, она вам понадобится 🙂
Добрый день. Неужели нельзя определить значение данного свойства непосредственно в товаре по его ID через API?
Здравствуйте, если вы про текст, то он конечно есть в товаре. Но в данном случае хотел также показать получение по ID через апи