Для DocLister досить просто, вказати контролер lang_content, і всі поля і урл, будуть підмінені в залежності від мови.
[[DocLister? &tpl=`@CODE:[+title+]` &controller=`lang_content`]]
[[DLMenu? &controller=`lang_menu`]]
Створюємо конфігурацію за прикладом:
<?php
$settings['display'] = 'vertical';
$settings['fields'] = array(
'title' => array(
'caption' => 'Title RU',
'type' => 'text'
),
'title_en' => array(
'caption' => 'Title EN',
'type' => 'text'
),
'title_ua' => array(
'caption' => 'Title UA',
'type' => 'text'
),
);
$settings['templates'] = array(
'outerTpl' => '<div class="images">[+wrapper+]</div>',
'rowTpl' => '<p>[+title[(_suffix)]+]</p>'
);
Тут під кожну мову, ми створюємо поле, а при виведенні використовуємо суфікс.
<?php
$settings['display'] = 'vertical';
$settings['fields'] = array(
'title' => array(
'caption' => 'Title RU',
'type' => 'text'
),
);
$settings['templates'] = array(
'outerTpl' => '<div class="images">[+wrapper+]</div>',
'rowTpl' => '<p>[+title+]</p>'
);
$bLang = \bLang\bLang::GetInstance($this->modx);
$settings = $bLang->bLangChangeMultitvFields($settings,['title'],'#caption# (#lang#)',['templates']);
У цьому варіанті, ми автоматично дублюємо поля під кожну мову, і автоматично підміняємо плейсхолдери в шаблонах. Перший параметр - це як раз масив налаштувань. Другий масив з полями, для якого потрібно робити дублі. Третій - формат назв. Четвертий масив груп шаблонів, в який потрібно підміняти плейсхолдери.
<?php
$settings = [
'caption' => 'All fields',
'settings' => [
'field' => [
'caption' => 'Text field',
'type' => 'text',
],
],
];
$bLang = \bLang\bLang::GetInstance($modx);
return $bLang->changeClientSettingsFields($settings,['field']);
Логіка як і в multitv, метод сам зробить дублі в конфігурації. У шаблоні використовуємо [(g_field)], значення саме зміниться в залежності від мови.
1.У словнику створюємо запис FL_lexicon, і для кожної мови пишемо назви лексикону (відповідає назві папки / assets / snippets / FormLister / core / lang) Для ru russian-UTF8, для en english.
У виклик додаємо два параметри:
&lang=[(__FL_lexicon)]
&lexiconHandler=\bLang\bLangLexiconHandler
Всередині форми отримати значення запису зі словника можемо
У action потрібно на початку написати [(_root)], щоб форма відправлялася на потрібну мовну версію
Тут все досить просто, назви фільтрів виносимо в словник. І або в конфігу пише в сніпету для назви [(name)] або в конфігу [(Filter_[+tv_id+])] і в словнику створюємо запис filter_41, де 41 - це id tv параметра.
Всі параметри які потрібно міняти, в залежності від мови, необхідно винести в дерево, кожному прописати значення для кожної мови. В можливих значень такої тв прописати
@EVAL return $modx->runSnippet("bLang", [ 'type'=>'getTreeParams', "parent"=>"6", 'firstEmpty'=>'1']);
bLang буде повертати в залежності від мови значення з потрібного поля.
Для кожної мови створюємо свій контейнер, і PageBuilder викликаємо з потрібним контейнером.