pdoTools 3

Привет, друзья!

В связи с выходом альфа-версии MODX 3, я выкроил время и переписал pdoTools — теперь он использует пространства имён и полностью совместим с новыми классами системы.

Соотвественно, работать он может исключительно в MODX 3, со старой версией никак не совместим. Какое-то время мне придётся поддерживать 2 ветки дополнений. Новый pdoTools, как и сам MODX, пока что в виде сырой alpha1, только для тестов.

А теперь подробности.

Изменения смотрим в репозитории, ветка 3.x.

Пропала директория model, а весь код теперь в src, которая соответствует MODX\Components\PDOTools. Я решил, что дополнения должны быть в этом namespace.

Fenom, как и прежде, ставится через локальный composer, общесистемный я не использую, потому что он будет затираться при обновлении движка. Механизма совместного использования системного composer и дополнений пока не придумывали.

Все исходные файлы разделены по директориям и пространствам имён, на мой взгляд стало удобнее. Например, работа с кэшем вынесена в PDOTools\Cache\Cache, а построение дерева из ресурсов в PDOTools\Helpers\Functions.

Минимальная версия PHP теперь 7.0, как и у MODX. Наконец-то мне не нужно писать array(). Весь код переформатирован.

pdoTools подключается в систему через свой плагин, больше никаких танцев с системными настройками и специальными именами классов. В MODX 3 появилась простейшая реализация контейнера зависимостей, поэтому я просто запихиваю в него всё нужное на событии OnMODXInit.
use MODX\Components\PDOTools\Core;
use MODX\Components\PDOTools\Fetch;
use MODX\Components\PDOTools\Parser\Parser;

switch ($modx->event->name) {
    case 'OnMODXInit':
        $core = new Core($modx);
        $core->debug->enabled = $modx->user->hasSessionContext('mgr') && !empty($_REQUEST['debug']);
        $fetch = new Fetch($modx);
    
        $modx->services->add('pdotools', $core);
        $modx->services->add('pdofetch', $fetch);
        $modx->services->add('parser', new Parser($modx, $core));
        $modx->parser = $modx->services->get('parser');
        break;
}
Плагин можно отключить, или включить свой с расширенными версиями классов — я постарался это учесть в сниппетах.

Как видно из кода, появился отдельный класс PDOTools\Parser\Debug — и это именно то, о чём вы подумали — встроенный DebugParser. Я не буду его переписывать для 3й версии MODX, теперь он живёт в pdoTools. Работает ровно так же, как и раньше — просто авторизуйтесь в админку и добавьте ?debug=1 к адресу нужной страницы на сайте.

Убран параметр nestedChunkPrefix, который был придуман еще до интеграции Fenom. Старожилы могут помнить странные чанки, где внизу были закомментированные куски для хитрого парсинга — вот это было оно. Думаю, что этим давно уже никто не пользуется, так что нечего тащить в новую версию.

Все сниппеты и классы по умолчанию работают с новыми моделями MODX. То есть, не $modx->getObject('modResource');, а
use MODX\Revolution\modResource;

$modx->getObject(modResource::class);
Если делать не так — то будет много ошибок в логе системы о deprecated классах.

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

Так-то все сниппеты работают корректно с параметрами по умолчанию, но может что-то вылезти при подключении и сортировке по ТВ, например.
В связи с этим временно открываю issues на GitHub.

Новая версия pdoTools 3 уже на modstore.pro, а текущая alpha MODX 3 на modhost.pro
Василий Наумкин
16 декабря 2019, 16:45
modx.pro
6
3 151
+47

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

