[pdoTools] 2.3.0 - Рефакторинг и стандарты

Привет, друзья! Хочу представить вам новую версию pdoTools с важными изменениями.

Первым делом, весь код теперь соответствует стандарту PSR-2. Как бы я не любил табы, стандарт есть стандарт и пора уже его применять.

Вторым делом, по многочисленным просьбам заграничных товарищей, pdoTools больше не устанавливает дополнительные файлы в директорию core/model/modx/.
Я постарался сделать так, чтобы это ничего не сломало, и вы могли запускать класс как и раньше:
$pdo = $modx-getService('pdoTools');
$pdo->setConfig(array('param' => 'value'));
// или
$pdo = new pdoTools($modx, array('param' => 'value'));
Просьбы обусловлены глюками при разворачивании образов сайтов с pdoTools через Teleport. В том числе, на MODXCloud.

В Fenom добавлена пара модификаторов «по умолчанию». Ничего нового они не привносят, просто сокращают писанину.

Первый — это lexicon, который теперь можно использовать вот так:
{'string' | lexicon}
// или
{'string' | lexicon : ['key' => 'value'] : 'ru'}
Модификатор принимает опциональный массив плейсхолдеров для замены и указание языка. Рабочий пример:
{$_modx->lexicon->load('en:core:default')}
{'action_err_nfs' | lexicon : ['id' => 25] : 'en'}
Грузим английский словарь (если нужно) и выводим из него запись.

Второй модификатор — url:
{10 | url}
// или
{10 | url : ['scheme' => 'full'] : ['param' => 'value']}
Он принимает id ресурса и 2 опциональных массива: настройки и параметры url. Мой пример на тестовом сайте генерирует такой адрес:
http://test23.dev/container/document?param=value

А раньше было так:
{$_modx->lexicon('action_err_nfs', ['id' => 25], 'en')}
// и
{$_modx->makeUrl(10, ['scheme' => 'full'], ['param' => 'value'])}

Следующие изменения касаются сниппетов.

В pdoSitemap изменён формат даты, теперь она выводится как ISO 8601.

А в pdoCrumbs, наконец-то, поменяны родные чанки, чтобы генерировать общепринятый список хлебных крошек в виде ul > li.
При установленном Bootstrap крошки теперь работают сразу из коробки.

Заключение


Как видите, новая версия pdoTools старается лучше соответствовать стандартам и привносит изменения, которые нужно было сделать уже давно.

При обновлении не забудьте проверять работоспособность своих сайтов и если будут проблемы — пишите. Наше сообщество, понятно, уже работает на новой версии без проблем.
Василий Наумкин
13 марта 2016, 10:44
modx.pro
2
4 588
+15

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

