Если вы хотите использовать hook_url_outbound_alter()
, вам нужно перейти на Drupal 7, поскольку он не существует на D6 и более ранних версиях.
На вашем месте я бы использовал псевдонимы. Псевдонимы работают, переписывая URL-адрес так, что departments/pch/chn/profile/3
будет переведено в node/1221/profile/chn/3
, что будет правильным путем Drupal для вашей установки.
Дело в том, что то, что вы получили, немного специфично для сайта, поэтому вам нужно создать собственную систему для создания псевдонимов в вашем пользовательском модуле, а не полагаться на путь auto.
Я не знаю семантику ваших URL, поэтому я не могу помочь вам, как вы должны создавать псевдонимы. Скорее всего, вы можете сделать это при создании нового узла. Взгляните на pathauto_create_alias
, это должно помочь вам большую часть пути.
Использование псевдонимов должно быть более легким в обслуживании, и некоторые модули подключаются к этому, позволяя вам делать другие вещи. Использование custom_url_rewrite_xxx
может быстро стать беспорядочным, особенно если вам нужно добавить много правил. Вероятно, он будет быстрее использовать сейчас, но если вам нужно поддерживать сайт, это может привести к серьезному WTF через год.
hook_url_outbound_alter
Если вы решили пойти по этому маршруту, вам нужно изменить переменную $path
, а не $result
. Вы можете взглянуть на url_alter.api.php для руководства, пример использования:
function hook_url_inbound_alter(&$result, $path, $path_language) {
global $user;
// Change all requests for 'article/x' to 'node/x'.
if (preg_match('|^article(/.*)|', $path, $matches)) {
$path = 'node'. $matches[1];
}
// Change all requests to 'e' to the user's profile edit page.
if ($path == 'e') {
$path = 'user/'. $user->uid .'/edit';
}
}