Localizator - поддержка TV параметров

1. Изменены окна редактирования локализаций, добавлена возможность редактирования TV-параметров

Для вывода на редактирование определенных TV-параметров добавлена настройка локализатора localizator_tv_fields

2. Сделан сниппет Localizator
{'Localizator' | snippet : [
    'snippet' => 'pdoMenu',
    'includeTVs' => 'img',
    'processTVs' => 'img',
    'parents' => 0,
    'level' => 1,
]}
TV-параметры будут заменяться на параметры из локализации.
Для этого нужно изменить настройку pdoFetch.class на pdotools.pdofetchlocalizator


Компонент по прежнему бесплатный и доступен на modstore.pro

Исходники на https://github.com/but1head/localizator

Отправить спасибо можете на Яндекс-кошелек 410015133943061
Артем
23 октября 2018, 18:51
12
739
+18

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

Aleksandr Huz
23 октября 2018, 19:15
0
Вот это работа! Очень круто!
Hiddenski
23 октября 2018, 20:35
0
На первом скриншоте: что это за вкладки с «добавить элемент»?
    Артем
    23 октября 2018, 20:39
    +2
    Это TV-параметр migx.
    Стрелками отмечены категории, доп.параметры распределены по категориям — вкладкам, как и при редактировании самого ресурса.
      Hiddenski
      23 октября 2018, 20:47
      0
      Получается можно использовать не просто TV, а сразу MIGX?

      Извините за немного глупые вопросы :)
        Артем
        23 октября 2018, 20:49
        0
        Да, можно)
      Hiddenski
      24 октября 2018, 15:14
      0
      Поля доступны только для редактирования но не автоперевода?
        Артем
        24 октября 2018, 15:20
        0
        укажи в настройке localizator_translate_fields tv параметры без префикса
        должно перевести, если это не migx
        для перевода migx допилить еще надо
          Hiddenski
          24 октября 2018, 15:24
          0
          В том то и дело — MIGX :/

          Сколько возьмете за допил? Штука must have, очень круто дополнила localizator. Буквально автоперевода для MIGX не хватает.
            Артем
            24 октября 2018, 15:27
            0
            На рабочем проекте возможно допилю
              Hiddenski
              24 октября 2018, 15:31
              0
              Как будете выкладывать решение, прикрепите к посту кошелек для «спасибо/на кофе»
                Артем
                01 ноября 2018, 15:12
                0
                Сделал PR на реп Локализатора, Никита думаю скоро выложит новую версию на модстор.
                Либо пока что можете скачать из моего репозитория.
                Баг поправил. Для перевода тв параметров (в том числе и migx) -их нужно также внести в системную настройку.
                  Антон
                  01 декабря 2018, 19:41
                  0
                  А та версия, которая сейчас в модсторе уже поддерживает перевод migx?
                  И если нет, то как обновить то, что сейчас установлено на сайте на версию из репозитория?
                    Артем
                    01 декабря 2018, 21:46
                    0
                    На модсторе актуальная версия. В системных настройках нужно указать поля для перевода.
                      Антон
                      02 декабря 2018, 00:05
                      0
                      Всё равно не переводит. Там, вроде, написано, что можно пустую строку оставить, тогда переведёт все, но хоть пустая, хоть с указанием полей — никакой разницы, при нажатии на автоперевод переводится только пейджтайтл и контент, а тв — нет.
    Рамис Хамидуллин
    24 октября 2018, 00:25
    0
    Отлично. Теперь можно работать с migx без костылей!
    Hiddenski
    29 октября 2018, 07:51
    0
    Обнаружил 2 бага.
    1. Через раз срабатывает визуальный редактор во вкладках (Firefox точно)
    2. При выводе pdoCrumbs не показывает родителя. Только Главная и Текущая страница
      Артем
      29 октября 2018, 10:10
      0
      1. какой редактор используете?
      2. а родительские переведены? у меня нормально выводится
        Hiddenski
        29 октября 2018, 10:17
        0
        1. TinyMCE Rich Text Editor (название пакета)
        2. Да. Причем в одном месте всё ок, в другом нет. На днях попробую повторить баг пошагово, или отпишусь в чем было дело.
          Артем
          29 октября 2018, 11:47
          +2
          по первому пункту нашел ошибку
          также автоперевод migx допилил
          позже выложу
            MrKarandash
            30 октября 2018, 20:10
            0
            del
            Hiddenski
            31 октября 2018, 20:26
            0
            Бага нет, всё таки я заработался.

            Забыл добавить перевод родителю, отсюда и пустота.
            Виталий
            Вчера в 17:48
            0
            В чем ошибка была? Аналогичная проблема Визуальный редактор TinyMCE Rich Text Editor грузиться через, стоит актуальная последняя версия.

            А также никак не могу понять, как можно удалять записи из словаря? На данный момент можно только добавить запись и все…
    MrKarandash
    30 октября 2018, 20:03
    0
    Все очень круто! Но возник вопрос, почему не брать поля для перевода из вкладки Документ? Или есть какие то трудности с такой реализацией?

    Кстати, так же если изменить текст в полях главной локализации и нажать на Автоматический перевод, то в тех локах, которые являются сторонними переводами, ничего не меняется. То есть по нажатии на кнопку они не обновляются. Нужно сперва удалять их после этого нажимать. Это так задумано или баг?
      Артем
      30 октября 2018, 20:10
      +1
      Не понял про поля из вкладки документ.
      Ещё в первой версии нужно было указать в системных настройках какие поля переводить.
      По второму вопросу — также, в системных настройках есть параметр, переводить уже переведенные языки.
        MrKarandash
        30 октября 2018, 20:13
        0
        Ну вот у меня основная версия — русская и я заполнял поля стандартные при редактировании ресурса на вкладке Докумен. А, как я понял, для работы дополнения нужно заполнять русскую локаль во вкладке Локализация, которая и будет потом переводиться на все остальные языки
          Артем
          30 октября 2018, 20:15
          +1
          Если указать язык по умолчанию, то при сохранении нового ресурса создаётся запись в локализаторе. Но это только для новых ресурсов.
    Андрей Розум
    01 ноября 2018, 15:38
    0
    Есть вывод новостей:
    [[!pdoPage? 
      &parents=`29` 
      &limit=`6` 
      &depth=`0` 
      &tpl=`News.main.ru` 
    ]]
    [[!+page.nav]]
    в tpl выводятся [[+longtitle]] и [[+introtext]], но они подхватываются из свойств документа. Каким должен быть вызов, чтобы они были из локализатора?
      Артем
      01 ноября 2018, 16:18
      0
      обновите модуль
      [[!Localizator? 
        &snippet=`pdoPage`
        &parents=`29` 
        &limit=`6` 
        &depth=`0` 
        &tpl=`News.main.ru` 
      ]]
      [[!+page.nav]]
        Андрей Розум
        01 ноября 2018, 16:58
        0
        Обновил, но вызов в таком виде ничего не выводит.
        И среди сниппетов не вижу чтобы появился сниппет Localizator.
          Андрей Розум
          01 ноября 2018, 17:05
          0
          Похоже что после обновления модуля у меня в локализаторе вообще пропал блок «содержимое», а вызов шел из него. Сейчас попробую переустановить модуль.
            Андрей Розум
            01 ноября 2018, 17:10
            0

            Вот так теперь выглядит.
              Артем
              01 ноября 2018, 18:06
              0
              Отправьте доступы на почту
              nizart91@mail.ru
                Андрей Розум
                01 ноября 2018, 20:55
                0
                Сайт не мой, владелец слегка параноик, без его согласия не могу. ((

                С содержимым сам разобрался. На сайте не было визуального редактора. Поставил TinyMCE, содержимое в локализаторе появилось.

                Но вот вызов сниппета !Localizator все равно не отрабатывает. Сейчас попробую на другом сайте.
      Артем
      01 ноября 2018, 22:45
      0
      немного по-другому
      [[!pdoPage?
      &element=`Localizator`
      &parents=`1` 
      &limit=`2` 
      &depth=`1` 
      &tpl=`News.main.ru`  ]] 
      [[!+page.nav]]
        Андрей Розум
        02 ноября 2018, 11:28
        0
        Спасибо!
        В таком виде и после того как скопировал сниппет Localizator все заработало.
    Hiddenski
    05 ноября 2018, 00:31
    0
    Поставил 1.0.2-beta1 из modstore.

    При установке почему-то обязательно тянется MIGX
      Артем
      05 ноября 2018, 07:24
      0
      Да, я за основу брал migx. Нужен как раз для рендеринга редактора текста. Зачем копировать тоже самое, если можно просто его установить)
        Hiddenski
        06 ноября 2018, 14:56
        0
        То ли я дурак, то ли лыжи не едут. MIGX-поля не переводятся.

        И поля отключал, и настройки форм, и переустановку локализатора делал. Можете помочь?
          Артем
          06 ноября 2018, 14:58
          0
          напишите доступ на nizart91@mail.ru
    MrKarandash
    13 ноября 2018, 16:44
    0
    Прикрутил MIGX к документу, добавил в настройках локализатора это поле. При нажатии поляи из MIGX успешно переводятся. А вот как вывести их в документе?

    [[!Localizator? 
        &snippet=`getImageList`
        &tvname=`blocks`
    	&tpl=`blocks_tpl`
    	&docid=`[[*id]]`
    	&limit=`999`
    ]]
    отдает 500 ошибку
      MrKarandash
      13 ноября 2018, 18:14
      0
      Вообще я так понял какая то неполадка с 1.0.2
      Следующий код из примера тоже не работает и крашит все после себя
      {'!Localizator' | snippet : [
              'snippet' => 'pdoMenu',
              'parents' => 0,
              'includeTVs'     => 'img',
              'processTVs' => 'img',
              'parents' => 0,
              'level' => 1,
      ]}
      Так же ошибка в консоли
      [2018-11-13 18:00:46] (ERROR @ /public_html/core/xpdo/om/xpdoquery.class.php : 764) Encountered empty IN condition with key contentid
      [2018-11-13 18:00:46] (ERROR @ /public_html/core/xpdo/xpdo.class.php : 988) xPDO->removeCollection - Error deleting modTemplateVarResource instances using query DELETE FROM `modx_site_tmplvar_contentvalues` WHERE `modx_site_tmplvar_contentvalues`.`contentid` IN () 
      [2018-11-13 18:15:33] (ERROR @ /public_html/core/xpdo/xpdo.class.php : 644) Could not load class: pdofetchlocalizator from pdotools.pdofetchlocalizator.
      [2018-11-13 18:15:37] (ERROR @ /public_html/core/xpdo/xpdo.class.php : 644) Could not load class: pdofetchlocalizator from pdotools.pdofetchlocalizator.
      [2018-11-13 18:15:37] (ERROR @ /public_html/core/xpdo/xpdo.class.php : 644) Could not load class: pdofetchlocalizator from pdotools.pdofetchlocalizator.
      [2018-11-13 18:15:37] (ERROR @ /public_html/core/xpdo/xpdo.class.php : 644) Could not load class: pdofetchlocalizator from pdotools.pdofetchlocalizator.
      [2018-11-13 18:15:38] (ERROR @ /public_html/core/xpdo/xpdo.class.php : 644) Could not load class: pdofetchlocalizator from pdotools.pdofetchlocalizator.
      [2018-11-13 18:15:38] (ERROR @ /public_html/core/xpdo/xpdo.class.php : 644) Could not load class: pdofetchlocalizator from pdotools.pdofetchlocalizator.
      [2018-11-13 18:15:38] (ERROR @ /public_html/core/xpdo/xpdo.class.php : 644) Could not load class: pdofetchlocalizator from pdotools.pdofetchlocalizator.
      [2018-11-13 18:15:38] (ERROR @ /public_html/core/xpdo/xpdo.class.php : 644) Could not load class: pdofetchlocalizator from pdotools.pdofetchlocalizator.
        Артем
        13 ноября 2018, 21:00
        +1
        обновите компонент, нашел там ошибки и поправил
      Артем
      13 ноября 2018, 21:03
      +1
      вроде так должно работать, но не тестил
      {'getImageList' | snippet : [
          'input' => $_modx->resource.blocks
      ]}
        MrKarandash
        14 ноября 2018, 12:09
        0
        За оперативное исправление спасибо!
        Теперь получается вот как, конструкция вида
        $_modx->resource.blocks
        выводит JSON в зависимости от переключения языка правильно, но как это скормить getImageList не понятно, потому что
        {'getImageList' | snippet : [
            'input' => $_modx->resource.blocks
        ]}

        ничего не выводит. Буду пробовать разоборать массив через феном, если что то удасться — выложу решение
          Артем
          14 ноября 2018, 12:18
          +1
          попробуйте не input, а value
            MrKarandash
            14 ноября 2018, 12:23
            0
            О, так сработало, Большое спасибо )
            Антон
            01 декабря 2018, 17:00
            0
            Добрый день. С value работает, но такая штука, если в мигх есть изображение с нестандартным источником файлов, то отдаётся только относительный путь, без базового пути источника. Это как-то можно поправить, или только в чанках оформления самому префиксы писать для картинок?
            A ещё, если надо отобразить твшку другого ресурса (dockid=`1`), то такая конструкция не прокатит. Как быть в таком случае?
    Eiry
    05 декабря 2018, 19:52
    0
    C pdoField этот компонент работает?
    Вызываю так:
    {$_modx->runSnippet('!Localizator',[
        'parents'=>0,
        'snippet'=>'pdoField',
        'id'=>'1',
        'field'=>'sometv'
    ])}
    а выводится только обычная твшка, а не локализованная. С pdoMenu всё работает как надо, да и вообще всё с остальным работает правильно.
      Артем
      06 декабря 2018, 15:06
      0
      pdoField работает немного по другому
      можно сделать так
      {'pdoResources' | snippet : [
          'tpl' => '@INLINE {$value}',
          'class' => 'locTemplateVarResource',
          'sortby' => 'id',
          'limit' => 1,
          'where' => [
              'key' => ('localizator_key' | option),
              'tmplvarid' => 1,
              'contentid' => 2,
          ],
      ]}
        Eiry
        06 декабря 2018, 15:22
        0
        Спасибо! Как раз думал, что можно и через pdoResources сделать.
        tmplvarid — это id твшки в БД, а contentid — это что? У меня он пока для всех твшек и всех языков равен 1.
          Артем
          06 декабря 2018, 15:23
          0
          id ресурса
    Rootiys
    16 декабря 2018, 18:24
    0
    Tv через Fenom не выводятся?
    {1 | resource : 'address'}
      Артем
      16 декабря 2018, 20:42
      0
      выше ведь есть комментарий как tv выводить
        Rootiys
        16 декабря 2018, 20:45
        0
        Через pdoField видел как.
        Интересует именно такая конструкция.
    Vladislav
    28 декабря 2018, 12:05
    0
    Будьте добры, подскажите, как вывести tv-поле через Localizator, используя pdoPage?
    В данной Fenom-конструкции заданные tv-поля через вкладку Локализация — игнорируются.
    Для более быстрого восприятия: tv-поля имеют названия sortDate и moreButtonText.
    Исходный код вызова сниппета:
    {'!Localizator' | snippet : [
        'snippet' => 'pdoPage',
        'ajaxMode' => 'default',
        'tpl' => '@INLINE
                        <div class=" col-md-6 col-lg-3">
                    <div class="card-wrapper ">
                        <div class="card-img">
                            <div class="mbr-overlay"></div>
                            <div class="mbr-section-btn text-center"><a href="{$uri}" class="btn btn-primary display-4">[[+moreButtonText]]</a></div>
                            <img class="media-object" src="{$img | phpthumbon : "w=246&h=184&zc=1"}" alt="{$pagetitle}">                
                        </div>
                        <div class="card-box">
                            <h4 class="card-title mbr-fonts-style display-7">
                                {$pagetitle}
                            </h4>
                            <p class="mbr-text mbr-fonts-style align-left display-7">
                                [[+sortDate:date=`%d.%m.%y`]]</p>
                        </div>
                    </div>
            </div> 
        ',
        'limit' => 4,
        'includeTVs' => 'img, sortDate, moreButtonText',
        'prepareTVs' => 1,
        'processTVs' => 'img, sortDate, moreButtonText',
        'tvPrefix' => '',
        'includeContent' => 0,
        
        'tplPageWrapper' => '@INLINE <div class="pagination"><ul class="pagination pagination-lg">{$prev}{$pages}{$next}</ul></div>',
        'tplPage' => '@INLINE <li><a href="{$href}">{$pageNo}</a></li>',
        'tplPageActive' => '@INLINE <li class="active"><a href="{$href}">{$pageNo}</a></li>',
        'tplPagePrev' => '@INLINE <li rel="prev"><a href="{$href}">« Назад</a></li>',
        'tplPageNext' => '@INLINE <li rel="next"><a href="{$href}">Дальше »</a></li>',
        'tplPagePrevEmpty' => '@INLINE ',
        'tplPageNextEmpty' => '@INLINE ',
        'ajaxElemWrapper' => '#child_list',
        'ajaxElemRows' => '#child_list .rows',
        'ajaxElemPagination' => '#child_list .pagination',
        'ajaxElemLink' => '#child_list .pagination a',
        'parents' => '15',
        'sortdir' => 'desc'
      ]}

    Несмотря на возможно некорректное использование конструкций вида [[+placeholder]] для вызова tv-полей, это работает – для случая задания параметров традиционным способом, заложенным в MODx.
    Перевод для pagetitle здесь применяется успешно.
    Собственно, требуется заменить текст на кнопке на соответствующий перевод в зависимости от выбранного языка отображения сайта.
      Артем
      28 декабря 2018, 12:24
      0
      Документация
      есть пример для pdoPage
        Vladislav
        28 декабря 2018, 12:41
        0
        И такое пробовал, даже ещё раз. Нужно найти, где собака зарыта. Почему же название нормально выводится, a tv-поля — нет?
        В системных настройках localizator_tv_fields ="". Согласно описанию, если нужны все tv-поля для редактирования, то нужно оставить пустым. Установлено, что так и есть — все tv-поля доступы во вкладке Локализация.
        Даже решил попробовать добавить tv-поле для автоперевода в строку localizator_translate_fields. Ничего не меняется.
          Артем
          28 декабря 2018, 12:48
          0
          отправьте доступ на nizart91@mail.ru
          или найдите в телеграм