Павел Гвоздь
13 марта 2016, 15:21
+2
В Fenom добавлена пара модификаторов «по умолчанию». Ничего нового они не привносят, просто сокращают писанниу.
Этого давно не хватало! Я безмерно рад этой, вроде бы, мелочи! Спасибо!
    TITAN-UZ
    13 марта 2016, 19:23
    0
    Respect!

    За
    $row['date'] = date('c', $time);
    Особенно!

      TITAN-UZ
      13 марта 2016, 19:28
      0
      Заметка!
      Проверьте пожалуйста дату хостинга или VDS/VPS
      $row['date'] = date('c', $time);
      Выводит дату с timezone
      <lastmod>2016-01-02T23:36:21+05:00</lastmod>
      +05:00 это timezone Asia/Tashkent
        Павел Гвоздь
        13 марта 2016, 20:18
        0
        А как он должен выводить? Без таймзоны? Тогда это уже будет не ISO 8601… Вроде как…

        ru.wikipedia.org/wiki/ISO_8601#.D0.9F.D1.80.D0.B8.D0.BC.D0.B5.D1.80.D1.8B
          TITAN-UZ
          13 марта 2016, 21:00
          0
          до 2.2.8 PdoTools Sitemap не выводил таймзон.
          Заметка для пользователей а не PdoTools
            Павел Гвоздь
            13 марта 2016, 21:02
            +2
            Я бы сказал точнее… До pdoTools 2.3.0, pdoSitemap не выводил правильный формат даты для sitemap.xml.
              TITAN-UZ
              13 марта 2016, 21:03
              0
              Не успел исправит уже ответ написали :D
        Іван Клімчук
        13 марта 2016, 22:30
        +2
        Активно работаю последние 2 дня с modx сайтами, включая fenom (в повседневной жизни пишу на матером PHP немного другие проекты) и вот чего мне не хватает, так это модификаторов в fenom, которые дублируют встроенные MODX фильтры (особенно когда старый код переносишь на fenom). Можно писать сниппеты и тд, конечно, но это накладно и лениво. Если не сильно противорчечит парадигме, плюсую за это улучшение (надеюсь руки дойдут портировать самостоятельно в видео pull request).

        В остальном спасибо, работать сильно удобнее.
          Василий Наумкин
          14 марта 2016, 06:04
          1
          0
          Многое уже и так есть, только называется иначе. Если что, вот все модификаторы MODX, в которых добрая часть это if, else, then и прочее, что в Fenom называется тегами, а не модификаторами.

          Единственное, что я вижу действительно нужного, это userinfo. И то, правильнее на мой взгляд, выбирать данные юзера сразу через join таблиц, а не отдельными запросами после.

          Смотрите, чего не хватает, и шлите PR. В новой версии загрузка модификаторов не зря вынесена в отдельный метод.

            Aliaksandr Katlou
            14 марта 2016, 15:29
            0
            Вот бы замену :ellipsis=`` которая киоиллицу понимает добавить…
              Василий Наумкин
              14 марта 2016, 15:33
              +1
              Truncate не подходит?
                Aliaksandr Katlou
                14 марта 2016, 15:51
                +1
                Вот теперь сижу и думаю. КАК я мог его не заметить хотя 2 раза смотрел. Спасибо!
                  Aliaksandr Katlou
                  15 марта 2016, 14:04
                  0
                  Почему-то не работает. Другие, например upper/lower работают, truncate — нет(
                    Василий Наумкин
                    15 марта 2016, 15:40
                    0
                    {'Привет, как дела?' | truncate : 10}
                    Выводит
                    Привет, ка...

                    Что именно не работает?
                      Aliaksandr Katlou
                      15 марта 2016, 16:00
                      0
                      Перепроверил — работает, но на других сайтах, на том где больше всего нужно — нет) Буду разбираться, спасибо!

                      В логах там
                      PHP warning: json_decode() expects parameter 1 to be string, array given


                      Может с этим связано.
            Wassi Wassinen
            14 марта 2016, 01:20
            0
            [[!officeAuth? &tplLogout=`@INLINE
                {{!ms2form?
                    &tplCreate=`tpl.ms2form.create.journal`
                    &tplUpdate=`tpl.ms2form.update.journal`
                    &tplTagRow=`tpl.ms2form.tag.journal.row`
                    &allowedFields=`parent,pagetitle,content,published,template,hidemenu,site,email,date_field,textarea0,textarea1,textarea2,textarea3,textfield0,textfield1,made_in`
                    &requiredFields=`parent,pagetitle,content,published,template,site,email,textarea0,textarea1,textarea2,textarea3,textfield0,textfield1,made_in`
                    &parent=`419`
                    &tags=`0`
                    &newTags=`0`
                    &template=`20`
                    &editor=`quill`
                    &source=`6`
                    &redirectPublished=`new`
                }}
                ` 
            ...
            Василий, привет. После обновления этот вызов перестал работать. Как теперь правильно вызывать подобное?
              Михаил
              14 марта 2016, 05:51
              0
              Попроюуй не в INLINE вызывать снипет. А в отдельном чанке.
                Василий Наумкин
                14 марта 2016, 05:52
                +1
                Правильно подобное вообще не вызывать. Это какое-то злоупотребление @INLINE чанками.

                Ну а так — Office тоже нужно обновить.
                Юрий
                15 марта 2016, 10:48
                0
                После обновления pdoTools до версии 2.3.0, стали выползать ошибки:
                [2016-03-15 10:40:47] (ERROR @ /connectors/index.php) Unexpected token ':' in fcdd770d74671ddd20f42172bb6c1db3 line 1, near '{"w":' <- there
                Судя по всему ругается на настройки, источника файлов. Но они не менялись, стоят по умолчанию.
                На сайте 2 источника файлов: «MS2Gallery Images» и «MS2 Images», с настройками по умолчанию.
                Василий, с чем это может быть связано?
                  Василий Наумкин
                  15 марта 2016, 11:00
                  0
                  Поправил, обновись.
                    Юрий
                    15 марта 2016, 11:03
                    0
                    Спасибо, все работает
                    Наумов Алексей
                    15 марта 2016, 11:03
                    0
                    Вот блин, а я уже час ковыряюсь, думаю и где это я в компоненте косячу своем)))
                    Андрей
                    22 марта 2016, 21:06
                    0
                    Спасибо за обновы, вопрос по pdoResources + migx. Вопрос вот какой:
                    Есть TV типа MigX. В БД modx_site_tmplvar_contentvalues.value данные хранятся в таком формате строки
                    [{"MIGX_id":"1","number":"AAA"},{"MIGX_id":"2","number":"BBB"}]
                    Как их отфильтровать правильно? И можно ли их распарсить и отфильтровать?
                    Т.е. если делать обычную выборку
                    [[!pdoResources?
                    	&parents=`9`
                            &showHidden=`1`
                    	&includeTVList=`tvName`
                    	&showUnpublished=`1`
                    	&tpl=`pT`
                    	&processTVs=`1`
                    	&where=`{
                    	    "tvName:LIKE":"%\"number\":\"3\"%"
                    	}`
                    ]]
                    То все работает, но это как-то в лоб получается. Может есть способ какой-то выборки по migx tv?
                      Droug
                      23 марта 2016, 17:14
                      0
                      Лучше для такой выборки по возможности использовать не migx, а listbox-multiple (Список (множественный выбор).
                      А для фильтрации что то вроде
                      &where=`{"tvName:RLIKE":"(\\|?)3(\\|?)"}`
                        Андрей
                        23 марта 2016, 20:43
                        0
                        К сожалению, listbox-multiple не может полностью решить мою задачу и migx — вынужденная мера. Да и ваш where ничем не лучше моего. Чуть выше я указал структуру в качестве примера. На самом деле структура гораздо сложнее. Вопрос остается актуальным.
                          Droug
                          23 марта 2016, 21:12
                          0
                          Эм, ну pdoResources как бы не занимается фильтрацией результатов, он только формирует запрос к бд и оборачивает результаты выборки шаблоном. А в БД migx поля хранятся в виде JSON в одном поле, так что кроме LIKE и RLIKE фильтровать тут особо и нечем.

                          P.S.: Возможно, надо копать в сторону MIGXdb, там данные хранятся в отдельной таблице и вариантов фильтрации уже больше.
                      Droug
                      23 марта 2016, 12:35
                      0
                      Отличное обновление для фенома, еще бы можно было бы до $_modx->resource покороче достучаться, было бы просто супер)

                      Т.е. вместо {$_modx->resource.pagetitle} хочется иметь что-то вроде {$_pagetitle} или {$_res['pagetitle']}
                        Сергей
                        29 марта 2016, 09:46
                        0
                        Стоит отметить, что при обновлении старой версии pdoTools может поломаться верстка хлебных крошек на сайте + документация по чанкам pdoCrumbs устарела.
                          Василий Наумкин
                          29 марта 2016, 09:49
                          0
                          Стоит прочитать заметку:
                          А в pdoCrumbs, наконец-то, поменяны родные чанки, чтобы генерировать общепринятый список хлебных крошек в виде ul > li.

                          Документацию ты можешь обновить самостоятельно — просто пришли исправления через GitHub.
                            Сергей
                            29 марта 2016, 18:53
                            0
                            К сожалению, с гитхабом пока на Вы — все руки не доходят.
                          Владимир
                          01 апреля 2017, 10:28
                          0
                          Доброго дня! Если я ни чего не путаю, то лексиконы вызываемые феномом отвалились не знаю после какого обновления pdoTools. Вот не пойму, в контексте отличным от web или независимо от этого.
                          Вдруг у кого то есть такая же проблема?
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                            31