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}, не знаю почему такая строка не хочет работать.

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


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

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


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

комментарии:
22.12.2017 09:52
alkogolrussia
Предлагаю вашему вниманию качественный алкоголь по демократичным ценам.
Доставка по всей России от 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 918 4880243 Алексей (Телефон, viber, whatsapp, skype)
 
22.12.2017 12:13
WilliamAboge
Different nurse b like repayment seeking legs uprising from veins problems containing troxerutin and extracts of horse chestnut, gingko biloba and battleaxe hazel. Has a kiezel.valgomed.amsterdam decided anticipatory action. Eases the uncertainty in the legs including paunchy legs syndrome as sufficiently as unpleasant burning.
 
23.12.2017 04:32
alkorusha
Предлагаю вашему вниманию качественный алкоголь по демократичным ценам.
Доставка по всей России от 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 918 4880243 Алексей (Телефон, viber, whatsapp, skype)
 
25.12.2017 05:23
Stevenbemia
Thank you for sharing, I always discover something new from your posts.
 
29.12.2017 09:45
EdwardNeord
Pepper is advanced deep down veel.coffeeua.webcam cleansed and brighter. By-product has rightfully earned its superstar static next to removing blackheads, unblocking pores and eliminating oil.
 

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


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