pdoTools3 для MODX3
Друзья!
Как вы все знаете (или почти все), @Mark Hamstra взял быка за рога и своим решением утвердил график выхода MODX3:
Теперь по теме. Многие говорили, что для тестирования MODX3 им нужен адаптированный pdoTools, так как они ведут разработку исключительно с ним. Пару дней я назад выпустил новую версию этой библиотеки, предназначенную только для MODX3.
Список изменений получился такой
Следующий важный момент — теперь все логи сниппетов будут писаться исключительно в плейсхолдер, а не в конец данных сниппета.
Как нетрудно догадаться, название плейсхолдера образуется из название сниппета и суффикса Log.
В следующем пункте говорится о системной настройке «pdotools_filter_path». Она необходима для фильтрации путей файловых элементов, т.е. вырезает конструкцию "../". Эта конструкция дает большую гибкость при работе с файловыми элементами, но если что, позволяет админу держать под контролем свободу контент-менеджеров гулять по всему сайту.
Раз уж заговорили про файловые элементы, то хочу отметить, что теперь можно указывать любой путь в настройке «elements_path». Даже за пределами сайта (тут надо будет ещё помозговать). Раньше к файлу всегда добавлялся базовый путь сайта. Также можно указывать относительный путь к файловым элементам (относительно базового пути сайта) — "./elements/" => «путь/к/корню/сайта/elements».
Ещё поправлены ссылки в skip/empty шаблонах. Тег «a» заменён на «span». Это доработка Jako.
Убран параметр nestedChunkPrefix, так как с внедрением Fenom в этих конструкциях нет никакого смысла. Их давным-давно придумал Василий для большей гибкости, ибо стандартный шаблонизатор ограничен в возможностях. По-моему, в Tickets ещё можно найти чанки с такими плейсхолдерами.
По пунктам с системными настройками — они удалены за ненадобностью. Так как теперь автозагрузкой управляет композер, то нет нужды указывать пути к классам.
Ну и в конце говорится, что удалены задеприкейченные в прошлой версии возможности, позволяющие контент-менеджерам менять системные настройки и указывать любые пути прямо на странице сайта.
Я старался максимально внимательно проверить базовую функциональность. Но понятно, что всё-всё проверить невозможно. Поэтому нужна ваша помощь в этом. Особенно желательно, чтобы при тестировании использовались максимально близкие фичи с рабочих проектов.
Пакет уже есть на modstore.pro. Пока MODX3 можно тестировать только на локалке, но @Илья Уткин обещал в ближайшее время сделать доступной такую возможность и на modhost.pro на тестовом тарифе.
Как вы все знаете (или почти все), @Mark Hamstra взял быка за рога и своим решением утвердил график выхода MODX3:
- 3.0.0-alpha3 – 27 октября
- 3.0.0-beta1 – 8 ноября
- 3.0.0-beta2 – 22 ноября
- 3.0.0-rc1 – 6 января 2022
- 3.0.0-rc2 – 17 января
- 3.0.0-pl – 31 января
Теперь по теме. Многие говорили, что для тестирования MODX3 им нужен адаптированный pdoTools, так как они ведут разработку исключительно с ним. Пару дней я назад выпустил новую версию этой библиотеки, предназначенную только для MODX3.
Список изменений получился такой
- Requires MODX 3.
- Requires PHP 7.2+.
- Refactored to use PSR-4 autoload.
- pdoTools snippet logs are stored now in the corresponding placeholder (#316).
- Added system setting «pdotools_filter_path».
- Removed anchor links in skip/empty templates (#303).
- Removed «nestedChunkPrefix» parameter.
- Removed the system settings «pdoTools.class», «pdotools_class_path», «pdoFetch.class» and «pdofetch_class_path».
- Removed the «setOption» Fenom modifier.
- Removed the snippet parameters «tplPath» and «elementsPath».
$modx->services->get('pdotools');
Также теперь для работы pdoTools требуется PHP версия не ниже 7.2. А классы имеют неймспейсы и загружаются по стандартам PSR-4. Базовое пространство имён — ModxPro\PdoTools.Следующий важный момент — теперь все логи сниппетов будут писаться исключительно в плейсхолдер, а не в конец данных сниппета.
{'!pdoResources' | snippet : [
...,
'showLog' => true,
]}
{'pdoResourcesLog' | placeholder}
Таким образом, не будет проблем в режиме, когда сниппет должен вернуть массив. Плюс плейсхолдер можно разместить в любом месте. Отсюда есть мысль про дебаг панель, чтобы можно было собирать эти данные в одном месте. Но это вопрос будущего. Как нетрудно догадаться, название плейсхолдера образуется из название сниппета и суффикса Log.
В следующем пункте говорится о системной настройке «pdotools_filter_path». Она необходима для фильтрации путей файловых элементов, т.е. вырезает конструкцию "../". Эта конструкция дает большую гибкость при работе с файловыми элементами, но если что, позволяет админу держать под контролем свободу контент-менеджеров гулять по всему сайту.
Раз уж заговорили про файловые элементы, то хочу отметить, что теперь можно указывать любой путь в настройке «elements_path». Даже за пределами сайта (тут надо будет ещё помозговать). Раньше к файлу всегда добавлялся базовый путь сайта. Также можно указывать относительный путь к файловым элементам (относительно базового пути сайта) — "./elements/" => «путь/к/корню/сайта/elements».
Ещё поправлены ссылки в skip/empty шаблонах. Тег «a» заменён на «span». Это доработка Jako.
Убран параметр nestedChunkPrefix, так как с внедрением Fenom в этих конструкциях нет никакого смысла. Их давным-давно придумал Василий для большей гибкости, ибо стандартный шаблонизатор ограничен в возможностях. По-моему, в Tickets ещё можно найти чанки с такими плейсхолдерами.
По пунктам с системными настройками — они удалены за ненадобностью. Так как теперь автозагрузкой управляет композер, то нет нужды указывать пути к классам.
Ну и в конце говорится, что удалены задеприкейченные в прошлой версии возможности, позволяющие контент-менеджерам менять системные настройки и указывать любые пути прямо на странице сайта.
Я старался максимально внимательно проверить базовую функциональность. Но понятно, что всё-всё проверить невозможно. Поэтому нужна ваша помощь в этом. Особенно желательно, чтобы при тестировании использовались максимально близкие фичи с рабочих проектов.
Пакет уже есть на modstore.pro. Пока MODX3 можно тестировать только на локалке, но @Илья Уткин обещал в ближайшее время сделать доступной такую возможность и на modhost.pro на тестовом тарифе.
Поблагодарить автора
Отправить деньги
Комментарии: 24
Отличная работа!
Поставил для теста, вроде работает)))
Поставил для теста, вроде работает)))
Что-то не так…
При очистке кеша вижу в консоли:
Ошибка в плагине pdoTools (id = 1):
При очистке кеша вижу в консоли:
Консоль запущена…и все…
PHP notice: Undefined property: MODX\Revolution\modX::$service
Ошибка в плагине pdoTools (id = 1):
PHP notice: Undefined property: MODX\Revolution\modX::$service
Fatal error: Uncaught Error: Call to a member function get() on null in /var/www/modx3beta2/www/core/cache/includes/elements/modx/revolution/modplugin/1.include.cache.php:7
Stack trace:
#0 /var/www/modx3beta2/www/core/src/Revolution/modScript.php(88): include()
#1 /var/www/modx3beta2/www/core/src/Revolution/modX.php(1706): MODX\Revolution\modScript->process()
#2 /var/www/modx3beta2/www/core/src/Revolution/Processors/System/ClearCache.php(48): MODX\Revolution\modX->invokeEvent()
#3 /var/www/modx3beta2/www/core/src/Revolution/Processors/Processor.php(189): MODX\Revolution\Processors\System\ClearCache->process()
#4 /var/www/modx3beta2/www/core/src/Revolution/modX.php(1771): MODX\Revolution\Processors\Processor->run()
#5 /var/www/modx3beta2/www/_easyComm/_build/build.transport.php(394): MODX\Revolution\modX->runProcessor()
#6 {main}
thrown in /var/www/modx3beta2/www/core/cache/includes/elements/modx/revolution/modplugin/1.include.cache.php on line 7
Поправил. Спасибо!
Банальная опечатка. Вместо $modx->services написал $modx->service.
Банальная опечатка. Вместо $modx->services написал $modx->service.
Предлагаю скинуться по рублю данному товарищу так как без его работы MODX 3 в принципе мог бы и не выходить
Хорошая идея. Скинул на кружку провинциального, но вкусного кофе.
Благодарю!
Спасибо за добрые слова! Но ради справедливости хочу сказать, что в нашем RU-сообществе контрибьютеров MODX есть люди, вклад которых не меньше (а то и больше) значителен. Ведь важно не только писать код. Важно всё. И умение организовать и мотивировать других. И поправить лексиконы или CSS класс. И даже просто подсказать правильный инструмент для работы.
Немного пафосно прозвучало, да? %)
Немного пафосно прозвучало, да? %)
Норм прозвучало. Молодцы все!
Стыдно признаться, но не доходили руки тестить, потому что без pdoTools настоящий никакой проект не поднять, а голую установку MODX 3 тестить как-то грустно)
И как раз выходные впереди… кажется, настало время!
Спасибо за обновки
Стыдно признаться, но не доходили руки тестить, потому что без pdoTools настоящий никакой проект не поднять, а голую установку MODX 3 тестить как-то грустно)
И как раз выходные впереди… кажется, настало время!
Спасибо за обновки
Сергей, спасибо за энтузиазм и развитие!
Благодарю!
Спасибо.
Отправил.
Отправил.
Данке шон!
@Сергей Шлоков, прежде всего, хочется сказать, что вы и другие разработчики — молодцы.
Небольшое пожелание.
Если есть такая возможность — сделайте вариативным плейсхолдер для лога. На многих проектах на одной странице может быть, например, несколько pdoMenu. Как я понимаю, в таком варианте все логи сольются в единую портянку и это будет крайне не удобно. Добавьте возможность указать имя плейсхолдера, в который будем выгружать лог.
Заранее благодарен.
Небольшое пожелание.
Если есть такая возможность — сделайте вариативным плейсхолдер для лога. На многих проектах на одной странице может быть, например, несколько pdoMenu. Как я понимаю, в таком варианте все логи сольются в единую портянку и это будет крайне не удобно. Добавьте возможность указать имя плейсхолдера, в который будем выгружать лог.
Заранее благодарен.
Это сделать абсолютно не сложно. Добавлю в следующей версии. Просто интересно, зачем дебажить сразу 2 вызова одного и того же сниппета?
Сергей, спасибо за ответ.
Самая главная беда — мы видим ошибки в общем логе MODx, но не знаем на какой странице сайта они вылезли. :) Поэтому, чаще всего, выявление ошибок происходит с помощью визуального осмотра сайта. Мы включаем дебаг и ползаем по страницам в поисках этой ошибки.
Приведу один из примеров: есть сложная страница с несколькими «вкладками». Вкладки не разбиты на отдельные страницы, а свёрстаны как вкладки с помощью css-фреймворка. На каждую вкладку выводятся ресурсы с помощью pdoPage со своими отборами для каждой вкладки.
Например, мы видим что страница «поехала» — что-то отображается не правильно.
Как это работало в предыдущих версиях — мы видим дебаг под каждым сниппетом и понимаем, какой из них отрабатывает с ошибкой. Например, я добавил showLog=1 для всех сниппетов и на каждой вкладке (или под каждым местом, где должен быть вывод сниппета) вижу свой дебаг. Сразу понимаю, какой из сниппетов отработал неправильно.
Когда мы можем вывести дебаг только в одном месте — сразу не понятно что и где «сломалось». Ошибка уже не привязана к вызову сниппета в вёрстке сайта и это не всегда удобно.
Возможно, я ошибаюсь и все привыкли действовать по-другому. Можно добавить возможность указать плейсхолдер для вывода дебага, а если он не указан — выводить единым плейсхолдером. Если через пару версий выяснится, что этим никто не пользуется — значит я был не прав и эту возможность можно будет исключить.
Еще раз спасибо, что откликнулись на предложение с позитивом.
Самая главная беда — мы видим ошибки в общем логе MODx, но не знаем на какой странице сайта они вылезли. :) Поэтому, чаще всего, выявление ошибок происходит с помощью визуального осмотра сайта. Мы включаем дебаг и ползаем по страницам в поисках этой ошибки.
Приведу один из примеров: есть сложная страница с несколькими «вкладками». Вкладки не разбиты на отдельные страницы, а свёрстаны как вкладки с помощью css-фреймворка. На каждую вкладку выводятся ресурсы с помощью pdoPage со своими отборами для каждой вкладки.
Например, мы видим что страница «поехала» — что-то отображается не правильно.
Как это работало в предыдущих версиях — мы видим дебаг под каждым сниппетом и понимаем, какой из них отрабатывает с ошибкой. Например, я добавил showLog=1 для всех сниппетов и на каждой вкладке (или под каждым местом, где должен быть вывод сниппета) вижу свой дебаг. Сразу понимаю, какой из сниппетов отработал неправильно.
Когда мы можем вывести дебаг только в одном месте — сразу не понятно что и где «сломалось». Ошибка уже не привязана к вызову сниппета в вёрстке сайта и это не всегда удобно.
Возможно, я ошибаюсь и все привыкли действовать по-другому. Можно добавить возможность указать плейсхолдер для вывода дебага, а если он не указан — выводить единым плейсхолдером. Если через пару версий выяснится, что этим никто не пользуется — значит я был не прав и эту возможность можно будет исключить.
Еще раз спасибо, что откликнулись на предложение с позитивом.
С pdoMenu проблемы.
В документации написано
prnt.sc/239rcei
Попробовал указать tplParentRow и у него указал ul, помогло.
Решил сделать тест на модхосте, тоже самое
s28405.h8.modhost.pro/
Не могу утверждать данная проблема связана с последними изменениями, но она как видно есть либо в документации неверно написано.
п.с. Раньше использовал такой «прием» и норм было.
В документации написано
&tplOuter — Чанк оформления всего блока меню. По умолчанию: @INLINE <ul [[+classes]]>[[+wrapper]]При указании tplOuter работает неверно, он начинает использовать его для всех подменю.
prnt.sc/239rcei
Попробовал указать tplParentRow и у него указал ul, помогло.
Решил сделать тест на модхосте, тоже самое
s28405.h8.modhost.pro/
Не могу утверждать данная проблема связана с последними изменениями, но она как видно есть либо в документации неверно написано.
<ul class="test">
{'!pdoMenu' | snippet : [
'parents' => 0,
'level' => 2,
'tplOuter' => '@INLINE {$wrapper}',
'-tplParentRow' => '@INLINE <li class="submenu_wrapp {$classnames}"><a href="{$link}" {$attributes}>{$menutitle}</a><ul>{$wrapper}<ul></li>'
]}
<li>
<a href="#">Заказ звонка</a>
</li>
</ul>
п.с. Раньше использовал такой «прием» и норм было.
Спасибо за помощь в тестировании!
Дело в том, что tplOuter также является и шаблоном для tplInner, если последний не указан. А по умолчанию он пустой. Поэтому так и получается.
Вот тут можно подробнее почитать про параметры сниппета pdoMenu.
Дело в том, что tplOuter также является и шаблоном для tplInner, если последний не указан. А по умолчанию он пустой. Поэтому так и получается.
Вот тут можно подробнее почитать про параметры сниппета pdoMenu.
Спасибо за вашу работу! Сайты на трешке, которые без e-commerce, фактически заработали. Отправил на чашечку кофе))
Спасибо, что тестируете!
По факту если не нужен e-commerce не хватает только MIGX
ms3 будет в Январе. Ну и еще останется экосистему к нему подтягивать.
При тестировании блога на MODX 3 и pdoTools 3 сниппет pdoNeighbors выводит ссылки на все предыдущие и все последующие посты относительно текущего. Т.е. не так как должно быть. Пытались решить с помощью &limit=1 и &depth=1, никаких результатов.
При этом на MODX2 со старой версией pdoTools все работает и как положено, т.е. pdoNeighbors выводит ссылки на соседние ресурсы по одному: предыдущий пост слева, последующий пост справа. Можно с этим что-то сделать или просто лучше подождать стабильных версий MODX и pdoTools?
При этом на MODX2 со старой версией pdoTools все работает и как положено, т.е. pdoNeighbors выводит ссылки на соседние ресурсы по одному: предыдущий пост слева, последующий пост справа. Можно с этим что-то сделать или просто лучше подождать стабильных версий MODX и pdoTools?
Запишите ишу, чтобы зафиксировать проблему.
Написал.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.