SEO-модуль 1С-Битрикс, strip_tags Description и Keywords

21.09.2014  02:43

В 14-й версии Битрикс, наконец-то, сделали удобное формирование meta-тегов Description и Keywords. Сделать-то, сделали, даже реализовали limit — ограничение по количеству слов (а не символов, спешите видеть). А strip_tags нет! Как так?! Все сеошники тут же завалили форум Битрикса однотипными вопросами: как вырезать теги в новом волшебном SEO-модуле и как ограничивать по символам (а не по словам). Да и как проверять на заполненность полей, склеиваемых в Description/Keywords.

Скоро год пройдёт, а решения от Битрикса так и нет. Обещанного три года ждут. Ну, да мы и сами как-нибудь.
В /bitrix/php_interface/init.php регистрируем обработчик:

require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/iblock/lib/template/functions/fabric.php');
use BitrixMain;
$eventManager = MainEventManager::getInstance();
$eventManager->addEventHandler("iblock", "OnTemplateGetFunctionClass", "myOnTemplateGetFunctionClass");
include_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/php_interface/include/classes/seo.php");
function myOnTemplateGetFunctionClass(BitrixMainEvent $event) {
   $arParam = $event->getParameters();
   $functionClass = $arParam[0];
   if (is_string($functionClass) && class_exists($functionClass) && $functionClass=='ap_sseo'){
      $result = new BitrixMainEventResult(1,$functionClass);
      return $result;
   }
}


Самое интересное у нас будет происходить в /bitrix/php_interface/include/classes/seo.php
class ap_sseo extends BitrixIblockTemplateFunctionsFunctionBase
{
   public function onPrepareParameters(BitrixIblockTemplateEntityBase $entity, $parameters)
   {
      $arguments = array();
      /** @var BitrixIblockTemplateNodeBase $parameter */
      foreach ($parameters as $parameter)
      {
         $arguments[] = $parameter->process($entity);
      }
      return $arguments;
   }
   public function calculate(array $parameters)
   {
   foreach ($parameters as $key => $parameter)
   {
	$parameters[$key] = strip_tags($parameter);//вырезать теги (спасибо, Кэп)
	$parameters[$key] = preg_replace("/(\t+)/is","",$parameters[$key]);//вырезать табуляции
	$parameters[$key] = preg_replace("/(\s+){2,}/is"," ",$parameters[$key]);//заменить двойные пробелы одинарными
	$parameters[$key] = preg_replace("/(\r\n)+/i", "", $parameters[$key]);//удалить переводы строки
	//$parameters[$key] = mb_substr($parameters[$key],0,250);
   }
      if(isset($parameters[0]) && $parameters[0] && isset($parameters[1])) {
         return sprintf(mb_substr($parameters[1],$parameters[0],0,250));
      }
	  else return sprintf(mb_substr($parameters[0],0,250));
      return "";
   }
}


Готово! Из Description и keywords вырезаются все теги с помощью strip_tags и регулярными выражениями meta-теги приводятся в божеский вид: вырезается вся табуляция и переводы строк, двойные пробелы заменяются одинарными и, финально, поля обрезаются по длине (в лоб по 250 символов без учёта окончаний слов).

При желании можете его покрутить. Я не доделал обработку нескольких директив, почему-то происходит какая-то ересь и этот костыль можно использовать только с одной директивой: {=ap_sseo this.DetailText}
Это добавить в настройках инфоблока во вкладке SEO в поля «Шаблон META DESCRIPTION» и «Шаблон META KEYWORDS».

Совместное использование директив не прокатило {=ap_sseo limit this.DetailText " " 30}, не знаю почему такая строка не хочет работать.

Пользуйтесь!
Лучи добра разработчикам Битрикса!


перейти в Блог | Блог (стр. 9)

Ударим лайками по бездорожью, разгильдяйству и бюрократизму!


Ключевые слова (тэги): 1С-Битрикс 26  SEO 12  web-программирование 58  

комментарии:
02.04.2018 11:46
alkoholrus
Качественный алкоголь в 5 литровых канистрах с доставкой по России

Предлагаю вашему вниманию качественный алкоголь по демократичным ценам.
Доставка по всей России от 1 коробки (3 канистры по 5л)

В наличии:
Водка (Де люкс) 600руб5л
Водка со вкусами (Виноград, вишня, грейпфрут, дыня, клюква, лимон, мята, черная смородина) 600руб5л
Коньяк (обычный 5 звезд, шоколадный, вишневый, миндальный, карамельный, барбарис, мускат, абрикос) 600 руб5л
Ром Баккарди (белый, черный) 650руб5л
Текила Olmeca (золотая, серебряная) 650руб5л
Виски Grants 650руб5л
Наливка спотыкач (вишня с черносливом, 60% сахара) 650руб5л
Амаретто (миндаль, вишня) 600руб5л
Джин "Бифитер" 900 руб5л
Абсент "Ксента" 900руб5л
Самбука "Молинари" 900руб5л
Ментоловая водка "Минта" Финская водка 900руб5л
"Куантро" апельсиновый ликер 900 руб5л
Мартини (вермут) 900руб5л
Вино крепленое 18% (Малиновое, изабелла, вишневое) 600 руб5л
Спирт "Люкс" 96 градусов 850руб5л

Весь алкоголь отличного качества и постоянно проходит контроль качества.
Доставка по территории России транспортными компаниями занимает от 2ух до 15 дней.

Контакты для связи:
+7 988 3208922 Алексей (Телефон, viber, whatsapp, skype)
@Alkogolru - telegram
 
07.04.2018 12:31
BruceNebra
Hello. And Bye.
 
14.04.2018 12:22
MatthewGes
Hello. And Bye.
 
15.04.2018 03:12
Markwiv

Свежие и сырые базы форумов, блогов. Яндекс/Гугл - Ру/Бурж. Обновления.

Skype: Seo promotion+
ICQ 726166382
*strong*
 

Высказаться о наболевшем, я выслушаю:
Имя


email (не публикуется)