Інтеграція зі сніпетами

Інтеграція bLang з іншими сніпетами

DocLister, DLcrumbs і інші сніпети які юзают контролер site_content

Для DocLister досить просто, вказати контролер lang_content, і всі поля і урл, будуть підмінені в залежності від мови.

[[DocLister? &tpl=`@CODE:[+title+]` &controller=`lang_content`]]

DLMenu

[[DLMenu? &controller=`lang_menu`]]

multiTV

Створюємо конфігурацію за прикладом:

<?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']);

У цьому варіанті, ми автоматично дублюємо поля під кожну мову, і автоматично підміняємо плейсхолдери в шаблонах. Перший параметр - це як раз масив налаштувань. Другий масив з полями, для якого потрібно робити дублі. Третій - формат назв. Четвертий масив груп шаблонів, в який потрібно підміняти плейсхолдери.

clientSettings

<?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)], значення саме зміниться в залежності від мови.

FormLister

1.У словнику створюємо запис FL_lexicon, і для кожної мови пишемо назви лексикону (відповідає назві папки / assets / snippets / FormLister / core / lang) Для ru russian-UTF8, для en english.

  1. У виклик додаємо два параметри: &lang=[(__FL_lexicon)] &lexiconHandler=\bLang\bLangLexiconHandler

  2. Всередині форми отримати значення запису зі словника можемо

    • [(__name)]
    • [%name%]
    • $FormLister->translate('name');
  3. У action потрібно на початку написати [(_root)], щоб форма відправлялася на потрібну мовну версію

eFilter

Тут все досить просто, назви фільтрів виносимо в словник. І або в конфігу пише в сніпету для назви [(name)] або в конфігу [(Filter_[+tv_id+])] і в словнику створюємо запис filter_41, де 41 - це id tv параметра.

Всі параметри які потрібно міняти, в залежності від мови, необхідно винести в дерево, кожному прописати значення для кожної мови. В можливих значень такої тв прописати

@EVAL  return $modx->runSnippet("bLang", [ 'type'=>'getTreeParams',  "parent"=>"6", 'firstEmpty'=>'1']);

bLang буде повертати в залежності від мови значення з потрібного поля.

PageBuilder

Для кожної мови створюємо свій контейнер, і PageBuilder викликаємо з потрібним контейнером.