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.
Как видно из кода, появился отдельный класс PDOTools\Parser\Debug — и это именно то, о чём вы подумали — встроенный DebugParser. Я не буду его переписывать для 3й версии MODX, теперь он живёт в pdoTools. Работает ровно так же, как и раньше — просто авторизуйтесь в админку и добавьте ?debug=1 к адресу нужной страницы на сайте.
Убран параметр nestedChunkPrefix, который был придуман еще до интеграции Fenom. Старожилы могут помнить странные чанки, где внизу были закомментированные куски для хитрого парсинга — вот это было оно. Думаю, что этим давно уже никто не пользуется, так что нечего тащить в новую версию.
Все сниппеты и классы по умолчанию работают с новыми моделями MODX. То есть, не $modx->getObject('modResource');, а
Соответственно, в коде pdoTools переписано очень много всего и ошибки, наверняка, там сейчас есть. Ваша задача погонять сниппеты со своими выборками на тестовых сайтах и написать мне, где и когда что вылезает.
Так-то все сниппеты работают корректно с параметрами по умолчанию, но может что-то вылезти при подключении и сортировке по ТВ, например.
В связи с этим временно открываю issues на GitHub.
Новая версия pdoTools 3 уже на modstore.pro, а текущая alpha MODX 3 на modhost.pro
В связи с выходом альфа-версии 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
Комментарии: 25
Отличная работа!
Помню, на Минском митапе ты говорил, что minishop 3 только на MODX 3.
Есть в планах? Или не особо уже интересно тебе?
Помню, на Минском митапе ты говорил, что minishop 3 только на MODX 3.
Есть в планах? Или не особо уже интересно тебе?
Не уверен, что потяну разработку прям новой версии. Да и финансово это весьма затратно.
Но обновить текущий ms2 для MODX 3 вполне по силам.
Но обновить текущий ms2 для MODX 3 вполне по силам.
Так! За проезд передаем.
Прошу прощения, что цепляюсь к маленькой циферке, но вдруг из-за этого у кого-нибудь случится проблема…
Минимальная версия PHP теперь 7.0, как и у MODX. Наконец-то мне не нужно писать array(). Весь код переформатирован.Все же у MODX 3 минимальная версия PHP 7.1.
Ты в документацию не смотри, ты в composer.json смотри — там "php": ">=7.0",
Да и в документации чуть ниже таблички написано
Да и в документации чуть ниже таблички написано
MODX 3 requires at least PHP 7.0, but 7.2 or 7.3 is recommended.
Еще раз прошу прощения.
Вначале увидел конкретную версию на этой странице документации.
А встретив эти же цифры здесь в табличке, дальше читать не стал.
Вначале увидел конкретную версию на этой странице документации.
А встретив эти же цифры здесь в табличке, дальше читать не стал.
Ты в документацию не смотри, ты в composer.json смотри — там «php»: ">=7.0"Понял — не дурак — дурак бы не понял. Больше в документацию смотреть не буду ;-)
Визитку на 5 страниц уже можно делать? pdoMenu, pdoResources и pdoSitemap планируется.
Это шутка про pdoMenu, pdoResources и pdoSitemap??
Это шутка про pdoMenu, pdoResources и pdoSitemap??В каком месте проблема? На каждой странице есть по 4-6 однотипных блоков. Почему бы их не реализовать на ресурсах и не вывести через pdoResources?
Ты спрашиваешь про планируются ли эти снипетты перечисленные.
Они в ходят в комплект pdoTools!
Они в ходят в комплект pdoTools!
Ну мало ли. Может где-то недоделано. Всё же не так много времени прошло для такого кол-ва снипетов.
На alpha версии? Я бы делал только если это «свой» сайт, не как продукт за деньги.
Свой. На HTML. Уже неудобно ковырять, много кода. Собирался на Modx перенести, а тут 3 версия подоспела.
Тогда почему бы и нет)
Василий, спасибо тебе от лица всего сообщества!
Блин, как тебе на всё время хватает?
Ещё раз — спасибо!
Блин, как тебе на всё время хватает?
Ещё раз — спасибо!
Василий, спасибо тебе от лица всего сообщества!Согласен с каждым словом. Насчет времени так вообще, зимой садишься работать еще темно, закончил работать — уже темно. Выключил комп и лег спать…
Блин, как тебе на всё время хватает?
Ещё раз — спасибо!
А у Василия получается и свои дела делать и продолжать участвовать в жизни modx. Молодец.
Не смотря на мое скептическое отношение к modx 3 — огромный респект. Помимо того, что на новую версию переход случился, так еще и старая остается жизнеспособна. Учитывая то, что модкс 3 меня не интересует, мне было важно чтобы на двойку этот переход никак не сказался. Увы и ах, сказался.
That's awesome Vasily, thanks!
You are always welcome, my friend!
Fenom, как и прежде, ставится через локальный composer, общесистемный я не использую, потому что он будет затираться при обновлении движка. Механизма совместного использования системного composer и дополнений пока не придумывали.Это реальная дилемма. Каждый компонент идет со своим композером. Соответственно, централизованное обновление невозможно. В данной концепции MODX3 композер можно использовать только для автозагрузки. Ибо нет связи между Менеджером дополнений и композером. Это справедливо как для дополнений, так и для самого ядра.Механизмы установки MODX через setup и через композер разные. Соответственно ими нельзя пользоваться одновременно.
Ровно такая же ситуация и с дополнениями. Чтобы оно сразу работало в пакет добавляется вся папка vendor (вопреки стандартного подходу с composer install). Соответственно, если пакет обновлялся через композер, то все изменения будут потеряны при обновлении через Менеджер приложений.
В MODX 3 появилась простейшая реализация контейнера зависимостейВчера Джейсон добавил DI контейнер.
Пробую поставить 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
Вылетает ошибка при установке: «Невозможно установить пакет с подписью: 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
Что-то я не подумал, а может версия PL «хуже „альфа1“…
Бустрапинг классов заменили альфа2.
Приветствую. Ставлю на 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
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.