28апреля,
2010
Установка модуля, плагина и сниппета YAMS в Modx

YAMS — Yet Another Multilingual Solution — служит для создания многоязычных сайтов на базе Modx CMS.

Поиск по сайтам связанным с настройкой и работой с Modx уcпехом не увенчался. Вообще, никакой поиск успехом не увенчался, когда потребовалась информация на русском языке.
Пришлось разбираться с английской документацией и методом проб и ошибок делать проект.

Полностью переводить документацию не буду, расскажу в общих чертах, как его запустить и заставить работать.

Устанавливался YAMS на версию Modx Evolution 1.0.3, которая уже в дистрибутиве имеет предустановленный ManagerManager последней версии, без него YAMS просто не получится использовать.

Установка:
Надо скачать архив последней версии. Там что-то непонятное с версиями. Последняя версия почему-то не лежит на странице для скачки, а в списке Previous Releases, потому прямая ссылка на версию 1.1.7-alpha RC7, она пока последняя.

Распаковать архив и залить в папку assets/modules/yams, выставить права на папку yams 775.

Подключение модуля, плагина и сниппета:

Код модуля:

require_once ( $modx->config['base_path'] . 'assets/modules/yams/yams.module.inc.php' );

— Создать в администрационной части в разделе «Модули» новый модуль YAMS.
Описание: Yet Another Multilingual Solution Module

— Создать в администрационной части в разделе «Плагины» новый плагин YAMS.
Описание: Yet Another Multilingual Solution Plugin
Код плагина:

require ( $modx->config['base_path'] . 'assets/modules/yams/yams.plugin.inc.php');

В системных событиях плагина поставить галочки на:
OnLoadWebDocument
OnParseDocument
OnWebPageInit
OnWebPagePrerender
OnLoadWebPageCache
OnPageNotFound
OnBeforeDocFormSave

— Создать в администрационной части в разделе «Сниппеты» новый сниппет YAMS.
Описание: Yet Another Multilingual Solution Snippet
Код сниппета:

<?php
require ( $modx->config['base_path'] . 'assets/modules/yams/yams.snippet.inc.php' );
?>

После перезагрузить страницу, чтобы модуль заработал.

Настройка ManagerManager:
Независимо от того, что используется, в файле с правилами или чанке с правилами в конце надо прописать:

require ( $modx->config['base_path'] . 'assets/modules/yams/yams.mm_rules.inc.php' );

Собственно, YAMS готов к работе.

В «Инструментах» > «Конфигурации» включить Дружественные URL, разрешить вложенные URL, также использовать в связке с предыдущим параметром повторяющиеся псевдонимы, тогда путь до документа в адресной строке будет выглядеть:
site.com/en/catalogue/home-video
site.com/ru/catalogue/home-video

Настройка:

Во вкладке «Модули» > «YAMS» лежат все настройки.

Настройка языков:

Собственно, исчерпывающая страница, на которой показаны языки и как их добавлять. Теги, названия для отображения в самом же языке, в других языка, выбор письма справа налево или наоборот, теги (нужны для вызовов сниппета YAMS, обозначение, группы), системное название языка, имя сервера система подставляет автоматически. Set Default — поставить язык по умолчанию, чтобы с него открывался сайт.

Дальше идёт настройка сервера, после того, как созданы все необходимые языки, YAMS создаёт правила, которые надо вписать в .htaccess, чтобы правильно работали пути и редиректы.

Это находится на следующей вкладке:

Всё содержимое из этой вкладки просто скопировать в .htaccess

Другие настройки:

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

Последняя вкладка: Multilingual Templates

Нужна для того, чтобы YAMS перекраивал панель редактирования под многоязычный сайт.

YAMS заменяет стандартные поля Pagetitle, Longtitle, Content итд TV-параметрами с окончанием _ru, _en итд, то бишь, чтобы Pagetitle страницы был привязан именно к языку и полное название TV-параметра тогда выглядит pagetitle_ru.

Как только создаётся новый шаблон, во вкладке Multilingual Templates надо ему присвоить статус многоязычного.

Также можно создавать новые TV-параметры с нужным окончанием, они автоматически будут переноситься в соответствующий таб языков.

Не рекомендуется, даже больше, нельзя убирать поле Internal Name, оно нужно для отображения названия документа в дереве слева.

Создание шаблона:

Стандартный шаблон без дополнительных вызовов других сниппетов. YAMS автоматически определяет такие поля, как [*pagetitle*], [*longtitle*], [*content*]. То есть, достаточно вставить их в шаблон, сделать во вкладке Multilingual Templates шаблон многоязычным и при редактировании документа заполнить эти поля для каждого языка, при переключении языков на сайте, они будут меняться.

Механизм переключения языков:

Создаётся, например, чанк Languages, ставится в нужном месте в шаблоне и в чанк записывается:

[[YAMS? &get=`repeat` &repeattpl=`lang_tpl` &currenttpl=`current_lang_tpl`]]

&repeattpl=`lang_tpl` — шаблон кнопки языка
&currenttpl=`current_lang_tpl` — шаблон кнопки текущего языка

Шаблон lang_tpl выглядит, например, вот так:

<a href="(yams_docr)">(yams_name)</a>

