Рейтинг:1

Как применить nofollow и target_blank к внешним ссылкам в тексте, созданном с помощью CKEditor?

флаг cn

Когда я создаю узел, мне часто нужно добавить в текст ссылки на внешние сайты.

Я хочу, чтобы все внешние ссылки открывались в новой вкладке, и я хочу, чтобы они имели nofollow.

Поле body использует CKEditor.

Как подать заявку не следует и target_blank на внешние ссылки в тексте, созданном с помощью CKEditor?

Рейтинг:1
флаг ru

Вы можете сделать это автоматически, создав собственный текстовый фильтр в пользовательском модуле.

Обратите внимание, что /** @Фильтр... */ перед классом не комментарий, а аннотация, ее надо включить в файл. Замените все причудливые заглавные буквы своим собственным кодом.

src/Plugin/Фильтр/MYFANCYFILTER.php

<?php

пространство имен Drupal\MY_MODULE\Plugin\Filter;

используйте Drupal\filter\FilterProcessResult;
используйте Drupal\filter\Plugin\FilterBase;
используйте Drupal\Component\Utility\Html;

/**
 * @Фильтр(
 * идентификатор = "MY_FANCY_FILTER",
 * title = @Translation("Мой причудливый фильтр"),
 * description = @Translation("Делает HTML еще интереснее"),
 * тип = Drupal\filter\Plugin\FilterInterface::TYPE_TRANSFORM_REVERSIBLE
 * )
 */
класс MYFANCYFILTER расширяет FilterBase {

  процесс публичной функции ($ text, $ langcode) {
    $ результат = новый FilterProcessResult ($ текст);
    $dom = Html::load($text);
    $xpath = новый \DOMXPath($dom);

    // чтобы выбрать все ссылки, вам нужно создать запрос XPath 
    // приведенный ниже пример запроса выбирает все теги <a> с атрибутом "href"
    // см. https://www.w3schools.com/xml/xpath_syntax.asp
    foreach ($xpath->query("//a[@href]") as $element) {
      // приведенный ниже пример логики принимает все ссылки, начинающиеся с «http://», «https://» или «//»
      if (preg_match('|^(https?:)?//.+|', $element->getAttribute('href')) === 1) {
        // см. https://www.php.net/manual/de/class.domelement.php
        // для документов об управлении HTML-разметкой
        $element->setAttribute('MY_ATTRIBUTE', 'MY_VALUE');
      }
    }
    $result->setProcessedText(Html::serialize($dom));
    вернуть $результат;
  }
}

Затем включите новый текстовый фильтр для соответствующего текстового формата в
Конфигурация > Создание контента > Текстовые форматы и редакторы

Рейтинг:0
флаг pw

Я попытался добавить target="_blank" с помощью Text Format=Full HTML с помощью кнопки Source.

Это сработало для меня.

введите описание изображения здесь

Если вы не хотите вручную, вы можете попробовать следующий модуль https://www.drupal.org/project/editor_advanced_link

введите описание изображения здесь

флаг cn
Спасибо, но я знаю, как сделать это вручную, это много работы для сайта, который регулярно публикует сообщения. Я хочу добавить это автоматически на внешние лейны.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.