О пакете
Пакет добавляет для всех объектов типа modResource и их производных вкладку управления персональными словарями ресурса.
Управление разделами словаря(языками)
Управление словарями идет через панель компонента: Components > Xlexicon:
?
Следует обратить внимание на 3 основных параметра языка: ISO,Context,Status
Параметры
Status
Данная настройка регулирует доступность языка для вывода и словаря. Не активен === не доступен.
Context
Список контекстов, для которых доступен тот или иной язык.
ISO
Код языка. Является определяющей настройкой каждого словаря. На основе его формируется устанавливаемый cultureKey на сайте.
Управление словарями ресурса
Для ресурсов, к контекстам которых привязан активный раздел словаря, становится доступна спец. вкладка для управления словарем ресурса:
?
В процессе добавления новых языков будут появляться новые вкладки.Сохранение данных словаря происходит вместе с данными ресурса.
Особенности модуля
Установка базового языка
Формирование активных языков происходит на основе разделов словаря, созданных через панель управления разделами словаря. Для базового языка используются стандартные поля ресурса. Базовый языковой ключ сайта устанавливает настройка xlexicon.cultureKey_base. По-умолчанию ru.
Это значение используется как основное и добавляется в выборку всех активных языков
Подключение сторонних словарей
Возможно у вас уже есть лексиконы с занесенными туда переводами, которые вы хотите использовать на сайте. Добавьте их имена в системную настройку xlexicon.lexicon_list. Подключение всех перечисленных словарей произойдет автоматически.
Вывод данных ресурса
Модуль спроектирован таким образом, что для выводимого ресурса нет нужды использовать какие-то специальные теги. Значения словаря, актуальные активному cultureKey, автоматически будут подставлены в плейсхолдеры типа [[*]].
Взаимодействие со сторонними модулями
Если с выводом ресурса мы не имеем проблем, то сторонние модули придется настроить.
В основе популярных модулей типа Wayfinder, которые могут в том или ином виде оперировать существующими ресурсами, лежат методы getObject и getCollection и их вариации. Для вывода данных по ресурсам эти модули используют чанки.
Для возможности получения значений полей ресурса в чанке был создан спец. процессор web/dictionary/getfield:
Вызов:
[[!runprocessor?&res=`[[+docid]]`&field=`pagetitle`&ns=`xlexicon`&action=`web/dictionaries/getfield`]]
Параметры:
res — id ресурса, поле которого мы хотим получить
field — имя поля ресурса
ns и action — параметры, отвечающие за логику данного сниппета
Примечание:
Из примера выше видно, что выборка идет через специальный сниппет-прослойку, отвечающий за вывод данных. Мы его вынуждены использовать, т.к. например в чанке нельзя исполнять php-код. В случае использования шаблонов на основе phpTemplates+Smarty мы освобождаемся от необходимости так делать. Просто запускаем процессор через метод api modx.
Примечание 2:
Если вы используете данный модуль, как основу для мультиязычного сайта, то вас никто не обязывает использовать данную прослойку. Можно сразу учитывать актуальный словарь для ресурса в запросах согласно связке ресурс–словарь. Так или иначе выбор за разработчиком.
Получение списка языков
Для вывода списка активных языков идет через процессор web/languages/getlist.
Вызов:
[[!runprocessor?ns=`xlexicon`&action=`web/languages/getlist`&ph=`langs`&row=`row`&outer=`outer`]]
Параметры:
row — чанк-шаблон для пункта списка
outer — чанк-шаблон для обертки списка
ph — плейсхолдер для вывода данных
Чтобы поменять актуальный язык достаточно передать на сервер требуемый cultureKey. Это можно сделать например через GET-параметр.
Примечание:
Пользователи phpTemplates+Smarty так мучиться не обязаны. Получаем данные, оборачиваем в шаблон :)
AJAX
Если работать с ajax-запросами через коннекторы, то нельзя нативно менять текущий язык. MODX в базовом варианте просто не рассчитан на такое для контекстов, отличных от mgr. Приходилось как-то влезать и встраивать код, реагирующий на изменение языка.
В модуле данная проблема была решена. Класс-обработчик запросов был расширен и прокачан. Теперь если посылать данные на коннектор, передавая с данными требуемый cultureKey, то в исполняемом коде системная настройка cultureKey будет реагировать на входные данные. Достаточно лишь передать в запросе {cultureKey:’iso-код языка’}.
Кэширование
Для кэширования результатов не используются дополнительные системы кэширования. Кэшер выбирается в зависимости от того, какой используется в системе.
Для статичных страниц модуль меняет префикс кэша в зависимости от текущего языкового ключа.
Для основных процессоров, выдающих данные, кэширование тоже предусмотрено. По-умолчанию оно включено. Настройки, отключающей кэширвоание, не предусмотрено.
Плюшки
В модуле создано 3 чанка с примерами:
example_connectortest — чанк-пример, демонстрирующий работу модуля с ajax.
example_wf_row — пример вывода пункта меню для Wayfinder.
example_xlexicon — комплексный пример, демонстрирующий работу (2 предыдущих чанка включены туда).