Антипод path

Главные вкладки

Аватар пользователя DCat DCat 27 сентября 2007 в 14:13

Как заставить Drupal при открытии страницы /node/123 редиректить на страницу с соответствующим алиасом (синонимом) созданным для модуля path?

Комментарии

Аватар пользователя coyotle coyotle 27 сентября 2007 в 14:35

в API друпала есть две функции: одна может возвращать алиас ноды drupal_get_path_alias, вторая редиректить на нужную страницу drupal_goto().
Вот их надо вставить куда-нибудь в page.tpl.php
Но это наверное не очень хорошее решение, т.к. завязано на тему, лучше написать модуль который будет анализировать текущий адрес а потом вызывать drupal_get_path_alias и drupal_goto()

Аватар пользователя restyler restyler 27 сентября 2007 в 17:42

Прежде чем писать такое, подумай о том, что это будет дополнительный редирект - а не процесс "на лету", как в path. Перезагрузки в браузере скорее всего заметно не будет, но тем не менее, нагружает сервер почти как загрузка двух страниц (почти - потому что при заходе на node/x Друпал будет инициализироваться, запрашивать из базы свои переменные, и т.д. - все что до строки drupal_goto будет выполнено - и потом, после редиректа - полная загрузка страницы на твоем алиасе). Если все это устраивает, тогда - вперед, это модуль будет в три строчки.

Аватар пользователя edhel edhel 27 сентября 2007 в 20:26

непонятно зачем такое надо... просто созданием алиаса для ноды 123 нельзя обойтись?

если нет, то можно написать модуль с хуком _menu, в котором проверять: если arg(0) == 'node' && arg(1) == 123, то drupal_goto('my/new/path').

Аватар пользователя Shedko Shedko 27 сентября 2007 в 20:58

По моему подойдет модуль Global Redirect
( http://drupal.org/project/globalredirect )

Simple module which…

* …checks if the currently url has an alias set and does a 301 redirect to it.
* …checks if the currently url has a trailing slash, removes it and checks if that has an alias and, if so, does a 301 redirect to that.
* …Finally, checks if the current URL is the same as the site_frontpage, if so - then redirects to "nothing" (ie the frontpage).

Reason:

Once enabled, an alias provides a nice URL for a node. However it doesn't remove the old URL (eg node/1234). This is a problem as you now have two URL's representing precisely the same content. You're getting into dangerous territory for duplicate pages which can get you sandboxed by the likes of Google!
Solution:

This module uses hook_init to interrupt the page load and do an alias lookup. If one exists, redirect off to iit - otherwise the page load may continue uninterrupted.

А если одним предложением и на русском, то при запросе ноды у которой есть path будет выдавать 301 и перенаправлять браузер на страницу с path

Аватар пользователя restyler restyler 27 сентября 2007 в 20:59

Не понял, что path делает "на лету"?
Прежде чем писать такое - подумайте и напишите ваше решение Smile

path достает реальный адрес страницы одним запросом в базу, без всяких редиректов. Чего тут непонятного?