Модули Path, Pathauto и i18n Drupal
Столкнулась с ситуацией на мультиязычном сайте. Например, у нас есть 2 ноды:
русскоязычная нода /node/1 (имеет алиас /ru/razdel1/about)
англоязычная нода /node/2 (имеет алиас /en/razdel1/about)
Так вот, при редактировании одной из нод безобразно портятся алиасы другой ноды.
Лечим:
патчим модули path и pathauto:
В файле ваш_сайт\modules\path\path.module меняем:
else if ($path && $alias) {
// Check for existing aliases.
if ($alias == drupal_get_path_alias($path, $language)) {
// There is already such an alias, neutral or in this language.
+ db_query("DELETE FROM {url_alias} WHERE dst = '%s' AND language = '%s'", $alias, $language);
// Update the alias based on alias; setting the language if not yet done.
- db_query("UPDATE {url_alias} SET src = '%s', dst = '%s', language = '%s' WHERE dst = '%s'", $path, $alias, $language, $alias);
+ db_query("INSERT INTO {url_alias} (src, dst, language) VALUES ('%s', '%s', '%s')", $path, $alias, $language);
}
?>
В файле ваш_сайт\sites\all\modules\pathauto\pathauto.module меняем:
--- pathauto.module.old 2009-01-15 12:13:06.000000000 +0200
+++ pathauto.module.new 2009-01-15 12:34:54.000000000 +0200
@@ -198,6 +198,10 @@ function pathauto_path_alias_types() {
* Implementation of hook_nodeapi().
*/
function pathauto_nodeapi(&$node, $op, $teaser, $page) {
+ // Don't run Pathauto if the user didn't edit the current node.
+ $arg1 = arg(1);
+ if ($arg1 != 'add'){ //если это не создание нового материала
+ $arg0 = arg(0);
+ $arg2 = arg(2);
+ if (!(($arg0 == 'node') && ($arg1 == $node->nid) && ($arg2 == 'edit')))// а редактирование
+ return;
+ }
_pathauto_include();
if (module_exists('path')) {
switch ($op) {
Мне помогло.
P.S. На момент написания статьи pathauto версии 6.x-1.5