Когда пишешь свои скрипты, и на сайте активно работают правила по формированию мета тегов, главное не забыть про кеш.
Как удалить кеш мета тегов в битриксе
Задача: текст описания участвует в формуле SEO вкладки. Но сейчас он содержит теги. Необходимо почистить от тегов текст анонса.
ВАЖНО! Перед стартом работ сохраняйте копию базы \ сайта и т.д. А еще лучше делайте на тестовом поддомене.
Наш код выглядит примерно так:
$res = CIBlockElement::GetList ( Array("ID" => "ASC"), Array("IBLOCK_ID" => $IBLOCK_ID, "ACTIVE" => "Y"), false, false, Array('ID', 'NAME', 'PREVIEW_TEXT') ); while ($arItem = $res->GetNext()) { $newTxt = ''; $newTxt = strip_tags(html_entity_decode($arItem['PREVIEW_TEXT'])); // update $el = new CIBlockElement; $arLoadProductArray = Array( "MODIFIED_BY" => $USER->GetID(), // элемент изменен текущим пользователем "PREVIEW_TEXT" => $newTxt, "PREVIEW_TEXT_TYPE" =>"html", ); echo $PRODUCT_ID = $arItem['ID']; // изменяем элемент с кодом (ID) 2 if ($ress = $el->Update($PRODUCT_ID, $arLoadProductArray, true, true)) { echo 'UPDATED '.$arItem['NAME']."
"; } else { echo "Error: ".$el->LAST_ERROR; } .....
html_entity_decode – очищает html сущности и переводит их в правильный формат
strip_tags – удаляет html и PHP теги
Заходим в элемент, и видим что там всё нормально. Открываем исходный код страницы.. и видим что там старое закешированное значение. Сброс кеша не помогает, переиндексация тоже – что делать? Помогает кнопка “Сохранить \ Применить”, но не будем же мы в каждом товаре её клацать?
Нужно дописать наш скрипт, и сбросить кеш у каждого элемента.
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); use Bitrix\Iblock\InheritedProperty; .... // clear cache $ipropValues = new InheritedProperty\ElementValues($IBLOCK_ID, $arItem['ID']); $ipropValues->clearValues();
Таким образом, мы перезаписываем текст анонса, и сбрасываем закешированное значение для SEO формул, для каждого отдельного элемента.