Modification de toutes les URL pour inclure des informations supplémentaires

8

Quels crochets sont disponibles pour modifier les URL? Par exemple, il existe des modules linguistiques qui, lorsqu'ils sont activés, fournissent des URL telles que /en/node/1plutôt que de les laisser telles quelles /node/1.

Je veux avoir quelque chose de similaire dans l'url, auquel je peux avoir accès sans compromettre les autres fonctionnalités.

Comment est-ce accompli?

Matthieu
la source

Réponses:

4

Vous cherchez donc un moyen de modifier une URL de lien au fur et à mesure de son écriture? J'ai étudié la question récemment et j'ai été surpris de voir combien de chasse était nécessaire.

J'y suis allé hook_url_outbound_alter( &$path, &$options, $original_path ), ce qui vous permet de modifier les URL de lien qui sont écrites par le système d'URL Drupal.

Il y a aussi hook_url_inbound_alter( &$path, $original_path, $path_language ), ce qui pourrait être mieux car il inclut la jauge spécifique du chemin - cela dépend de l'endroit où vous souhaitez que la modification ait lieu. Personnellement, je trouve hook_url_outbound_alter()fiable et simple à utiliser - cela change toutes les URL appropriées au fur et à mesure qu'elles sont écrites, et en utilisant les options $, vous pouvez ajouter et modifier de manière fiable des chaînes de requête (...? Query = string & foo = bar) et des fractions de hachage (... #someId).

Modifiez $ path et cela mettra à jour le chemin réel qui est écrit dans l'URL href. Bien sûr, cela fonctionne sur tous les liens, vous devrez donc commencer par vérifier qu'il s'agit d'un lien que vous souhaitez modifier.

Il est exécuté avant l'aliasing, il sera donc basé sur les valeurs par défaut de Drupal. Pour donner deux exemples très simplistes, si vous souhaitez modifier uniquement les chemins de taxonomie:

function some_module_url_outbound_alter( &$path, &$options, $original_path ) {
  if(strpos($original_path, 'taxonomy/term') === 0) {
    // do stuff
  }
}

Et / ou si vous souhaitez qu'il ne s'exécute que sur des pages particulières, par exemple les pages d'édition de nœuds:

function some_module_url_outbound_alter( &$path, &$options, $original_path ) {
  $current_path = explode("/", current_path() );
  if (count($current_path) >= 3 && $current_path[0] == "node" && $current_path[2] == "edit") {
    // do stuff
  }
}
user56reinstatemonica8
la source