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
1 057
+18
Поблагодарить автора Отправить деньги

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

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
            Бага нет, всё таки я заработался.

            Забыл добавить перевод родителю, отсюда и пустота.
            Виталий
            16 января 2019, 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
            или найдите в телеграм
      Александр Мельник
      05 февраля 2019, 13:39
      0
      Господа, а я установил Localizator и он выглядит совершенно не так, как указано в документации и тут.
      Никаких вкладок нет в окне редактирования локализации для ресурса.
      Выглядит вот так

      Устанавливал, подключив поставщика modstore.
        Артем
        05 февраля 2019, 13:56
        0
        TV параметров нет — нет и вкладок
          Александр Мельник
          05 февраля 2019, 14:03
          0
          ааа, Семен Семеныч…
          То есть эти вкладки — это названия категорий. И если в этих категориях есть созданные TV, то они отобразятся.
          Спасибо.
      Александр Мельник
      06 февраля 2019, 15:08
      0
      Господа, а как при помощи локализатора вывести список товаров минишопа с пагинацией?
      Ну то есть в чем сложность.
      Сниипет Localizator имеет параметр snippet куда можно передать имя сниппета.
      И если мы передадим туда msProducts то наверное все сработает.
      Но нам нужно передать туда pdoPage. А pdoPage по умолчанию если не указано другое, работает со сниппетом pdoResources. А нужно msProducts, но указать это никак невозможно?
      Или я торможу?

      Пока что все что приходит в голову, это сделать копию pdoPage, поправить в коде сниппет по умолчанию, но наверняка ведь умные люди уже придумали лучший способ?
      Спасибо.
      Александр Мельник
      06 февраля 2019, 16:09
      0
      Уважаемый автор компонента, просьба.
      Я так понимаю, что компонент перешел к другому разработчику и вы его значительно улучшили.
      Но при написании документации, Вы описали исключительно свои доработки, но потерялась информация о многом другом.
      К примеру локализатор имеет вкладку Словарь, где можно задавать слова и фразы для разных языков.
      Но нигде в документации не упоминается об этом, а так же о том, как их вывести на сайте, а в прошлой документации это было.
      Пришлось лезть на старый сайт свой и там в коде искать, что вывести их можно так —
      {'more'|lexicon}
      Как будет время, добавьте это пожалуйста в документацию на docs.modx.pro/komponentyi/localizator/
      Дмитрий
      07 февраля 2019, 18:01
      0
      Добрый день! Подскажите пожалуйста! есть дерево ресурсов. Стандартная версия сайта украинская. В каждом ресурсе во вкладке локализация я вношу значения для русской версии. Потом в шаблоне вывожу меню таки образом:
      [[!Localizator? 
            &snippet=`pdoMenu`
            &parents=`0` 
          ]]
      И на основной версии сайта оно не выводится а на русской выводится.
        Игорь
        07 февраля 2019, 18:22
        0
        У меня работает в таком варианте
        {'!pdoMenu' | snippet : [
        	'parents' => 0,
        	'context' => 'web'
        	'showLog' => 0,
        	'level' => 1,
        	'startId' => 0,
        	'firstClass'=> 0,
        	'lastClass'=> 0,
        	'leftJoin' => '{
        		"localizator" : {
        		"class" : "localizatorContent",
        		"alias" : "localizator",
        		"on" : "localizator.resource_id = modResource.id"
        		}
        	 }',
        	'select' => '{ "localizator" : "modResource.*, localizator.*, modResource.id" }',
        	'where' => '{ "localizator.key" : "' ~ ('localizator_key' | option) ~ '"}',
        	'outerClass'=> 'main-nav-menu',
        'tpl' => '@INLINE <li class="{$classes}"><a class="default" href="{$link}"><i class="icon others"></i>{$menutitle}</a></li>'
        ]}
          Дмитрий
          07 февраля 2019, 18:32
          0
          Ваш Вариант у меня работает так же. Отображаются только те ресурсы которые переведены в локализаторе. На основной версии не выводятся
        Артем
        07 февраля 2019, 18:39
        0
        В локализаторе нужно вносить как доп.языки, так и основной — в вашем случае украинский
          Игорь
          07 февраля 2019, 18:45
          0
          100% верное уточнение! Проверьте добавлена ли у вас в локализатор украинская версия и заполнено ли там поле «Заголовок меню»
            Дмитрий
            07 февраля 2019, 18:52
            0
            Полня. Думал что за основную оно берет основные ресурсы. Как быть тогда с импортом товаров через msImportExport если это магазин?
              Александр Мельник
              07 февраля 2019, 20:40
              0
              Дмитрий, простите) Но я уже полчаса сижу ломаю голову. Полня это что? Хуйня? Херня? Фигня? Полдня?
      Виталий
      11 февраля 2019, 10:12
      0
      Последняя обнова поломала сайт! Проблема в том, что теперь ссылки которые выдают TV параметры содержат ключ локализации. А теперь к сути, получается все TV параметры (которые картинки) получают адрес /en/assets/images и тд… что приводит к ошибке и тд!
        Артем
        11 февраля 2019, 10:18
        0
        для этого существуют правил для htaccess, которые нужны также как и при работе через babel
        RewriteRule ^(ru|en|de)/assets(.*)$ assets$2 [L,QSA]
          Виталий
          11 февраля 2019, 10:22
          0
          ну это все прекрасно, но это не будет работать с тем же phpThumbOn, думаю почему объяснять не стоит… я конечно написал фикс сниппет, но это костыль получается…
            Артем
            11 февраля 2019, 10:26
            0
            В само значение tv параметра en/ не пишется. Только что сам проверил.
            Соответственно и phpthumbon должен работать, т.к. берется путь без en.
            Можете скинуть доступы, посмотрю что у вас
              Виталий
              11 февраля 2019, 10:37
              0
              Подозреваю проблема в том, что на вывод попадают относительные урлы…
              Адрес сайта: site.ru/en Ссылка: assets/images/
              На выходе site.ru/en/assets/images/
                Артем
                11 февраля 2019, 10:40
                0
                выше я привел правило htaccess, которое решает эту проблему
      Добрый день!
      А как компонент работает с ClientConfig?
        Артем
        9 часов назад
        0
        как настроите — так и будет работать
          Илья Александрович
          5 часов назад
          0
          хммм…
          например в данный момент я сделал так:
          [[++address_[[++localizator_key]]]]
          в клиент конфиге имеется переменная address_ru и address_en
          не уверен что это правильно решение. может ещё есть варианты? лучше через Fenom.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.