Павел Бигель
16 декабря 2019, 17:16
+5
Отличная работа!
Помню, на Минском митапе ты говорил, что minishop 3 только на MODX 3.
Есть в планах? Или не особо уже интересно тебе?
    Василий Наумкин
    16 декабря 2019, 17:41
    +19
    Не уверен, что потяну разработку прям новой версии. Да и финансово это весьма затратно.

    Но обновить текущий ms2 для MODX 3 вполне по силам.
    Егор
    16 декабря 2019, 19:58
    +2
    Так! За проезд передаем.
      Александр Лунегов
      17 декабря 2019, 13:20
      0
      Прошу прощения, что цепляюсь к маленькой циферке, но вдруг из-за этого у кого-нибудь случится проблема…
      Минимальная версия PHP теперь 7.0, как и у MODX. Наконец-то мне не нужно писать array(). Весь код переформатирован.
      Все же у MODX 3 минимальная версия PHP 7.1.
        Василий Наумкин
        17 декабря 2019, 13:44
        +1
        Ты в документацию не смотри, ты в composer.json смотри — там "php": ">=7.0",

        Да и в документации чуть ниже таблички написано
        MODX 3 requires at least PHP 7.0, but 7.2 or 7.3 is recommended.
          Александр Лунегов
          17 декабря 2019, 14:07
          0
          Еще раз прошу прощения.
          Вначале увидел конкретную версию на этой странице документации.
          А встретив эти же цифры здесь в табличке, дальше читать не стал.
          Ты в документацию не смотри, ты в composer.json смотри — там «php»: ">=7.0"
          Понял — не дурак — дурак бы не понял. Больше в документацию смотреть не буду ;-)
        Alexander V
        17 декабря 2019, 15:54
        0
        Визитку на 5 страниц уже можно делать? pdoMenu, pdoResources и pdoSitemap планируется.
          Иван Бочкарев
          17 декабря 2019, 16:42
          +1
          Это шутка про pdoMenu, pdoResources и pdoSitemap??
            Alexander V
            17 декабря 2019, 16:47
            0
            Это шутка про pdoMenu, pdoResources и pdoSitemap??
            В каком месте проблема? На каждой странице есть по 4-6 однотипных блоков. Почему бы их не реализовать на ресурсах и не вывести через pdoResources?
              Иван Бочкарев
              17 декабря 2019, 16:54
              0
              Ты спрашиваешь про планируются ли эти снипетты перечисленные.
              Они в ходят в комплект pdoTools!
                Alexander V
                17 декабря 2019, 16:56
                0
                Ну мало ли. Может где-то недоделано. Всё же не так много времени прошло для такого кол-ва снипетов.
            Наумов Алексей
            17 декабря 2019, 16:42
            0
            На alpha версии? Я бы делал только если это «свой» сайт, не как продукт за деньги.
              Alexander V
              17 декабря 2019, 16:54
              0
              Свой. На HTML. Уже неудобно ковырять, много кода. Собирался на Modx перенести, а тут 3 версия подоспела.
          Alex
          17 декабря 2019, 20:10
          +4
          Василий, спасибо тебе от лица всего сообщества!
          Блин, как тебе на всё время хватает?

          Ещё раз — спасибо!
            Александр Мельник
            17 декабря 2019, 20:23
            +2
            Василий, спасибо тебе от лица всего сообщества!
            Блин, как тебе на всё время хватает?

            Ещё раз — спасибо!
            Согласен с каждым словом. Насчет времени так вообще, зимой садишься работать еще темно, закончил работать — уже темно. Выключил комп и лег спать…
            А у Василия получается и свои дела делать и продолжать участвовать в жизни modx. Молодец.
            iWatchYouFromAfar
            17 декабря 2019, 20:51
            +2
            Не смотря на мое скептическое отношение к modx 3 — огромный респект. Помимо того, что на новую версию переход случился, так еще и старая остается жизнеспособна. Учитывая то, что модкс 3 меня не интересует, мне было важно чтобы на двойку этот переход никак не сказался. Увы и ах, сказался.
              Gauke Pieter Sietzema
              18 декабря 2019, 11:26
              +4
              That's awesome Vasily, thanks!
              Сергей Шлоков
              20 декабря 2019, 07:13
              0
              Fenom, как и прежде, ставится через локальный composer, общесистемный я не использую, потому что он будет затираться при обновлении движка. Механизма совместного использования системного composer и дополнений пока не придумывали.
              Это реальная дилемма. Каждый компонент идет со своим композером. Соответственно, централизованное обновление невозможно. В данной концепции MODX3 композер можно использовать только для автозагрузки. Ибо нет связи между Менеджером дополнений и композером. Это справедливо как для дополнений, так и для самого ядра.Механизмы установки MODX через setup и через композер разные. Соответственно ими нельзя пользоваться одновременно.
              Ровно такая же ситуация и с дополнениями. Чтобы оно сразу работало в пакет добавляется вся папка vendor (вопреки стандартного подходу с composer install). Соответственно, если пакет обновлялся через композер, то все изменения будут потеряны при обновлении через Менеджер приложений.
                Сергей Шлоков
                20 декабря 2019, 07:24
                +1
                В MODX 3 появилась простейшая реализация контейнера зависимостей
                Вчера Джейсон добавил DI контейнер.
                  Дмитрий
                  23 апреля 2020, 18:17
                  0
                  Пробую поставить PDO tools на последнюю версию (3.0.0-pl) скачиваю через МодСторе, конечно же.
                  Вылетает ошибка при установке: «Невозможно установить пакет с подписью: pdotools-3.0.0-alpha1»

                  Как победить? На «альфе 1» пробовал ставить и использовать — все ОК.

                  Установка самого МОДХ3 чистая, нулевая

                  В консоле пишет:

                  Could not load class: MODX\Revolution\modNamespace from MODX\Revolution\.mysql.modx\revolution\modnamespace
                  Could not load vehicle!
                  Could not load class: MODX\Revolution\modCategory from MODX\Revolution\.mysql.modx\revolution\modcategory
                  Could not load vehicle!
                  Vehicle 512b90d7f9adb14e35e45a977b0003c3 in transport pdotools-3.0.0-alpha1 failed to install and indicated the process should be aborted.
                  Невозможно установить пакет с подписью: pdotools-3.0.0-alpha1
                    Дмитрий
                    23 апреля 2020, 18:34
                    0
                    Что-то я не подумал, а может версия PL «хуже „альфа1“…
                      Павел Бигель
                      23 апреля 2020, 21:25
                      0
                      Бустрапинг классов заменили альфа2.
                    Garnet
                    15 февраля 2023, 15:26
                    0
                    Приветствую. Ставлю на ModХ 3.0.3 — pdoTools 3.0.1-pl. Скачивается, но не хочет устанавливаться, зеленая кнопка «установить» не реагирует. В логах ничего не пишется. Консоль пишет:

                    Uncaught TypeError: Cannot read properties of undefined (reading 'license')
                    at MODx.grid.Package.processResult (package.grid.js?mv=303pl:321:26)
                    at MODx.grid.Package.success (package.grid.js?mv=303pl:309:22)
                    at Ext.data.Connection.handleResponse (ext-all.js:21:47767)
                    at f (ext-base.js:21:17840)
                    at m (ext-base.js:21:18302)
                    at ext-base.js:21:8604
                    processResult @ package.grid.js?mv=303pl:321
                    success @ package.grid.js?mv=303pl:309
                    handleResponse @ ext-all.js:21
                    f @ ext-base.js:21
                    m @ ext-base.js:21
                    (анонимная) @ ext-base.js:21
                    Объект setInterval (асинхронный)
                    n @ ext-base.js:21
                    i @ ext-base.js:21
                    request @ ext-base.js:21
                    request @ ext-all.js:21
                    install @ package.grid.js?mv=303pl:299
                    onClick @ package.grid.js?mv=303pl:279
                    A @ ext-all.js:21
                    Подскажите пожалуйста, в чем может быть проблема?
                      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                      25