Zmiana wszystkich adresów URL w celu włączenia dodatkowych informacji


8

Jakie haki są dostępne do zmiany adresów URL? Na przykład istnieją moduły językowe, które po włączeniu udostępniają adresy URL takie jak /en/node/1zamiast pozostawiania go jako /node/1.

Chcę mieć coś podobnego w adresie URL, do którego mogę mieć dostęp bez narażania innej funkcjonalności.

Jak to się osiąga?

Odpowiedzi:


4

Więc szukasz sposobu na modyfikację adresu URL linku podczas jego tworzenia? Niedawno przyjrzałem się temu i byłem zaskoczony, jak wiele polowań jest wymaganych.

Poszedłem z hook_url_outbound_alter( &$path, &$options, $original_path ), co pozwala ci zmieniać adresy URL linków, które są pisane przez system URL Drupal.

Jest też coś hook_url_inbound_alter( &$path, $original_path, $path_language ), co może być lepsze, ponieważ zawiera specyficzny język ścieżki - zależy to od tego, gdzie chcesz dokonać zmiany. Osobiście uważam, że jest hook_url_outbound_alter()niezawodna i prosta w obsłudze - zmienia wszystkie odpowiednie adresy URL podczas ich pisania, a za pomocą opcji $ możesz niezawodnie dodawać i edytować ciągi zapytań (...? #someId).

Zmodyfikuj ścieżkę $, a zaktualizuje rzeczywistą ścieżkę zapisaną w href adresu URL. Oczywiście działa to na wszystkich linkach, więc zacznij od sprawdzenia, czy to link, który chcesz zmodyfikować.

Jest wykonywany przed aliasingiem, więc będzie oparty na domyślnych ustawieniach Drupala. Aby podać dwa bardzo uproszczone przykłady, jeśli chcesz zmodyfikować tylko ścieżki taksonomii:

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

I / lub jeśli chcesz, aby działał tylko na określonych stronach, np. Na stronach edycji węzłów:

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
  }
}
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.