(yams_docr) — ссылка, сгенерированная до текущей страницы в этом или остальных языках
(yams_name) — имя языка, вписанное в табе Модули > Yams > Language Settings

&currenttpl — шаблон выбранного языка. Тоже самое, только можно добавить class="selected", ну, или что по вкусу, чтобы язык был виден, как текущий.

Точно таким же образом можно подставить и флажки вместо текста.

Wayfinder и YAMS

Вызов Wayfindera:

[[Wayfinder? &startId=`0`  &useWeblinkUrl=`true` &rowTpl=`menu_tpl`]]

YAMS-у требуется, чтобы параметр &useWeblinkUrl был включён.
Чтобы Wayfinder правильно генерировал ссылки, всё в шаблоне работает через сниппет YAMS.

Шаблон одной кнопки — menu_tpl:

<li[+wf.id+][+wf.classes+]><a href="(yams_doc:[+wf.docid+])" [+wf.attributes+]>[[YAMS? &get=`content` &docid=`[+wf.docid+]` &from=`pagetitle`]]</a>[+wf.wrapper+]</li>

Ditto и YAMS:

С Ditto обстоит намного сложней, но без него никуда.
К вызову Ditto нужно подключать расширение:

&extenders=`@FILE assets/modules/yams/yams.extender.inc.php`

Если вызов некэшируемый [!Ditto!], то в параметрах вызова надо указывать id и язык:
&id=`(yams_id)` &language=`(yams_mname)`
А в шаблоне плейсхолдеры указываются тогда так:

[+(yams_id)_pagetitle+].

Если вызов кэшируемый [[Ditto]], то автор предлагает поместить в каждый язык по вызову Ditto, также в вызове прописать &id=`id` &language=`имя языка`.

И третий способ по пути наименьшего сопротивления, расширение подключать не нужно, в вызове Ditto чанк с шаблоном имеет окончание соответствующее языку:

[[Ditto? &tpl=`news_(yams_id)`]]

Существует два чанка news_ru, news_en. В зависимости от того, какой язык текущий, параметр (yams_id) подменяется обозначением языка.

А в самих чанках:

<h1>[+introtext_ru+]</h1><p>[+content_ru+]</p>

Это прямой вызов TV-параметров, заменивших встроенные поля.
Неудобен этот способ тем, что нужно создавать большое количество чанков, но работает без осечек, с некоторыми сниппетами, например, eForm-ом иначе и не получится.

Это общая информация, не вдаваясь в мелкие детали, чтобы собрать мультиязычный сайт её вполне достаточно.

Сначала пришлось набить шишек и довольно много с ним помучиться, тем более, что версии постарше не работали так, как нужно, но после нескольких осечек, уже проще разобраться, как работает YAMS и использовать его совершенно не проблематично.

62 комментария на «“Установка модуля, плагина и сниппета YAMS в Modx”»

  1. причом к странице, я ещо не подключал yams!

  2. SAN_i:

    Добрый день. Возникла следующая проблема. Я использую yams и ditto, при этом ditto вызываю так:

    [[Ditto? &id=`cat` &extenders=`@FILE assets/modules/yams/yams.extender.inc.php` &tpl=`cat_en` &parents=`9` &sortDir=`ASC` &paginate=`1` &summarize=`5` &display=`all` &paginateAlwaysShowLinks=`1` &dateFormat=`%d.%M.%Y` &phx=`0` &language=`english` ]]

    [+cat_previous+] [+cat_pages+] [+cat_next+]

    Но вот не смотря на указание &language=`english` в пагинации слова далее, назад остаются на русском языке.

    Подскажите как можно побороть этот вопрос?

  3. SAN_i:

    Поменял id на &id=`en-cat` и вызов пагинации на:

    [+en-cat_previous+] [+en-cat_pages+] [+en-cat_next+]

    Слова в пагинации стали на английском, теперь осталась еще одна проблема — корректные ссылки в пагинации согласно текущего языка, как это подправить подскажите пожалуйста?

  4. SAN_i:

    Изменил Redirection Mode в настройках yams на Current и стало сохранять язык при переходе по ссылкам пагинации, хотя сами ссылки не поменялись.

    Скажите оптимальное ли это решение или есть лучше?

    А так же в чем разница между Current и Default?

  5. Mark.Sh:

    Да, я там уже писал, что редиректы важны.

  6. Всем привет! Ребят, а кто-нибудь умудрялся заставить YAMS работать с разными доменами (например: google.com/google.ru)?

  7. Евгений:

    Mark.Sh , сделал вроде бы всё по вашей инструкции, но при этом на странице вместо ссылок с языками выводится — (yams-repeat:0)(yams_name)(current:0)(yams_name)(/yams-repeat:0)

    что я не учёл, что упустил?

    скажете пожалуйста.

  8. Mark.Sh:

    А шаблон сделан мультиязычным?

  9. Mark.Sh:

    Всем привет! Ребят, а кто-нибудь умудрялся заставить YAMS работать с разными доменами (например: google.com/google.ru)?

    Можно попробовать покопаться в .htaccess-е и редиректы делать не на субдомены и подпапки, а на домены, по идее, логично. Сам не пробовал.

  10. pr-light:

    а под Revo есть что-нить подобное?

  11. Подскажите как устанавливать различные модули в modx??

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

This blog is kept spam free by WP-SpamFree.