Модули 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) {

Мне помогло.

Рекомендовать в Социальных сетях:
 

Один комментарий на “Модули Path, Pathauto и i18n Drupal

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *