Drupal 8 - Créer un filtre de texte

Posté le Lundi 18 février 2019 - 15:18

À la demande d'un client je devais ajouter un attribut « target="_blank" » sur tous les liens sortant du site.

J'ai pour cela créé un filtre de texte que j'ai appliqué à un format de texte.

Voici le fichier mon_module/src/Plugin/Filter/UrlTargetBlankFilter.php

  1. <?php
  2. namespace Drupal\mon_module\Plugin\Filter;
  3.  
  4. use Drupal\filter\FilterProcessResult;
  5. use Drupal\filter\Plugin\FilterBase;
  6.  
  7. /**
  8.  * @Filter(
  9.  * id = "url_target_blank_filter",
  10.  * title = @Translation("Url Target Blank"),
  11.  * description = @Translation("Add « target=_blank » to all urls"),
  12.  * type = Drupal\filter\Plugin\FilterInterface::TYPE_TRANSFORM_IRREVERSIBLE,
  13.  * )
  14.  */
  15. class UrlTargetBlankFilter extends FilterBase {
  16.  
  17. public function process($text, $langcode) {
  18. $regex = "/(<a\\b[^<>]*href=['\"]?http[^<>]+)>/is";
  19. $subst = "$1 target=\"_blank\" rel=\"noopener\">";
  20. $result = preg_replace($regex, $subst, $text);
  21. return new FilterProcessResult($result);
  22. }
  23. }

À noter : j'ai aussi ajouté l'attribut rel="noopener" comme suggéré par Simon Georges.

 

Ajouter un commentaire

Ne sera pas publié

HTML restreint

  • Balises HTML autorisées : <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Les adresses de pages web et les adresses courriel se transforment en liens automatiquement.