Изменение всех URL, чтобы включить дополнительную информацию


8

Какие крючки доступны для изменения URL-адресов? Например, существуют языковые модули, которые при включении предоставляют URL-адреса, такие как, /en/node/1а не оставляют его как /node/1.

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

Как это достигается?

Ответы:


4

Итак, вы ищете способ изменить URL-адрес ссылки в процессе написания? Я недавно изучил это и был удивлен тем, сколько охоты требовалось.

Я пошел с hook_url_outbound_alter( &$path, &$options, $original_path ), который позволяет вам изменять ссылки URL, которые пишутся системой URL Drupal.

Существует также hook_url_inbound_alter( &$path, $original_path, $path_language ), что может быть лучше, поскольку он включает в себя определенный язык пути - это зависит от того, где вы хотите, чтобы изменение произошло. Я лично считаю hook_url_outbound_alter()надежным и простым в работе - он меняет все соответствующие URL-адреса по мере их написания, и, используя $ options, вы можете надежно добавлять и редактировать строки запроса (...? 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.