Нужен аналог функции strip_tags для сео-модуля

Рейтинг: 15.4290  
На голосовании
Предложил Пользователь 203730 27.03.2014 12:35:31

Нужен аналог функции strip_tags для сео-модуля

Часто бывает удобно добавлять через новые сео-возможности битрикса анонсное описание элементов в description/keywords

Однако анонсное описание почти всегда набрано в режиме HTML.

В результате получаются валидные, но не красивые описания - с отображением тегов

Очень нужна функция с поведением strip_tags для ее использования при формировании метасвойств!

Рейтинг: 1  
Пользователь 107705 28.03.2014 12:35:39
Согласен, актуальный вопрос! И заодно хорошо бы добавить возможность настраивать фильтр limit таким образом, чтобы он ограничивал количество выводимых символов, к примеру так:

{=limit {=striptags this.DetailText} "*text*" 150}    

Где *text* - служебный код, поясняющий, что нужно ограничить весь текст длиной 150 символов.
Рейтинг: 1  
Пользователь 203730 28.03.2014 12:35:47
С текущего момента можно сделать самим http://dev.1c-bitrix.ru/community/blogs/oracle/userdefined-functions-and-seo-infoblock.php

Товарищи разработчики 1С-Битрикс, скажите пожалуйста: всем самим делать или вы сделаете в ближайший месяц?
Рейтинг: 1  
Пользователь 203730 29.04.2014 12:25:13
В общем мы не дождались у моря погоды и сделали все сами. 2 недели модуль ждал модерации и вчера она закончилась.
http://marketplace.1c-bitrix.ru/solutions/intervolga.seofilters/


Если есть еще идеи по фильтрам - обращайтесь, добавим.
Рейтинг: 0  
Пользователь 455861 15.12.2018 12:16:52
Стыд и срам прошло уже 4-5 лет данную проблему так и не решили, клали разрабы на свой продукт им лишь бы бабки рубить, куда не плюнь через раз все приходиться самим дорабатывать. Еще 5 лет так и будем модули покупать чтобы теги вырезать.
Рейтинг: 0  
Пользователь 455861 15.12.2018 12:17:18
Стыд и срам прошло уже 4-5 лет данную проблему так и не решили, клали разрабы на свой продукт им лишь бы бабки рубить, куда не плюнь через раз все приходиться самим дорабатывать. Еще 5 лет так и будем модули покупать или костыли пихать, чтобы теги вырезать.
Рейтинг: 0  
Пользователь 4577160 08.09.2020 14:58:22
Данный вопрос решить можно следующим образом:
1. В init.php создадим хэлпер substring (зачем он описано ниже) и clear_tags - это как раз то, о чем задан вопрос
<?
if (CModule::IncludeModule("iblock")){
   \Bitrix\Main\EventManager::getInstance()->addEventHandler(
      "iblock",
      "OnTemplateGetFunctionClass",
      "seoTemplatesHandler"
   );

   function seoTemplatesHandler(Bitrix\Main\Event $event) {
      $arParam = $event->getParameters();
      $functionClass = $arParam[0];
      if(is_string($functionClass) && class_exists($functionClass)){
         switch ($functionClass){
            case 'substring':
               $result = new Bitrix\Main\EventResult(1,$functionClass);
               break;
            case 'clear_tags':
               $result = new Bitrix\Main\EventResult(1,$functionClass);
         }
      }

      return $result;
   }
   
   include_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/iblock/lib/template/functions/fabric.php");
   
   class substring extends \Bitrix\Iblock\Template\Functions\FunctionBase
   {
      public function calculate($parameters)
      {
         $arParams = $this->parametersToArray($parameters);
         $result = CTextParser::clearAllTags($arParams[0]);
         if(count($arParams) == 2){            
            return substr($result, $arParams[1]);
         }
         else if(count($arParams) == 3 && strlen($result) >= $arParams[2]){
            return substr($result, $arParams[1], strpos($result, ' ', $arParams[2]));
         }
         else {
            return $result;
         }
      }
   }
   
   class clear_tags extends \Bitrix\Iblock\Template\Functions\FunctionBase
   {
      public function calculate($parameters)
      {
         $arParams = $this->parametersToArray($parameters);
         return CTextParser::clearAllTags($arParams[0]);
      }
   }
}

?>
Обратите внимание на функцию clear_tags - это как раз то о чем вы спрашиваете, она удалит все тэги. В SEO шаблоне инфоблока это будет выглядеть так:
{=clear_tags(this.PreviewText)}
Зачастую этого не достаточно, бывают случаи что необходимо сократить значение description. На коде выше обратите внимание на функцию substring.
В инфоблоке, на закладке SEO, и в поле "Шаблон META DESCRIPTION" указываем:
{=substring(this.PreviewText,0,160)}
Все готово, теперь meta tag description будет сокращен до 160 символов, если слово получается не законченным то сокращается до последнего полного словаагт