Мультиязычность в MODx EVO. Модуль YAMS
Для реализации в MODx мультиязычности существует модуль YAMS. Гугл выдает множество ссылок на форумы, где обсуждается этот вопрос, однако так просто YAMS мне не дался. Поэтому делюсь опытом.
Модуль представлен пятью вкладками:
&id=`(yams_id)_old_ditto_id`
&language=`(yams_mname)`
&extenders=`@FILE assets/modules/yams/yams.extender.inc.php`
При таком вызове Ditto нет необходимости менять шаблоны. Если посмотреть расширение, которое мы подключили, то обнаружим в нем переопределение плейсхолдеров, которое позволяет нам не париться больше ни о чем :)
Установка
- Скачиваем модуль здесь. В файле readme есть инструкция по установке и настройке, конечно же на английском языке.
- Распаковываем содержимое архива в папку модулей (assets/modules/).
- Создаем плагин
Название YAMS Описание Плагин для решения мультиязычности Код плагина require( $modx->config['base_path'] . 'assets/modules/yams/yams.plugin.inc.php');
Системные события - OnLoadWebDocument
- OnParseDocument
- OnWebPageInit
- OnWebPagePrerender
- OnLoadWebPageCache
- OnPageNotFound
- OnBeforeDocFormSave
- Создаем сниппет
Название YAMS Описание Получение мультиязыкового контента Код сниппета <? require( $modx->config['base_path'] . 'assets/modules/yams/yams.snippet.inc.php' ); ?>
- Создаем сам модуль YAMS
Название YAMS Описание Решение мультиязычности Код сниппета require_once( $modx->config['base_path'] . 'assets/modules/yams/yams.module.inc.php' );
- Перезагружаем страницу, чтобы модуль появился в меню и открываем. При первом открытии запустится установка модуля.
Внимание! Не забудьте проверить, что папка yams доступна для записи. Модулю YAMS требуется возможность записи файла конфига (yams.config.ini.php).
Настройка
Если у вас еще не были включены дружественные URL - включите их в конфигурации сайта. Также необходимо разрешить вложенные URL.Модуль представлен пятью вкладками:
- Общая информация с кучей ссылок и историей версий.
- Настройки языков. По умолчанию на этой вкладке представлены сразу 5 языков! Английский, французский, японский, немецкий и русский. Английский язык стоит как язык по умолчанию. Я при первом же осмотре страницы удалила все ненужные мне языки, оставив лишь английский и русский. Русский язык активировала и установила языком по умолчанию.
- Конфигурация сервера, а точнее настройки .htaccess для дружественных URL. Скопируйте все, приведенное там в свой .htaccess, а старые настройки сотрите.
- Прочие параметры. Эту вкладку я не трогала, оставила все по умолчанию.
- Мультиязыковые шаблоны. Здесь представлены все шаблоны сайта, для которых можно добавить мультиязычность или удалить. Стоит отметить, что YAMS при добавлении мультиязычности шаблону, создает для него tv-параметры заголовка (pagetitle), расширенного заголовка (longtitle), описания (description), пункта меню (menutitle) и контента (content) ДЛЯ КАЖДОГО ЯЗЫКА. Делает это он добавлением к названию tv-параметра соответствующей приставки (например, _ru или _en).
Необходимо отметить, что при удалении шаблона или самого YAMS все TV-параметры останутся, их нужно удалять вручную.
Переключение языка на сайте
И вот, казалось бы, все готово, пора и проверить модуль в действии. Для этого добавляем один из вызовов сниппета в нужный шаблон или чанк:[[YAMS? &get=`list`]]// будет выведен список языков ссылками
или
[[YAMS? &get=`selectform`]] // будет выведен выпадающий список языков
Для задания собственного шаблона (более подробно - в документации по сниппету) используйте
[[YAMS? &get=`repeat` &repeattpl=`otherFlagItemTpl` ¤ttpl=`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 с учетом языка
Полезные ссылки:
- Установка модуля, плагина и сниппета YAMS в Modx
- MODx Yams - мультиязычные сайты на modx Evo
- Документация, которая представлена сразу в трех языках
Как на примере это выглядит?
ОтветитьУдалитьто что ты пишешь:
Для некэшируемого вызова дитто (напоминаю - [! !]) я изменила параметр id и добавила два новых:
&id=`(yams_id)_old_ditto_id`
&language=`(yams_mname)`
&extenders=`@FILE assets/modules/yams/yams.extender.inc.php`
При таком вызове Ditto нет необходимости менять шаблоны. ....
хоть 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`!]
ProgerGirl, у меня есть 2 чанка (*_ru и *_en) с разными меню для каждого языка, как YAMS заставить выводить на каждом языке свое меню?
Удалить//Спасибо за прошлый пример и быстрый ответ!!!
Я писала сама сниппет для вывода меню, поэтому просто добавила обработку вывода внутри сниппета.
УдалитьПочитайте здесь http://blog.marksh.net/?p=460 - Wayfinder и YAMS.
Приводится пример использования Wayfinder, думаю, как раз ваш случай
Привет! А ты не увлекаешься функциональным программирование, в частности Scala?
ОтветитьУдалитьпривет :) Нет, хочешь увлечь? ))
Удалить)) Просто показалось, что ты увлечена программированием... а область про которую я тебя спросил одна из самых передовых и интересных) ты есть вконтакте?
Удалитьконечно )
Удалитья там deil87
УдалитьПривет. хочу у тебя спросить по поводу звязки YAMS + WayFinder.
ОтветитьУдалитьВ шаблоне есть вывод Wayfinder'а. В нем есть параметр &config=`mollio` который отвечает за вывод меню в виде выпадающего, так вот при включенном параметре &config=`mollio` YAMS не хочет переводить пункты меню. Может подскажеш что нить.
пока нет времени посмотреть, в чем может быть дело. Но навскидку - почитайте в комментариях http://community.modx-cms.ru/blog/questions/9426.html
УдалитьЕсли не поможет - пишите, помогу разобраться :)
Кстати если что можеш писать мне в ВК - http://vk.com/nalkombaev
ОтветитьУдалитьСделал по документации на своем локальном сайте. Но у меня проблема: в настройках модуля site url стоит "http://localhost" и нет возможности исправить. Как это исправляется?
ОтветитьУдалитьЗдравствуйте!
ОтветитьУдалитьДелаю мультиязычность на сайте.
Понравилось решение YAMS - не нашла как добавить украинский язык.
Подскажите, пожалуйста, как добавить укр язык сайта без копирования дерева контента.
Добрый день! При использовании данного модуля дерево контента не копируется. Добавляются дополнительные поля для ввода контента на нескольких языках. Так что все, что вам необходимо - установить модуль и перевести контент сайта.
УдалитьИменно об этом я и писала. YAMS я установила, но возможности создать ураинский язык там нет (.
УдалитьЕсли схитрить, и создать, например, английский с параметрами украинского, поисковые роботы смогут распознать, что их обманывают?
Если правильно помню, то там можно добавлять сколько угодно языков, и не обязательно английский. Посмотрю позже, так ли это.
УдалитьСпасибо)
УдалитьМария, посмотрела в админке, думаю, вам проще добавить новый язык, а английский деактивировать. И все будет ок :)
УдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьСпасибо за статью, заказчику срочно захотелось англ.версию сайта ... и как раз в тему наткнулся, малость перепилил под свои нужды, а так все быстро настраивается :)
ОтветитьУдалитьА у меня не пошло, после включения плагина главная страница перестает работать. Подозреваю, что это из-за index.php, настроена переадресация на без index.php. Но как это изменить не знаю...
ОтветитьУдалитьК сожалению, с MODx не работаю уже много лет, поэтому не могу подсказать, в чем дело именно у вас :(
УдалитьЭтот комментарий был удален автором.
УдалитьКогда стоит ямс нужно отключать seo strict url в настройках ЧПУ ибо оно мешает друг другу и в самом yams перед копированием htaccess вкладка other params находим URL Formatting и переключаем поле Site start filename
ОтветитьУдалить