Drupal 8 & Drupal 9 - Créer un Alias d'URL dans le code

Posté le Jeudi 23 juin 2016 - 19:16
Dernière mise à jour le Vendredi 11 septembre 2020 - 09:31

Les alias d'url sont des URI « propres » faisant référence à une URI système. Exemple pour ce contenu, l'alias est /snippets/2016/drupal-8-drupal-9-creer-un-alias-durl-dans-le-code.html et le chemin système est : /node/166.

Voici comment jouer avec les alias d'url dans drupal 8 et 9 :

Pour drupal 8.8.x+ et drupal 9

Tester si un alias existe pour un chemin système

  1. // Il est évidement préférable d'utiliser l'injection de dépendance pour récupérer le service AliasManager quand c'est possible.
  2. $aliasManager = \Drupal::service('path.alias_manager');
  3.  
  4. $chemin_system = '/node/166';
  5. $langcode = 'fr';
  6. // Si un alias n'existe pas, alors la méthode suivante nous retourne le chemin système qu'on lui a passé
  7. // note : le 3e paramètre $langcode est optionnel
  8. $alias = $aliasManager->getAliasByPath($chemin_system, $langcode);
  9. if ($urlAlias && $urlAlias !== $path_alias) {
  10. // Pas d'alias existant
  11. }
  12. else {
  13. // Un alias existe
  14. }

Créer un alias

  1. $system_path = '/node/166';
  2. $path_alias = '/mon-alias.html'
  3. $langcode = 'fr'
  4. $alias = Drupal\path_alias\Entity\PathAlias::create(['path' => $system_path, 'alias' => $path_alias, 'langcode' => $langcode]);
  5. $alias->save();

Pour drupal 8.7.x et inférieur

Tester si un alias existe pour un chemin système

  1. // On récupère le service alias manager
  2. $alias_manager = \Drupal::service('path.alias_manager');
  3.  
  4. $chemin_systeme = "/node/5"
  5. $alias = $alias_manager->getAliasByPath($chemin_systeme);

Note, si un alias n'existe pas pour le chemin système alors la méthode nous retournera le chemin système, sinon elle nous retournera l'alias.

Créer un alias

  1. // On récupère le service alias storage cette fois
  2. $alias_storage = \Drupal::service('path.alias_storage');
  3.  
  4. $chemin_systeme = "/node/5"
  5. $alias_voulu = "/mon-super-chemin.html"
  6. $alias_storage->save($chemin_systeme, $alias_voulu);

Plus d'informations sur drupal.org : https://www.drupal.org/node/1853148

Aller plus loin ?

 

Commentaires

Florian_drupal

Posté le Mardi 27 mars 2018 - 15:35

Merci pour cet article,
Je me posais la question suivante, est-il possible de générer un alias d'URL avec des paramètres du style :
/recherche-ref?dossier=867 qui donnerait /recherche-ref/[node:title] ?

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.
CAPTCHA Désolé, pour ça, mais c'est le seul moyen pour éviter le spam...