Localizator. Вывод списка языков



Доброго времени суток, сообщество.

Предлагаю решение для вывода списка языков при использовании дополнения Localizator.

Данное решение добавлено в новую версию Localizator еще в ноябре 2020 года, но так как новой версии до сих пор не выпущено оставлю здесь.

— Создаем новый сниппет getLocales
— Добавляем следующий код и сохраняем.
— в строке $defaultLocale = $modx->getOption('defaultLocale', $scriptProperties, 'ua'); — можно указать язык по умолчанию, в данном случае Украинский.

<?php

$pdoFetch = $modx->getService('pdoFetch');
$defaultLocale = $modx->getOption('defaultLocale', $scriptProperties, 'ua');
$tpl = $modx->getOption('tpl', $scriptProperties, '');
$currentTpl = $modx->getOption('currentTpl', $scriptProperties, '');
$start = $modx->getOption('site_start');
$pageId = $modx->getOption('pageId', $scriptProperties, $modx->resource->get('id'));
$currentLocale = $modx->config['cultureKey'];
$where = $modx->getOption('where', $scriptProperties, ['active' => 1]);

$protocol = $modx->getOption('server_protocol').'://';

$locales = $pdoFetch->getCollection('localizatorLanguage', $where, $scriptProperties);

$output = '';

if($locales) {
    
    foreach($locales as $data) {
        $data['current'] = false;
        $url = $data['http_host'];
        $chunk = $tpl;
        
        if($pageId != $start) {
            $url = $data['http_host'].$modx->makeUrl($pageId);
        }
        
        if($data['key'] == $currentLocale || $data['cultureKey'] == $currentLocale) {
            $data['current'] = true;
            
            if(!empty($currentTpl)) {
                $chunk = $currentTpl;
            }
        }
        
        $data['url'] = $protocol.$url;
        
        $output .= $pdoFetch->getChunk($chunk, $data);
    }
}

return $output;

Для вывода на странице используем следующий вызов:

<ul>
{$_modx->runSnippet('!getLocales', [
    'sortby' => 'id',
    'sortdir' => 'DESC',
    'where' => [...Somewhere ],
    'defaultLocale' => 'ua',
    'tpl' => '@INLINE <li><a href="{$url}">{$key}</a></li>',
    'currentTpl' => '@INLINE <li class="current"><span>{$key}</span></li>'
])}
</ul>

Надеюсь будет полезно.
Иван Бочкарев
30 мая 2021, 12:58
modx.pro
4
1 276
+11
Поблагодарить автора Отправить деньги

Комментарии: 1

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
1