Мультиязычность в MODx EVO. Модуль YAMS

Для реализации в MODx мультиязычности существует модуль YAMS. Гугл выдает множество ссылок на форумы, где обсуждается этот вопрос, однако так просто YAMS мне не дался. Поэтому делюсь опытом.

Установка


  1. Скачиваем модуль здесь. В файле readme есть инструкция по установке и настройке, конечно же на английском языке. 
  2. Распаковываем содержимое архива в папку модулей (assets/modules/).
  3. Создаем плагин
    НазваниеYAMS
    ОписаниеПлагин для решения мультиязычности
    Код плагина
    require( $modx->config['base_path'] . 'assets/modules/yams/yams.plugin.inc.php');
    Системные события
    • OnLoadWebDocument
    • OnParseDocument
    • OnWebPageInit
    • OnWebPagePrerender
    • OnLoadWebPageCache
    • OnPageNotFound
    • OnBeforeDocFormSave

  4. Создаем сниппет
    НазваниеYAMS
    ОписаниеПолучение мультиязыкового контента
    Код сниппета
    <?
    require( $modx->config['base_path'] . 'assets/modules/yams/yams.snippet.inc.php' );
    ?>
  5. Создаем сам модуль YAMS
    НазваниеYAMS
    ОписаниеРешение мультиязычности
    Код сниппета
    require_once( $modx->config['base_path'] . 'assets/modules/yams/yams.module.inc.php' );
  6. Перезагружаем страницу, чтобы модуль появился в меню и открываем. При первом открытии запустится установка модуля. 
    Внимание! Не забудьте проверить, что папка yams доступна для записи. Модулю YAMS требуется возможность записи файла конфига (yams.config.ini.php).

Настройка

Если у вас еще не были включены дружественные URL - включите их в конфигурации сайта. Также необходимо разрешить вложенные URL.
Модуль представлен пятью вкладками:

  1. Общая информация с кучей ссылок и историей версий.
  2. Настройки языков. По умолчанию на этой вкладке представлены сразу 5 языков! Английский, французский, японский, немецкий и русский. Английский язык стоит как язык по умолчанию. Я при первом же осмотре страницы удалила все ненужные мне языки, оставив лишь английский и русский. Русский язык активировала и установила языком по умолчанию.
  3. Конфигурация сервера, а точнее настройки .htaccess для дружественных URL. Скопируйте все, приведенное там в свой .htaccess, а старые настройки сотрите.
  4. Прочие параметры. Эту вкладку я не трогала, оставила все по умолчанию.
  5. Мультиязыковые шаблоны. Здесь представлены все шаблоны сайта, для которых можно добавить мультиязычность или удалить. Стоит отметить, что YAMS при добавлении мультиязычности шаблону, создает для него tv-параметры заголовка (pagetitle), расширенного заголовка (longtitle), описания (description), пункта меню (menutitle) и контента (content) ДЛЯ КАЖДОГО ЯЗЫКА. Делает это он добавлением к названию tv-параметра соответствующей приставки (например, _ru или _en).
    Необходимо отметить, что при удалении шаблона или самого YAMS все TV-параметры останутся, их нужно удалять вручную.

Переключение языка на сайте

И вот, казалось бы, все готово, пора и проверить модуль в действии. Для этого добавляем один из вызовов сниппета в нужный шаблон или чанк:
[[YAMS? &get=`list`]]// будет выведен список языков ссылками
или
[[YAMS? &get=`selectform`]] // будет выведен выпадающий список языков
Для задания собственного шаблона (более подробно - в документации по сниппету) используйте
[[YAMS? &get=`repeat` &repeattpl=`otherFlagItemTpl` &currenttpl=`currentFlagItemTpl` ]]

Ditto и YAMS

Как я только не извращалась с вызовом плейсхолдеров дитто, чтобы эта мультиязычность заработала. Но все гениальное просто! Для некэшируемого вызова дитто (напоминаю - [! !]) я изменила параметр id и добавила два новых:
&id=`(yams_id)_old_ditto_id` 
&language=`(yams_mname)`
&extenders=`@FILE assets/modules/yams/yams.extender.inc.php`
При таком вызове Ditto нет необходимости менять шаблоны. Если посмотреть расширение, которое мы подключили, то обнаружим в нем переопределение плейсхолдеров, которое позволяет нам не париться больше ни о чем :)

Другие полезности

Для перевода конкретного куска текста на нужный язык используйте конструкцию:
[[YAMS? &get=`text` &from=`ru::Пример||en::Example`]]
(yams_docr:docId) // ссылка на docId с учетом языка

Полезные ссылки:

