Skip to content

webber12/evobabel-0.2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 

Repository files navigation

author webber (web-ber12@yandex.ru)

evoBabel - мультиязычные сайты для modx evolution || Evolution CMS (версия 0.3)

DONATE


если считаете данный продукт полезным и хотите отблагодарить автора материально, либо просто пожертвовать немного средств на развитие проекта - можете сделать это на любой удобный Вам электронный кошелек

Яндекс.Деньги 410011544038803
Webmoney WMR: R133161482227
Webmoney WMZ: Z202420836069

с необязательной пометкой от кого и за что именно

Из главных изменений 20.12.2022

  • Нет необходимости отдельно создавать главную страницу сайта для языка в корневой папке "язык", поскольку корневая папка теперь и есть главная страница языка.

Состав:


    1. Папка assets/snippets/evoBabel, содержащая основной сниппет snippet.evoBabel.php (создание языковых версий)
    1. Сниппет evoBabel - для вывода результатов работы в ТВ ресурса
    1. Сниппет lang - для выдачи перевода на нужном языке на сайте
    1. Плагин evoBabel - для правильной отдачи 404 страницы, синхронизации значений выбранных ТВ, чтения в сессию актуальных переводов
    1. Плагин evoBabelPlaceholders - для парсинга языковых плейсхолдеров парсинга языковых плейсхолдеров вида [%Главная страница%] вместо сниппета [[lang? &a=Главная страница]]
    1. Модуль lexicon для evoBabel (файлы и текст модуля)

Возможности:


    1. создание неграниченного количества языковых версий сайта при этом каждая версия хранится в своем дереве, что не ограничивает нас никак т.е. структура сайта на разных языках может отличаться (в отличие от YAMS), нет проблем с плейсхолдерами, другими сниппетами и т.п.
    1. ресурсы разных языковых версий связаны между собой - что позволяет при навигации переключаться на нужную языковую версию ресурса
    1. Возможна синхронизация значений нужных ТВ параметров для разных версий ресурса (id нужных ТВ и id нужных шаблонов задается в настройках плагина evoBabel)
    1. Переводы в отдельном модуле Lexicon без перезагрузки и сразу для всех языков. Есть фильтрация, возможность добавления и удаления нужного языка там же

Установка:


    1. Скачиваем архив со сниппетом. При автоматической установке все последующие действия происходят в автоматическом режиме. Необходимо лишь создать шаблон "Язык" (п.3-6), заполнить параметры модуля evoBabelLexicon и привязать tv relation ко всем шаблонам на сайте (кроме шаблона Язык).
    1. Помещаем в папку assets/snippets/ соответствующие папки
    1. Создаем в корне сайта один (или несколько) папок для языков - например RU,EN и т.п. Это будут главные страницы сайта для соответствующих языков. Алиасы данных папок будут алиасами языков (ru,en,fr и т.п.), а расширенные заголовки (longtitle) - названиями языков в переключателе.
    1. Пусть у нас основным языком будет RU, создаем страницу "Главная" с расширенным заголовком RU и алиасом ru (задаем ее стартовой для сайта в конфигурации MODx)
  • 5 Создаем новый TV-параметр - если не создался автоматически (назовем его relation, заголовок - Языковые версии ресурса) с типом ввода Custom Input и в поле возможные значения вписываем код @EVAL return $modx->runSnippet("evoBabel"); id именно этого TV и нужно вносить в настройки модуля как id TV, используемого для хранения связей.

  • 6 Прикрепляем данный TV ко всем шаблонам кроме шаблона главной страницы.

    1. Создаем новый сниппет evoBabel и помещаем в него код из соответствующего файла в папке install
    1. Создаем новый сниппет lang и копируем код из соответствующего файла в папке install
    1. Создаем новый плагин evoBabel, копируем код из соответствующего файла в папке install
    1. В конфигурации плагина вставляем
&synch_TV=ids TV для синхронизации;text; &synch_template=ids шаблонов для синхронизации;text; &config=Файл шаблонов;text;assets/snippets/evoBabel/config/config.php

и указываем нужные id TV и шаблонов для синхронизации через запятую,

    • Системные события для плагина OnPageNotFound, OnDocFormSave, OnBeforeEmptyTrash, OnEmptyTrash, OnWebPageInit,OnDocDuplicate
    • Создаем новый модуль evoBabelLexicon и помещаем в него код из соответствующего файла в папке install
    • На вкладке конфигурация в режиме редактирования модуля отмечаем галочку "Включить общие параметры"
    • В строку "конфигурация модуля" на той же вкладке "конфигурация вставляем
&lang_template_id=id шаблона языка;text; &rel_tv_id=id TV для хранения языковых связей;text; &currlang=язык по умолчанию;text;ru &show_panel=Показывать панель;text;1

и вносим в появившееся поле нужный нам id шаблона языка, id TV для хранения языковых связей и название языка по умолчанию согласно алиасу корневой папки

    • Сохраняем модуль и опять открываем на редактирование. После чего переходим на вкладку "Зависимости" и открываем ссылку "Управление зависимостями". На открывшейся странице добавляем к зависимостям плагин evoBabel и сниппеты evoBabel, lang.
    • Опять возвращаемся к редактированию созданных сниппетов evoBabel, lang и плагина evoBabel. На вкладке "Свойства" в выпадающием списке "Импортировать общие параметры модуля" выбираем название нашего модуля.
    • Создаем плагин evoBabelPlaceholder (событие OnParseDocument) и помещаем в него код из папки install для соответствующего плагина (данный плагин используется для установки языковых плейсхолдеров [%плейсхолдер%] вместо запуска сниппета lang и необязателен

Настройка админки завершена. Теперь в каждом ресурсе мы должны получить в панели "Языковые версии" название текущего языка и список доступных языков. Если перевод уже создан - то будет кнопка "перейти", если еще нет - кнопка "создать".

Использование на сайте - тут вообще все просто


    1. В нужном месте шаблона размещаем плейсхолдеры [+activeLang+] - для отдельного вывода текущего языка и [+switchLang+] - для вывода переключалки языков
    1. Сами переводы в шаблонах и чанках получаем с помощью сниппета lang //использование в шаблонах чанках и т.п. // [[lang? &a=Главная страница]] - выведет перевод слов Главная страница для текущего языка из его чанка // использование в сниппетах // [[DocLister? &parents=[[lang? &a=Папка каталог]] ...другие параметры ..]] // если вы установили плагин evoBabelPlaceholder то вместо вызова [[lang? &a=Главная страница]] можно использовать языковой плейсхолдер [%Главная страница%]

Предупреждения и ограничения:


    1. Модуль поставляется "как есть", перед установкой изучите инструкцию и сделайте дамп базы сайта
    1. При запуске модуля создается новая таблица "префикс_lexicon" в базе данных.

Важно:


если у вас на странице на главной вкладке только один tv-параметр и это параметр смены языков, то из-за особенностей modx единственный tv с типом ввода custom input не показывается. Для решения данной проблемы просто создайте еще один произвольный tv например с именем okLang и типом текст, а затем скройте его через managermanager просто прописав правило mm_hideFields('okLang', '', ''); в чанке правил mm_rules

Сотрудничество:


По вопросам сотрудничества обращайтесь на электронный ящик web-ber12@yandex.ru