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

<?php
namespace Drupal\mon_module\Plugin\Filter;

use Drupal\filter\FilterProcessResult;
use Drupal\filter\Plugin\FilterBase;

/**
 * @Filter(
 *   id = "url_target_blank_filter",
 *   title = @Translation("Url Target Blank"),
 *   description = @Translation("Add « target=_blank » to all urls"),
 *   type = Drupal\filter\Plugin\FilterInterface::TYPE_TRANSFORM_IRREVERSIBLE,
 * )
 */
class UrlTargetBlankFilter extends FilterBase {

  public function process($text, $langcode) {
    $regex = "/(<a\\b[^<>]*href=['\"]?http[^<>]+)>/is";
    $subst = "$1 target=\"_blank\" rel=\"noopener\">";
    $result = preg_replace($regex, $subst, $text);
    return new FilterProcessResult($result);
  }
}

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

Aller plus loin ?

 

Ajouter un commentaire

Ne sera pas publié

CAPTCHA Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...