On March 26, 2019 we launched new MODX Forums. Please join us at the new MODX Community Forums.
Subscribe: RSS
  • Создание мультиязычного сайта на MODx(0.9.6.1) в мельчайших подробностях


    Предположим нам нужно создать сайт на двух языках. Русский и Английский.

    1) Входим в панель управления, создаём новый документ, назовём его "ru".
    Данный документ будет контейнером (Настройка страницы -> Контейнер (содержит дочерние документы) - поставить галочку).

    2) создаём второй контейнер, аналогичный первому, но с названием "en".

    3) создаём сниппет (Ресурсы -> Управление ресурсами -> Сниппеты -> Новый сниппет).
    Назовём сниппет redirect. Код сниппета (php):
    <?php
    $url = $modx->makeUrl($id);
    ob_end_clean();
    header('Location: '.$url);
    ?>

    * данный сниппет предназначен для редиректа на определённую страницу


    4) создадим второй сниппет, назовём его select_language.Код сниппета (php):
    <?php
    if(strstr($_SERVER[REQUEST_URI], 'ru')) 
    {
    echo '<a href="../en">English</a>';
    } else {
    echo '<a href="../ru">Russian</a>';
    }
    ?>

    * этот сниппет предназначен для вывода ссылок. English или Russian.

    5) теперь необходимо создать несколько документов в контейнерах "ru" и "en".
    Это могут быть любые страницы, главное, чтобы они были вложены в соответствующие контейнеры

    6) далее необходимо отредактировать созданные нами ранее страницы - контейнеры.
    Сейчас нам нужно сделать так, чтобы при входе на страницу "ru" нас отправляло на документ внутри контейнера "ru". Так же и с "en".

    Редактируем контейнер "ru". В поле "Содержимое документа" пишем:
    [[redirect? &id=`7`]]

    В моём случае id страницы, на которую я перенаправляю пользователя - 7.
    7 страница - это главная страница сайта на русском языке.
    У Вас страница, скорее всего будет иметь другой id

    7) редактируем контейнер "en". В поле "Содержимое документа" пишем:
    [[redirect? &id=`5`]]

    Опять же, 5 id, в моём случае, это главная страница англ. сайта, на которую перенаправиться пользователь.
    У Вас страница, скорее всего, будет иметь другой id

    Закрепим пункты 6 и 7. После редактирования документов-контейнеров "en" и "ru".
    Пользователь, зашедший по url - http://my_site.ru/ru - попадёт на страницу 7, т.е на русский вариант сайта (потому-что документ с id 7 находится в папке "ru").
    А пользователь, который пошёл по http://my_site.ru/en - на страницу 5, т.е англ. вариант сайта.

    8 ) После всех вышеперечисленных действий, размещаем сниппет [[select_language]] в нужном месте вашего шаблона.
    Входим на сайт, нас должно автоматически перебросить на главную страницу русского сайта (если контейнер "ru" у Вас
    имеет id = 1).
    Если Вам требуется, чтобы англ. версия грузилась первой - Инструменты -> Конфигурация -> Сайт -> Первая страница
    Вы можете поменять значение с 1, на id документа-контейнера "en".

    9) Настройки в панели администрирования

    Инструменты -> Конфигурация
    - Переписывать путь к изображениям? - НЕТ
    - Путь к файлам
    Узнать требуемый путь, можно из phpinfo(Отчеты -> phpInfo() - Просмотр)
    В phpinfo() ищем директиву DOCUMENT_ROOT.
    Например у меня
    DOCUMENT_ROOT Z:/home/maws/www
    И к этому пути нужно дописать директорию, где MODx хранит файлы. Т.е /assets/
    В результате. Переходим в Инструменты -> Путь к файлам и прописываем
    там свой путь. Я вписываю туда Z:/home/my_site/www/assets/

    - URL к файлам: я пишу - http://www.my_site.ru/assets/
    http://www. - обязательно писать!

    Переходим на вкладку Инструменты -> Конфигурация -> Файл-менеджер.
    В поле "Путь для файлового менеджера" пишем значение директивы DOCUMENT_ROOT,
    но в этот раз без /assets/. В моём случае - Z:/home/my_site/www/


    Возможные проблемы
    Может возникнуть проблема, когда вы загружаете файл через файловый менеджер, добавляете картинку в документ. Сохраняетесь, но при входе на эту страницу не отображается изображение. В этом случае пройдитесь по пункту 9 внимательнее. Если это не помогло, можно сделать убого, но работать будет.

    Заходим на ftp своего сайта. В папку /assets/plugins/tinymce212/jscripts/tiny_mce/plugins/advimage/jscripts
    Открываем файл functions.js. Ищем
    var src = formObj.src.value;

    и правим эту строку на:
    var src = 'http://www.my_site.ru/'+formObj.src.value;

    http://www.my_site.ru/ - в вашем случае адрес будет другой.
    Входим в панель администрирования, Инструменты -> Конфигурация -> Интерфейс и представление -> Переписывать путь к изображениям? Выбираете - да.


    Вот и всё. С виду объёмно, а на деле - просто.


    полезные ссылки:
    http://wiki.modxcms.com/index.php/Make_Multi_Lingual_Site
    http://yar-it.com/blog/modx-revolution-multi.html
    • Зачем в названии топика упоминается MODx (0.9.6.1) ?
      • elastic я с этой версией пока работал. Не вкурсе как на других, может там структура разная. Или нет?
        • А как с такой конструкцией сделать собственное меню на английском и тому подобные штуки? Нужно создавать новые шаблоны для других версий? Или есть более умное и автоматизированное решение?