evoBabel

    evoBabel - мультимовні сайти для modx evolution (версия 0.2)

    author webber (web-ber12@yandex.ru)

    Склад:


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

    Можливості:


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

    Встановлення:


      1. Завантажуємо архів зі сніпетів
      1. Розміщуємо в папку assets / snippets / відповідні папки
      1. Створюємо шаблон "Мова" і запам'ятовуємо його id - ми будемо привласнювати його кожної кореневої папці мови
      1. Створюємо в корені сайту один (або декілька) папок для мов - наприклад RU, EN тощо з шаблоном "Мова". Аліаси даних папок будуть аліасами мов (ru, en, fr і т.п.)
      1. Нехай у нас основною мовою буде RU, створюємо в папці RU головну сторінку (задаємо її стартовою для сайту в конфігурації MODx)
      1. ID Сторінка вносимо в поле description нашого ресурсу RU, поле longtitle ресурсу RU пишемо слово "Русский" - там буде міститися назва нашої мови для виведення в переключалка мов
    • 7 Створюємо новий TV-параметр (назвемо його relation, заголовок - Мовні версії ресурсу) з типом введення Custom Input і в поле можливі значення вписуємо код @EVAL return $modx->runSnippet("evoBabel"); id саме цього TV і потрібно вносити в налаштування модуля як id TV, використовуваного для зберігання зв'язків.
    • 8 Прикріплюємо даний 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 і шаблонів для синхронізації через кому,

      1. Системні події для плагіна OnPageNotFound, OnDocFormSave, OnBeforeEmptyTrash, OnEmptyTrash, OnWebPageInit,OnDocDuplicate
      1. Створюємо новий модуль evoBabelLexicon і поміщаємо в нього код з відповідного файлу в папці install
      1. На вкладці конфігурація в режимі редагування модуля відзначаємо галочку "Включити загальні параметри"
      1. У рядок "конфігурація модуля" на тій же вкладці "конфігурація вставляємо
        &lang_template_id=id шаблона мови;text; &rel_tv_id=id TV мовних зв'язківй;text; &currlang=мова за замовчуванням;text;ru &show_panel=показувати панель;text;1 &publish=Опублікувати (0 -ні, 1 - так);text;0

        і вносимо в з'явилося поле потрібний нам id шаблону мови, id TV для зберігання мовних зв'язків і назва мови за замовчуванням згідно АЛІАС кореневої папки

      1. Зберігаємо модуль і знову відкриваємо на редагування. Після чого переходимо на вкладку "Залежності" і відкриваємо посилання "Управління залежностями". На сторінці, додаємо до залежностей плагін evoBabel і сніпети evoBabel, lang.
      1. Знову повертаємося до редагування створених фрагментів evoBabel, lang і плагіна evoBabel. На вкладці "Властивості" в випадаючому списку "Імпортувати загальні параметри модуля" вибираємо назву нашого модуля.
      1. Створюємо плагін evoBabelPlaceholder (подія OnParseDocument) і поміщаємо в нього код з папки install для відповідного плагіна (Даний плагін використовується для встановлення мовних плейсхолдерів [%плейсхолдер%] замість запуску сніпета lang і необов'язковий

    Налаштування адмінки завершена. Тепер в кожному ресурсі ми повинні отримати в панелі "Мовні версії" назва поточної мови і список доступних мов. Якщо переклад вже створено - то буде кнопка "перейти", якщо ще немає - кнопка "створити".

    Використання на сайті - тут взагалі все просто


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

    Приклад роботи


    Приклад роботи

    Попередження і обмеження:


      1. Модуль поставляється "як є", перед установкою вивчіть інструкцію і зробіть дамп бази сайту
      1. При запуску модуля створюється нова таблиця "префікс_lexicon" в базі даних.
      1. Застаріло. Актуально для версії 0.1 </ b> Поле description ресурсу використовується для зберігання мовних зв'язків. Якщо ви використовуєте дане поле для інших цілей - попередньо необхідно винести інформацію з нього в інше поле або в TV параметр

    Важливо:


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