ИНТЕРНЕТ-МАГАЗИНЫ ПОД КЛЮЧ
Мультиязычный сайт на Evolution CMS (Modx Evo) используя дополнение evoBabel
И так встала задача реализовать на одном сайте возможность переключение языков, в частности нужно было создать версию сайта на английском языке. При этом сайт уже работает, имеет свою логику и структуру, она должна быть сохранена и в английской ветке, также нужно чтобы переключение языков работало в рамках текущих страниц по принципу (русская – английская). Пользователь должен иметь возможность самостоятельно добавлять и редактировать как русские, так и английские страницы сайта.
На сайте установлена система управления сайтом Evolution CMS (ранее она была известна как Modx Evo), система в принципе адекватная, и даже есть компонент при помощи которого можно организовать мультиязычность на сайте – это evoBabel, кому интересно оставил ссылку на страницу самого дополнения https://github.com/webber12/evobabel-0.2 также она доступна для установки через специальный модуль Extras (именно через него я и установил это дополнение).
После установки у вас должны появиться нужные компоненты сниппеты, плагин, модуль и тв-параметр (relation), описывать ручную установку я не буду, так как она хорошо описана по ссылке выше, да и проще установить всё через модуль Extras. Далее нам нужно добавить новый шаблон назовём его Lang, можно придумать любое название, главное запомнить ID этого шаблона, его потом нужно будет указать в конфигурации модуля. Также нужно создать две папки (документа) например RU и EN в них будут помещены соответствующие документы, относящиеся к разным языковым веткам. Папок может быть и больше всё зависит от того сколько языков будет у вас на сайте. В качестве шаблона для этих папок применяем ранее созданный шаблон Lang.
Да не забудьте проверить, чтобы тв-параметр relation (он должен создаться автоматически при установке дополнения) был присвоен всем шаблонам, кроме шаблона Lang. В папках (документах) RU, EN нужно указать следующее:
- Заголовок – название папки например – RU
- Расширенный заголовок – название для флажка переключения языков я указал - RU
- Описание – тут нужно указать ID главной страницы этой ветки, для русской ветки обычно это 1, а вот для других версий нужно смотреть как у вас. Если в папке EN пока нет главной страницы Home то нужно её создать.
- Псевдоним – я указал ruдля папки RUи en– для папки EN
- Шаблон - Lang
Теперь нужно скопировать все документы относящиеся к русской версии сайта в папку RU, в дальнейшем можно будет быстро создать нужные документы для английской ветки на основе имеющихся документов русской ветки. Сам процесс очень прост, ниже я его опишу.
Конфигурация модуля evoBabelLexicon
Далее нам нужно зайти в Модули – Управление модулями – evoBabelLexicon - Конфигурация там нужно обязательно указать следующее:
- id шаблона языка - указываем ID созданного ранее шаблона Lang
- id TV языковых связей - указываем ID тв-параметра relation
- язык по умолчанию - нужный язык я выбрал RU
- показывать панель – надо указать 1 или 0, где 1 – показывать, а 0 – скрыть
- публиковать (0 -нет, 1 - да) – нужно ли сразу публиковать созданные документы (при создании страницы на другом языке) я выбрал 0, так как её надо наполнить переводом и уже потом опубликовать, но вы можете сразу публиковать, выбрать 1.
- язык переводов – я выбрал ru
После того как мы скопировали все документы относящиеся к русской версии сайта в папку RU можно на её основе создать английскую ветку документов. Для этого открываем документ в русской версии на редактирование, в самом верху вы увидите, что у вас добавился значок для переключения между документами разных версий, так же если на него нажать можно создать копию этого документа в папке EN, поочерёдно открываем и создаём документы для английской версии. Обратите внимание на псевдоним, он будет одинаковый у русских и английских страниц, если нужно вы можете его изменить. Если документ в английской ветке уже создан, то можно быстро переключиться на его редактирование из русской версии и обратно, это достаточно удобно.
Теперь разберёмся, зачем нужен модуль evoBabelLexicon, и как с ним работать. По сути это модуль для переводов различных слов для разных языковых версий. Он позволяет использовать один и тот же шаблон для документов разных языковых веток, при этом при загрузке нужной языковой версии меняется и перевод этих слов.
Для начала нужно создать нужное количество языков, по умолчанию создан один язык –ru (русский). Добавим ещё одну языковую версию – en (английский).
После этого можно добавлять переводы, нажимаем создать – в графе имя параметра пишем название параметра (его мы будем использовать в шаблонах) можно писать на кириллице или в латинице кому как удобно. В графе Id ничего ставить не нужно, он присвоиться автоматически при сохранении. В графе перевода ru – пишем русский текст, в графе en – пишем английский перевод этого слова. Сохраняем, теперь можно использовать это слово в шаблонах или чанках сайта вызов в таком формате [%имя параметра%]. Обязательно создать параметры Главная страница, Корневая папка, Страница не найдена с заданием id этих ресурсов для каждого языка.
Также во всех шаблонах там, где будет переключение язков размещаем плейсхолдеры - для отдельного вывода текущего языка и - для вывода переключателя языков. Можно оставить только переключение языков . Для тех, кому не нужны картинки флагов стран (они по умолчанию выводятся) их можно скрыть через стили css.
В некоторых случаях, когда используется сниппет Doclister или DLMenu нужно выбирать документы с разных языковых версий, может возникнуть сложность как указать в вызове сниппета с какой папки выбирать документы, на самом деле тут всё просто в модуле evoBabelLexicon задаём новый параметр например parent_menu в ru – указываем id папки откуда нужно выбирать русские документы, а в en – указываем id папки откуда нужно выбирать английские документы. В сниппете указываем &parents=`[%parent_menu%]` и всё у вас будет работать как нужно.