À 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.
Ajouter un commentaire