Modifica di tutti gli URL per includere informazioni aggiuntive


8

Quali hook sono disponibili per modificare gli URL? Ad esempio, ci sono moduli linguistici che, quando abilitati, forniscono URL come /en/node/1invece di lasciarlo come /node/1.

Voglio avere qualcosa di simile nell'URL, a cui posso avere accesso senza che altre funzionalità siano compromesse.

Come viene realizzato?

Risposte:


4

Quindi stai cercando un modo per modificare l'URL di un link mentre viene scritto? Ho esaminato questo argomento recentemente e sono rimasto sorpreso da quanta caccia fosse richiesta.

Sono andato con hook_url_outbound_alter( &$path, &$options, $original_path ), che consente di modificare gli URL dei collegamenti che vengono scritti dal sistema URL Drupal.

C'è anche hook_url_inbound_alter( &$path, $original_path, $path_language ), che potrebbe essere migliore in quanto include la lingua specifica del percorso - dipende da dove vuoi che avvenga l'alterazione. Personalmente trovo hook_url_outbound_alter()affidabile e semplice con cui lavorare: cambia tutti gli URL appropriati man mano che vengono scritti e usando $ options puoi aggiungere e modificare in modo affidabile stringhe di query (...? Query = string & foo = bar) e frange di hash (... #someId).

Modifica $ path e aggiornerà il percorso effettivo che viene scritto nell'URL href. Ovviamente, questo funziona su tutti i collegamenti, quindi ti consigliamo di iniziare controllando che sia un collegamento che desideri modificare.

Viene eseguito prima dell'aliasing, quindi sarà basato sui valori predefiniti di Drupal. Per dare due esempi molto semplicistici, se si desidera modificare solo i percorsi di tassonomia:

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

E / o se si desidera che venga eseguito solo su pagine particolari, ad esempio pagine di modifica dei nodi:

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
  }
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.