Змінення всіх URL-адрес для включення додаткової інформації


8

Які гачки доступні для зміни URL-адрес? Наприклад, є мовні модулі, які при ввімкненні надають такі URL-адреси, /en/node/1а не залишають їх як /node/1.

Я хочу мати щось подібне в URL-адресі, до якого я можу мати доступ, не маючи порушених інших функціональних можливостей.

Як це здійснюється?

Відповіді:


4

Отже, ви шукаєте спосіб змінити URL-адресу посилання під час написання? Я нещодавно переглянув це і здивувався, скільки потрібно полювання.

Я пішов із тим hook_url_outbound_alter( &$path, &$options, $original_path ), що дозволяє змінювати URL-адреси посилань, які записує система Drupal URL.

Існує також hook_url_inbound_alter( &$path, $original_path, $path_language ), що може бути краще, оскільки воно включає конкретний мовний контур шляху - це залежить від того, де ви хочете внести зміни. Я особисто вважаю hook_url_outbound_alter()надійною і простою роботу - вона змінює всі відповідні URL-адреси в міру написання, і за допомогою параметрів $ ви можете надійно додавати та редагувати рядки запитів (...? Query = string & foo = bar) та хеш-фрагменти (... #someId).

Змініть $ path, і він оновить фактичний шлях, який буде записаний у URL-href. Звичайно, це працює на всіх посиланнях, тому ви хочете почати, перевіривши, що це посилання, яке ви хочете змінити.

Він виконується перед створенням дозволу, тому він базуватиметься на стандартних налаштуваннях Drupal. Щоб навести два дуже спрощені приклади, якщо ви хочете змінити лише шляхи таксономії:

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

І / або якщо ви хочете, щоб він працював лише на певних сторінках, наприклад, вузол редагування сторінок:

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
  }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.