Ändern aller URLs, um zusätzliche Informationen aufzunehmen

8

Welche Hooks stehen zum Ändern der URLs zur Verfügung? Zum Beispiel gibt es Sprachmodule , die, wenn sie aktiviert ist , Urls bieten wie /en/node/1anstatt sie als verlassen /node/1.

Ich möchte etwas Ähnliches in der URL haben, auf das ich zugreifen kann, ohne dass andere Funktionen beeinträchtigt werden.

Wie wird das erreicht?

Matthew
quelle

Antworten:

4

Sie suchen nach einer Möglichkeit, eine Link-URL während des Schreibens zu ändern? Ich habe mich kürzlich damit befasst und war überrascht, wie viel Jagd erforderlich war.

Ich ging mit hook_url_outbound_alter( &$path, &$options, $original_path ), mit dem Sie Link-URLs ändern können, die vom Drupal-URL-System geschrieben werden.

Es gibt auch hook_url_inbound_alter( &$path, $original_path, $path_language )eine Möglichkeit, die möglicherweise besser ist, da sie die spezifische Sprache des Pfads enthält - dies hängt davon ab, wo die Änderung stattfinden soll. Ich persönlich finde es hook_url_outbound_alter()zuverlässig und einfach, damit zu arbeiten - es ändert alle geeigneten URLs, während sie geschrieben werden, und mit $ options können Sie zuverlässig Abfragezeichenfolgen (...? Query = string & foo = bar) und Hash-Frangments (... #someId).

Wenn Sie $ path ändern, wird der tatsächliche Pfad aktualisiert, der in die URL href geschrieben wird. Dies läuft natürlich auf allen Links, daher sollten Sie zunächst überprüfen, ob es sich um einen Link handelt, den Sie ändern möchten.

Es wird vor dem Aliasing ausgeführt, sodass es auf den Drupal-Standardeinstellungen basiert. Um zwei sehr vereinfachende Beispiele zu nennen, wenn Sie nur Taxonomiepfade ändern möchten:

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

Und / oder wenn Sie möchten, dass es nur auf bestimmten Seiten ausgeführt wird, z. B. auf Seiten zum Bearbeiten von Knoten:

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
quelle