Комментарии

  1. Как на примере это выглядит?

    то что ты пишешь:
    Для некэшируемого вызова дитто (напоминаю - [! !]) я изменила параметр id и добавила два новых:
    &id=`(yams_id)_old_ditto_id`
    &language=`(yams_mname)`
    &extenders=`@FILE assets/modules/yams/yams.extender.inc.php`
    При таком вызове Ditto нет необходимости менять шаблоны. ....

    хоть 1 свой работающий вызов Дитто покажи пожалуйста!

    ОтветитьУдалить
    Ответы
    1. пожалуйста, рабочий пример:
      [!Ditto? &id=`book_cat[*id*]` &language=`(yams_mname)` &tpl=`tpl_book_cat` &startID=`[*id*]` &sortBy=`menuindex` &sortDir=`ASC` &dateFormat=`%d.%m.%Y` &truncLen=`300` &truncOffset=`0` &paginate=`0` &paginateAlwaysShowLinks=`0` &extenders=`summary,@FILE assets/modules/yams/yams.extender.inc.php`!]

      Удалить
    2. ProgerGirl, у меня есть 2 чанка (*_ru и *_en) с разными меню для каждого языка, как YAMS заставить выводить на каждом языке свое меню?
      //Спасибо за прошлый пример и быстрый ответ!!!

      Удалить
    3. Я писала сама сниппет для вывода меню, поэтому просто добавила обработку вывода внутри сниппета.
      Почитайте здесь http://blog.marksh.net/?p=460 - Wayfinder и YAMS.
      Приводится пример использования Wayfinder, думаю, как раз ваш случай

      Удалить
  2. Привет! А ты не увлекаешься функциональным программирование, в частности Scala?

    ОтветитьУдалить
    Ответы
    1. привет :) Нет, хочешь увлечь? ))

      Удалить
    2. )) Просто показалось, что ты увлечена программированием... а область про которую я тебя спросил одна из самых передовых и интересных) ты есть вконтакте?

      Удалить
  3. Привет. хочу у тебя спросить по поводу звязки YAMS + WayFinder.
    В шаблоне есть вывод Wayfinder'а. В нем есть параметр &config=`mollio` который отвечает за вывод меню в виде выпадающего, так вот при включенном параметре &config=`mollio` YAMS не хочет переводить пункты меню. Может подскажеш что нить.

    ОтветитьУдалить
    Ответы
    1. пока нет времени посмотреть, в чем может быть дело. Но навскидку - почитайте в комментариях http://community.modx-cms.ru/blog/questions/9426.html
      Если не поможет - пишите, помогу разобраться :)

      Удалить
  4. Кстати если что можеш писать мне в ВК - http://vk.com/nalkombaev

    ОтветитьУдалить
  5. Сделал по документации на своем локальном сайте. Но у меня проблема: в настройках модуля site url стоит "http://localhost" и нет возможности исправить. Как это исправляется?

    ОтветитьУдалить
  6. Здравствуйте!
    Делаю мультиязычность на сайте.
    Понравилось решение YAMS - не нашла как добавить украинский язык.
    Подскажите, пожалуйста, как добавить укр язык сайта без копирования дерева контента.

    ОтветитьУдалить
    Ответы
    1. Добрый день! При использовании данного модуля дерево контента не копируется. Добавляются дополнительные поля для ввода контента на нескольких языках. Так что все, что вам необходимо - установить модуль и перевести контент сайта.

      Удалить
    2. Именно об этом я и писала. YAMS я установила, но возможности создать ураинский язык там нет (.

      Если схитрить, и создать, например, английский с параметрами украинского, поисковые роботы смогут распознать, что их обманывают?

      Удалить
    3. Если правильно помню, то там можно добавлять сколько угодно языков, и не обязательно английский. Посмотрю позже, так ли это.

      Удалить
    4. Мария, посмотрела в админке, думаю, вам проще добавить новый язык, а английский деактивировать. И все будет ок :)

      Удалить
  7. Этот комментарий был удален автором.

    ОтветитьУдалить
  8. Спасибо за статью, заказчику срочно захотелось англ.версию сайта ... и как раз в тему наткнулся, малость перепилил под свои нужды, а так все быстро настраивается :)

    ОтветитьУдалить
  9. А у меня не пошло, после включения плагина главная страница перестает работать. Подозреваю, что это из-за index.php, настроена переадресация на без index.php. Но как это изменить не знаю...

    ОтветитьУдалить
    Ответы
    1. К сожалению, с MODx не работаю уже много лет, поэтому не могу подсказать, в чем дело именно у вас :(

      Удалить
    2. Этот комментарий был удален автором.

      Удалить
  10. Когда стоит ямс нужно отключать seo strict url в настройках ЧПУ ибо оно мешает друг другу и в самом yams перед копированием htaccess вкладка other params находим URL Formatting и переключаем поле Site start filename

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения