Мультиязычность. Пропадает пункт меню при редактировании английского материала

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

Аватар пользователя Bazilio Bazilio 10 апреля 2013 в 15:54

Здравствуйте!

Сделал мультиязычный сайт.
Язык определяется по префиксу в URL.

У меня есть раздел "Контакты" - это просто нода. Ссылка добавлена в главное меню

При редактировании английского материала в русской админке пункт меню автоматически отключается.
Как это предотвратить?

Уточню по подробней:

Есть русский материал по адресу
http://example.com/contacts

Английский материал по адресу
http://example.com/eng/contacts

Оба материала имеют одинаковый алиас "contacts".

Если зайти по адресу http://example.com/node/15/edit
где /node/15 - это английский материал и сохранить его, то пропадает ссылка "Contacts", а точнее деактивируется.

Если зайти по адресу http://example.com/eng/node/15/edit
и сохранить, то всё работает нормально.

То есть сейчас чтобы этого бага не было, мне приходится редактировать русские материалы в русской админке, а английские - в английской.

Как убрать автоматическое отключение пунктов меню.

PS: кстати если редактировать русский материал из английской админки, то русский пункт меню тоже отключается...

Комментарии

Аватар пользователя Bazilio Bazilio 10 апреля 2013 в 16:55

Пока решил проблему с помощью редиректов.
Написал такой хук в своём модуле:

function mymodule_preprocess_page(&$variables)
{
    //хак чтобы побороть баг с пропадающим меню при
    //редактировании английской ноды в русской админке
    //просто делаем редирект на английскую админку
    if (isset($variables['node'], $variables['language']) and $variables['node']->language == 'en' and $variables['language']->language == 'ru') {
        header('Location: /eng' . $_SERVER['REQUEST_URI']);
        exit();
    }

    //Мы русские, поэтому не пользуемся английской админкой
    if (strpos($_SERVER['REQUEST_URI'], '/eng/admin') === 0) {
        header('Location: ' . str_replace('/eng/admin/', '/admin/', $_SERVER['REQUEST_URI']));
        exit();
    }
}

Аватар пользователя roman-yrv roman-yrv 10 апреля 2013 в 22:48

При установке модуля i18n, если я не ошибаюсь, в таблицу, в которой хранятся пункты меню, добавляются поля, хранящие информацию о языке элемента меню.
И, соответственно, пункты меню, помеченные как англоязычные, не будут отображаться на русскоязычных страницах. Как-то так ...

А вот чтобы при редактировании англоязычных страниц была русскоязычная админка, есть модуль admin_language

Аватар пользователя Bazilio Bazilio 10 апреля 2013 в 23:22

roman-yrv, спасибо!
С локализацией и переводом пунктов меню я разобрался.
Я не понял, почему при сохранении английского материала в русской админке пункт меню, соответствующий этому материалу деактивируется. И как это предотвратить.

А модуль admin_language мне пока не нужен, так как пока проблема не решена, мне необходима английская админка для редактирования английских нод.

Аватар пользователя roman-yrv roman-yrv 10 апреля 2013 в 23:43

Сейчас попробовал сделать на тестовом сайте многоязычность через entity_translation, благо, что нода также является сущностью.

Причем, настроил так, чтобы, к примеру, если сайт на пяти языках, то нода была одна, а полей - по пять. То есть, перевод по полям.
Получается очень удобно. Нода - одна. Её адрес без префикса языка - в любом случае один.
Физически элемент меню - также один, если пункты меню вводить как "Нейтральные по отношению к языку", а после - локализовывать.

Единственно, для реализации такого варианта перевода нужно установить модуль title, который делает так, что заголовок ноды начинает обладать свойствами CCK-полей (его можно переводить и хранить их для каждой ноды несколько)

Может быть, если Вам настроить перевод таким вот образом, то эта проблема с меню не возникнет в принципе.

Аватар пользователя Bazilio Bazilio 11 апреля 2013 в 0:01

Спасибо,
Я рассматривал такой способ мультиязычности, но мне он не подходит.

Вообще я думал может быть есть где-то волшебный чекбокс отключающий такое поведение.
Или может кто-то знает, почему так сделано, и, мало ли, это является частью какой-то идеологии...
Вобщем пока всё работает с моим фиксом. Но хочется проблему добить.