Localizator, модификаторы для получения переводов
        Локализатор очень хорошая штука и хотелось ее опробовать, но как то не задалось переносить уже готовые данные со всего сайта в поля локализатора. Пришлось искать решения для вывода данных и при том с учетом того что же есть в основном контенте страниц.
Итак… модификаторы для вывода данных, пошагово:
1. создаем плагин...
2.1 модификатор для полей:
{1 | localfield:'pagtitle'} или {'pagetitle' | localfield} если на текущей странице
2.2 модификатор для тв-шек:
{1 | localtv:'tv_name'} или {'tv_name' | localtv} если на текущей странице
для вывода данных MIGx делаем следующее (забывая про getImageList):
Правки и дополнения принимайся с удовольствием ;)
    
    
                                                                                
            Итак… модификаторы для вывода данных, пошагово:
1. создаем плагин...
<?php
/** @var modX $modx */
switch ($modx->event->name) {
    case 'pdoToolsOnFenomInit':
        /** @var Fenom $fenom */
        $pdo = $modx->getService('pdoTools');
        // localfield
        $fenom->addModifier('localfield', function ($id, $field = null) use ($pdo, $modx) {
            
            if (!is_numeric($id)) {
                // не менять местами
                $field = $id;
                $id = $modx->resource->get('id');
            }
            
            $key =  $modx->getOption('cultureKey');
            $output = '';
            // получаем поле перевода
            if ($key != 'ru') {
                $value = $modx->getObject('localizatorContent', array(
                        'resource_id'=>$id,
                        'key'=>$key
                    ));
                if ($value !== null) {
                    $output = $value->get($field);
                }
            }
            // если перевода еще нет то берем из основного языка
            if (empty($output)) {
                $res = $modx->getObject('modResource', $id);
                $output = $res->get($field);
            }
            return $output;
        });
        // localtv
        $fenom->addModifier('localtv', function ($id, $field = null) use ($pdo, $modx) {
            
            if (!is_numeric($id)) {
                // не менять местами
                $field = $id;
                $id = $modx->resource->get('id');
            }
            
            $key =  $modx->getOption('cultureKey');
            $output = '';
            // получаем поле перевода
            if ($key != 'ru') {
                $tvObj = $modx->getObject('modTemplateVar',array('name' => $field));
                $tvId = $tvObj->get('id');
                
                $tv = $modx->getObject('locTemplateVarResource', array(
                        'contentid'=>$id,
                        'key'=>$key,
                        'tmplvarid'=>$tvId
                    ));
                if ($tv !== null) {
                    $output = $tv->get('value');
                }
            }
            // если перевода еще нет то берем из основного языка
            if (empty($output)) {
                $res = $modx->getObject('modResource', $id);
                $output = $res->getTVValue($field);
            }
            return $output;
        });
    break;
}и не забываем поставить галочку pdoToolsOnFenomInit в системных событиях2.1 модификатор для полей:
{1 | localfield:'pagtitle'} или {'pagetitle' | localfield} если на текущей странице
2.2 модификатор для тв-шек:
{1 | localtv:'tv_name'} или {'tv_name' | localtv} если на текущей странице
для вывода данных MIGx делаем следующее (забывая про getImageList):
{var $rows = json_decode('mix_tv' | localtv, true)}
{foreach $rows as $row}
    <p>{$row['name']} - и так построчно далее со своим html</p>
{/foreach}За идеи спасибо: Александру, Дмитрию и многим другим кто много вложил в общее дело =)Правки и дополнения принимайся с удовольствием ;)
Комментарии: 11
                Так там ведь из коробки есть
                    {55 | locfield : 'longtitle'}            
                к сожалению он работает только с полями заполненными в локализаторе.
в моем случае он отрабатывал не корректно + сайт уже наполнен контентом и переносить все из оригинала в локализатор как то не хотелось
                    в моем случае он отрабатывал не корректно + сайт уже наполнен контентом и переносить все из оригинала в локализатор как то не хотелось
                а, т.е. это решение, если контент уже есть и мы ставим localizator?            
                    
                можно и так            
                    
                4 закладки и 2 лайка. Всегда удивлялся, что с людьми не так, почему такие жадные на лайки? Типа «сохраню, буду юзать, но лайк не поставлю».            
                    
                о чем вы Павел?            
                    
                не теряйте радости, огорчения того не стоят ;)            
                    
                Здравствуйте. Подскажите пожалуйста, как прописать TV такого вида в where?
Сейчас отрабатывает в случае если добавлена локализация
                    Сейчас отрабатывает в случае если добавлена локализация
{'!ms2GalleryResources' | snippet : [
    'parents' => 12,
    'limit' => 0,
    'where' => [
         'sport' => $_modx->resource.id
    ],
    'sortby' => 'menuindex',
    'tpl' => '@FILE chunks/tpl/coach.tpl',
    'includeThumbs' => 'person',
    'tvPrefix' => '',
    'includeTVs' => 'sport,coach_category',
]}            
                никак :)
Потому как модификатор переводов предложений мной не для сортировки в сниппетах. Вывод перевода осуществляется в чанке [в вашем случае — chunks/tpl/coach.tpl].
Для сортировки в блоке where используйте обычную сортировку по тв.
                    Потому как модификатор переводов предложений мной не для сортировки в сниппетах. Вывод перевода осуществляется в чанке [в вашем случае — chunks/tpl/coach.tpl].
Для сортировки в блоке where используйте обычную сортировку по тв.
                Спасибо            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.