pdoTools 2.14.0 и pdoTools3 3.1.0-pl: обновление для MODX 2 и MODX 3
Вышли новые версии pdoTools 2.14.0 и pdoTools3 3.1.0-pl — одного из наиболее популярных наборов инструментов для работы с выборками, меню, пагинацией и шаблонизацией в MODX.
Релизы продолжают развитие двух отдельных веток:
При этом ветка pdoTools 2.x также получила ряд полезных исправлений и улучшений.
Это не просто два одинаковых релиза с разными номерами: pdoTools3 постепенно становится самостоятельной веткой, ориентированной на современный стек MODX 3.
pdoTools 2.14.0
Версия 2.14.0 продолжает развитие стабильной ветки pdoTools для MODX Revolution 2.
pdoMenu: новый placeholder children
В pdoMenu добавлен новый placeholder children, доступный в шаблоне tplInner.
Это позволяет непосредственно внутри шаблона работать с дочерними пунктами меню и строить более гибкую разметку многоуровневых меню.
Изменение связано с issue #306.
Fenom: array_merge включён по умолчанию
Функция array_merge теперь разрешена в Fenom по умолчанию.
Дополнительная настройка для её использования больше не требуется.
Это особенно удобно при подготовке массивов параметров непосредственно в шаблоне.
Изменение связано с issue #356.
pdoTools: настройка pdotools_cache_path
Добавлена возможность задавать путь к файловому кэшу pdoTools через системную настройку: pdotools_cache_path
По умолчанию используется: {core_path}cache/pdotools
Это позволяет контролировать расположение кэша pdoTools/Fenom на проектах с нестандартной файловой структурой.
Изменение связано с issue #358.
pdoPage: свойства сниппета доступны в шаблонах пагинации
Свойства вызова pdoPage теперь доступны как placeholders внутри шаблонов пагинации.
Это даёт больше возможностей для построения кастомных вариантов пагинации без необходимости дублировать параметры.
Изменение связано с issue #392.
Исправления pdoPage
Исправлена работа ajaxMode в pdoPage.
В частности:
Также AJAX-запросы pdoPage теперь помечаются как connector mode через MODX_CONNECTOR_INCLUDED.
Это позволяет корректнее определять AJAX/connector-контекст выполнения запроса внутри MODX и сторонних дополнений.
Исправления pdoMenu
Исправлены PHP notices при работе pdoMenu с web-ссылками, у которых отсутствуют:
Исправления совместимости с PHP 8
В pdoTools исправлено приведение значения offset конфигурации к целому числу.
Это устраняет проблемы, связанные с более строгой типизацией в PHP 8.
Исправление pdoResources
Исправлена работа toSeparatePlaceholders, когда вызываемый сниппет возвращает строковое значение.
Это исправляет сценарии, в которых результат сниппета не является массивом данных.
pdoTools3 3.1.0-pl
pdoTools3 3.1.0-pl — версия pdoTools для современного стека MODX Revolution 3.
Она требует:
Для pdoTools3 также используется отдельный репозиторий, что позволяет независимо развивать ветку для MODX 3.
Новые флаги строк
Одно из наиболее заметных изменений 3.1.0-pl — расширение набора информации, доступной непосредственно в шаблонах.
Общие флаги
В шаблонах pdoMenu, pdoPage и pdoCrumbs доступны:
Дополнительные флаги pdoMenu
Дополнительный флаг pdoPage
Для pdoPage появился: isSkip
Он позволяет учитывать состояние элемента при формировании результата.
Дополнительный флаг pdoCrumbs
Для pdoCrumbs добавлен: isHome
С его помощью в шаблоне breadcrumbs можно определить домашний элемент.
pdoMenu: children в tplInner
Как и в ветке 2.x, в pdoTools3 для pdoMenu доступен placeholder: [[+children]]
Он доступен в tplInner и позволяет удобно работать с дочерним содержимым пункта меню.
Новые Fenom casts
В pdoTools3 добавлены модификаторы для приведения типов:
Это особенно удобно при работе с данными из TV, JSON, API и сторонних компонентов.
array_merge разрешён по умолчанию
Функция array_merge теперь разрешена в Fenom без дополнительной настройки.
Например:
Отдельно добавлять array_merge в pdotools_fenom_options больше не требуется.
pdotools_cache_path
Для pdoTools3 доступна системная настройка: pdotools_cache_path
По умолчанию: {core_path}cache/pdotools
Настройка определяет каталог файлового кэша pdoTools/Fenom.
Улучшена диагностика ошибок Fenom
Работа с ошибками компиляции и выполнения Fenom стала информативнее.
Теперь сообщение об ошибке содержит дополнительную информацию, позволяющую быстрее найти проблемный шаблон:
Для разработчиков это особенно полезно на больших проектах, где количество Fenom-шаблонов может исчисляться сотнями.
Кэш учитывает текущий контекст MODX
Изменена генерация ключей кэша результатов сниппетов.
Теперь при формировании ключа учитывается текущий контекст MODX.
Это особенно важно для мультиконтекстных сайтов:
Результат, сформированный в одном контексте, не должен ошибочно использоваться в другом.
Для мультиконтекстных проектов это делает кэширование более предсказуемым и безопасным.
MiniShop3 вместо MiniShop2
Одно из ключевых изменений pdoTools3 — обновление работы дополнительных категорий товаров.
При разборе &parents дополнительные связи товаров теперь обрабатываются через модель MiniShop3:
Таким образом, pdoTools3 ориентирован на связку: MODX Revolution 3 + MiniShop3 + pdoTools
Это важное отличие от старой ветки, где соответствующая логика была связана с MiniShop2.
Удалена поддержка MiniShop2 в pdoTools3
Из pdoTools3 удалена специфичная для MiniShop2 логика.
В частности, больше не используются старые классы MiniShop2 и параметр: strong>&disableMS2
Вместо него используется: &disableMS3
Например: &disableMS3=1 отключает учёт дополнительных категорий MiniShop3 при обработке &parents.
Это важно учитывать при обновлении существующих проектов.
Если в коде проекта используются &disableMS2 или собственная логика, завязанная на классы MiniShop2, её необходимо проверить и адаптировать.
pdoCrumbs: исправление parents + showHome
Исправлена обработка строкового значения &parents в pdoCrumbs при включённом showHome.
В определённых сценариях вместо корректного значения мог формироваться пустой массив.
Теперь такой сценарий обрабатывается корректно.
pdoFetch: исправление предупреждения
Исправлено предупреждение, возникавшее при подготовке where/having для записи информации в лог.
Это устраняет лишние warnings в соответствующих сценариях использования pdoFetch.
pdoPage: исправление сравнения номера страницы
Исправлено строгое сравнение номера страницы.
Проблема была связана с типом значения, возвращаемого ceil(): в определённых случаях результат имел тип float, тогда как другая часть логики ожидала int.
Также исправлена работа с неопределённой переменной: $showLog
Сборка и тестирование
В pdoTools3 3.1.0-pl была заметно улучшена инфраструктура разработки.
Проект тестируется на нескольких версиях PHP:
Также используется GitHub Actions для автоматической проверки изменений и сборки transport-пакета.
Для контроля покрытия подключён strongcov.
Это важное изменение именно с точки зрения дальнейшего развития pdoTools3: изменения в коде теперь можно проверять на нескольких актуальных версиях PHP до выпуска новой версии.
Оптимизация production-пакета
Из transport-пакета pdoTools3 исключены тестовые деревья pdoTools и Fenom.
Это позволяет не включать в production-установку файлы, необходимые только для разработки и тестирования.
Также исправлена работа vendor autoload: если классы pdoTools уже загружены, дополнительная загрузка vendor autoload пропускается.
Обновление документации
Одновременно с выпуском pdoTools3 3.1.0-pl была актуализирована документация.
В ней теперь явно описывается разделение двух веток:
Что проверить перед обновлением
Если используется pdoTools 2.x
Обновление до 2.14.0 не требует перехода на MODX 3. Это очередной релиз ветки 2.x с исправлениями и улучшениями.
После обновления стоит проверить прежде всего собственные шаблоны pdoPage, pdoMenu и сценарии, использующие toSeparatePlaceholders.
Если используется pdoTools3
Перед обновлением необходимо убедиться, что проект работает на:
Если проект использует: &disableMS2
для pdoTools3 его необходимо заменить на: &disableMS3
Также стоит проверить собственные Fenom-модификаторы, если проект самостоятельно регистрирует новые функции приведения типов.
Итоги
pdoTools 2.14.0 — аккуратное обновление стабильной ветки с исправлениями pdoPage, pdoMenu, pdoResources, улучшениями Fenom и возможностью настройки пути кэша.
pdoTools3 3.1.0-pl — более заметный шаг в развитии инструментария для MODX 3.
Главные изменения новой версии:
Особенно логично это выглядит в связке с MiniShop3: современный MODX, PHP 8.1+, MiniShop3 и pdoTools3 теперь развиваются как единый актуальный стек, без необходимости сохранять внутри новой ветки совместимость со старым MiniShop2.
Ссылки
Весь этот проект развивается благодаря Open Source и поддержке сообщества.
Разработка новых возможностей, исправление ошибок, поддержка совместимости с новыми версиями PHP и MODX, тестирование, документация, разбор issues и pull request'ов — всё это требует большого количества времени.
pdoTools, pdoTools3, MiniShop3 и другие проекты экосистемы MODX развиваются открыто и доступны сообществу. При этом значительная часть работы над ними выполняется в свободное от коммерческих проектов время.
Если вы используете эти проекты в своих сайтах и магазинах, они помогают вам зарабатывать, экономить время разработки или просто хотите, чтобы MODX и его Open Source-экосистема продолжали развиваться — можно поддержать разработку донатом.
Даже небольшой регулярный донат помогает выделять больше времени на:
Open Source существует благодаря людям, которые не только используют проекты, но и помогают им становиться лучше.
Релизы продолжают развитие двух отдельных веток:
- pdoTools 2.x — для проектов на MODX Revolution 2;
- pdoTools3 3.x — для MODX Revolution 3 и PHP 8.1+.
При этом ветка pdoTools 2.x также получила ряд полезных исправлений и улучшений.
Это не просто два одинаковых релиза с разными номерами: pdoTools3 постепенно становится самостоятельной веткой, ориентированной на современный стек MODX 3.
pdoTools 2.14.0
Версия 2.14.0 продолжает развитие стабильной ветки pdoTools для MODX Revolution 2.
pdoMenu: новый placeholder children
В pdoMenu добавлен новый placeholder children, доступный в шаблоне tplInner.
Это позволяет непосредственно внутри шаблона работать с дочерними пунктами меню и строить более гибкую разметку многоуровневых меню.
[[+children]]Изменение связано с issue #306.
Fenom: array_merge включён по умолчанию
Функция array_merge теперь разрешена в Fenom по умолчанию.
Дополнительная настройка для её использования больше не требуется.
{$arr1|array_merge:$arr2}Это особенно удобно при подготовке массивов параметров непосредственно в шаблоне.
Изменение связано с issue #356.
pdoTools: настройка pdotools_cache_path
Добавлена возможность задавать путь к файловому кэшу pdoTools через системную настройку: pdotools_cache_path
По умолчанию используется: {core_path}cache/pdotools
Это позволяет контролировать расположение кэша pdoTools/Fenom на проектах с нестандартной файловой структурой.
Изменение связано с issue #358.
pdoPage: свойства сниппета доступны в шаблонах пагинации
Свойства вызова pdoPage теперь доступны как placeholders внутри шаблонов пагинации.
Это даёт больше возможностей для построения кастомных вариантов пагинации без необходимости дублировать параметры.
Изменение связано с issue #392.
Исправления pdoPage
Исправлена работа ajaxMode в pdoPage.
В частности:
- исправлена работа кнопки загрузки дополнительных результатов;
- кнопка more скрывается, если новых результатов больше нет;
- в режиме force кнопка корректно восстанавливается.
Также AJAX-запросы pdoPage теперь помечаются как connector mode через MODX_CONNECTOR_INCLUDED.
Это позволяет корректнее определять AJAX/connector-контекст выполнения запроса внутри MODX и сторонних дополнений.
Исправления pdoMenu
Исправлены PHP notices при работе pdoMenu с web-ссылками, у которых отсутствуют:
- class_key;
- content.
Исправления совместимости с PHP 8
В pdoTools исправлено приведение значения offset конфигурации к целому числу.
Это устраняет проблемы, связанные с более строгой типизацией в PHP 8.
Исправление pdoResources
Исправлена работа toSeparatePlaceholders, когда вызываемый сниппет возвращает строковое значение.
Это исправляет сценарии, в которых результат сниппета не является массивом данных.
pdoTools3 3.1.0-pl
pdoTools3 3.1.0-pl — версия pdoTools для современного стека MODX Revolution 3.
Она требует:
- MODX Revolution 3;
- PHP 8.1 или новее.
Для pdoTools3 также используется отдельный репозиторий, что позволяет независимо развивать ветку для MODX 3.
Новые флаги строк
Одно из наиболее заметных изменений 3.1.0-pl — расширение набора информации, доступной непосредственно в шаблонах.
Общие флаги
В шаблонах pdoMenu, pdoPage и pdoCrumbs доступны:
- isFirst — первый элемент;
- isLast — последний элемент;
- isActive — активный элемент.
Дополнительные флаги pdoMenu
- hasChildren;
- hasChilds;
- isHere;
- isStart;
- isCategory;
- isInner.
{if $hasChildren}
...
{/if}Дополнительный флаг pdoPage
Для pdoPage появился: isSkip
Он позволяет учитывать состояние элемента при формировании результата.
Дополнительный флаг pdoCrumbs
Для pdoCrumbs добавлен: isHome
С его помощью в шаблоне breadcrumbs можно определить домашний элемент.
pdoMenu: children в tplInner
Как и в ветке 2.x, в pdoTools3 для pdoMenu доступен placeholder: [[+children]]
Он доступен в tplInner и позволяет удобно работать с дочерним содержимым пункта меню.
Новые Fenom casts
В pdoTools3 добавлены модификаторы для приведения типов:
- boolval;
- doubleval;
- floatval;
- intval;
- strval.
{'1' | boolval}
{'3.14' | floatval}
{'3.14' | doubleval}
{'42abc' | intval}
{42 | strval}Это особенно удобно при работе с данными из TV, JSON, API и сторонних компонентов.
array_merge разрешён по умолчанию
Функция array_merge теперь разрешена в Fenom без дополнительной настройки.
Например:
{set $arr1 = [2,15,55]}
{set $arr2 = [44,88,11]}
{$arr1|array_merge:$arr2}Отдельно добавлять array_merge в pdotools_fenom_options больше не требуется.
pdotools_cache_path
Для pdoTools3 доступна системная настройка: pdotools_cache_path
По умолчанию: {core_path}cache/pdotools
Настройка определяет каталог файлового кэша pdoTools/Fenom.
Улучшена диагностика ошибок Fenom
Работа с ошибками компиляции и выполнения Fenom стала информативнее.
Теперь сообщение об ошибке содержит дополнительную информацию, позволяющую быстрее найти проблемный шаблон:
- имя чанка или ресурса;
- короткий фрагмент исходного кода;
- путь к кэшу.
Unexpected token '+' in expression in ee058690d9fd7413748b95b0960e006b line 6, near '{var $limit = [[+' <- thereСтало:[pdoTools][Fenom] compile error in chunk:tpl.product.row (#12)
resource:#42 (web:catalog/item)
cache name: modchunk/12
Unexpected token '+' in expression in chunk:tpl.product.row (#12) line 6, near '{var $limit = [[+' <- there
> 6: {var $limit = [[+limit]]}
Unprocessed MODX tag inside Fenom. Use {$limit} or parse MODX before Fenom.Или [pdoTools][Fenom] compile error in resource:#42 (web:catalog/item), template:#5
cache name: ee058690d9fd7413748b95b0960e006b
Unexpected token '+' in expression in resource:#42 (web:catalog/item), template:#5 line 6, near '{var $limit = [[+' <- there
> 6: {var $limit = [[+limit]]}
Unprocessed MODX tag inside Fenom. Use {$limit} or parse MODX before Fenom.При этом принцип формирования ключа кэша не изменился — он по-прежнему основан на hash содержимого.Для разработчиков это особенно полезно на больших проектах, где количество Fenom-шаблонов может исчисляться сотнями.
Кэш учитывает текущий контекст MODX
Изменена генерация ключей кэша результатов сниппетов.
Теперь при формировании ключа учитывается текущий контекст MODX.
Это особенно важно для мультиконтекстных сайтов:
web
ru
en
deРезультат, сформированный в одном контексте, не должен ошибочно использоваться в другом.
Для мультиконтекстных проектов это делает кэширование более предсказуемым и безопасным.
MiniShop3 вместо MiniShop2
Одно из ключевых изменений pdoTools3 — обновление работы дополнительных категорий товаров.
При разборе &parents дополнительные связи товаров теперь обрабатываются через модель MiniShop3:
MiniShop3\Model\msCategoryMemberТаким образом, pdoTools3 ориентирован на связку: MODX Revolution 3 + MiniShop3 + pdoTools
Это важное отличие от старой ветки, где соответствующая логика была связана с MiniShop2.
Удалена поддержка MiniShop2 в pdoTools3
Из pdoTools3 удалена специфичная для MiniShop2 логика.
В частности, больше не используются старые классы MiniShop2 и параметр: strong>&disableMS2
Вместо него используется: &disableMS3
Например: &disableMS3=1 отключает учёт дополнительных категорий MiniShop3 при обработке &parents.
Это важно учитывать при обновлении существующих проектов.
Если в коде проекта используются &disableMS2 или собственная логика, завязанная на классы MiniShop2, её необходимо проверить и адаптировать.
pdoCrumbs: исправление parents + showHome
Исправлена обработка строкового значения &parents в pdoCrumbs при включённом showHome.
В определённых сценариях вместо корректного значения мог формироваться пустой массив.
Теперь такой сценарий обрабатывается корректно.
pdoFetch: исправление предупреждения
Исправлено предупреждение, возникавшее при подготовке where/having для записи информации в лог.
Это устраняет лишние warnings в соответствующих сценариях использования pdoFetch.
pdoPage: исправление сравнения номера страницы
Исправлено строгое сравнение номера страницы.
Проблема была связана с типом значения, возвращаемого ceil(): в определённых случаях результат имел тип float, тогда как другая часть логики ожидала int.
Также исправлена работа с неопределённой переменной: $showLog
Сборка и тестирование
В pdoTools3 3.1.0-pl была заметно улучшена инфраструктура разработки.
Проект тестируется на нескольких версиях PHP:
- PHP 8.1;
- PHP 8.2;
- PHP 8.3;
- PHP 8.4.
Также используется GitHub Actions для автоматической проверки изменений и сборки transport-пакета.
Для контроля покрытия подключён strongcov.
Это важное изменение именно с точки зрения дальнейшего развития pdoTools3: изменения в коде теперь можно проверять на нескольких актуальных версиях PHP до выпуска новой версии.
Оптимизация production-пакета
Из transport-пакета pdoTools3 исключены тестовые деревья pdoTools и Fenom.
Это позволяет не включать в production-установку файлы, необходимые только для разработки и тестирования.
Также исправлена работа vendor autoload: если классы pdoTools уже загружены, дополнительная загрузка vendor autoload пропускается.
Обновление документации
Одновременно с выпуском pdoTools3 3.1.0-pl была актуализирована документация.
В ней теперь явно описывается разделение двух веток:
- pdoTools 2.x для MODX 2;
- pdoTools 3.x для MODX 3.
- флаги isFirst, isLast, isActive;
- hasChildren и hasChilds;
- isHere, isStart, isCategory, isInner;
- isSkip;
- isHome;
- Fenom casts;
- pdotools_cache_path;
- &disableMS3;
- интеграцию с msCategoryMember.
Что проверить перед обновлением
Если используется pdoTools 2.x
Обновление до 2.14.0 не требует перехода на MODX 3. Это очередной релиз ветки 2.x с исправлениями и улучшениями.
После обновления стоит проверить прежде всего собственные шаблоны pdoPage, pdoMenu и сценарии, использующие toSeparatePlaceholders.
Если используется pdoTools3
Перед обновлением необходимо убедиться, что проект работает на:
MODX Revolution 3 + PHP 8.1+Также следует проверить использование MiniShop2.Если проект использует: &disableMS2
для pdoTools3 его необходимо заменить на: &disableMS3
Также стоит проверить собственные Fenom-модификаторы, если проект самостоятельно регистрирует новые функции приведения типов.
Итоги
pdoTools 2.14.0 — аккуратное обновление стабильной ветки с исправлениями pdoPage, pdoMenu, pdoResources, улучшениями Fenom и возможностью настройки пути кэша.
pdoTools3 3.1.0-pl — более заметный шаг в развитии инструментария для MODX 3.
Главные изменения новой версии:
- поддержка PHP 8.1+;
- тестирование на PHP 8.1–8.4;
- PHPUnit 9.6;
- unit- и integration-тесты;
- автоматическая сборка через GitHub Actions;
- новые флаги строк для pdoMenu, pdoPage и pdoCrumbs;
- новые Fenom casts;
- array_merge включён по умолчанию;
- pdotools_cache_path;
- более информативные ошибки Fenom;
- контекст MODX учитывается при формировании ключа кэша;
- дополнительные категории работают через MiniShop3\Model\msCategoryMember;
- удалена MiniShop2-специфика;
- вместо &disableMS2 используется &disableMS3;
- улучшена сборка production transport-пакета.
Особенно логично это выглядит в связке с MiniShop3: современный MODX, PHP 8.1+, MiniShop3 и pdoTools3 теперь развиваются как единый актуальный стек, без необходимости сохранять внутри новой ветки совместимость со старым MiniShop2.
Ссылки
- pdoTools 2.14.0 — GitHub
- pdoTools3 3.1.0-pl — GitHub
- Репозиторий pdoTools
- Репозиторий pdoTools3
- Обновление документации под pdoTools3 3.1.0-pl
Весь этот проект развивается благодаря Open Source и поддержке сообщества.
Разработка новых возможностей, исправление ошибок, поддержка совместимости с новыми версиями PHP и MODX, тестирование, документация, разбор issues и pull request'ов — всё это требует большого количества времени.
pdoTools, pdoTools3, MiniShop3 и другие проекты экосистемы MODX развиваются открыто и доступны сообществу. При этом значительная часть работы над ними выполняется в свободное от коммерческих проектов время.
Если вы используете эти проекты в своих сайтах и магазинах, они помогают вам зарабатывать, экономить время разработки или просто хотите, чтобы MODX и его Open Source-экосистема продолжали развиваться — можно поддержать разработку донатом.
Даже небольшой регулярный донат помогает выделять больше времени на:
- развитие Open Source-проектов;
- выпуск новых версий и функциональности;
- исправление ошибок и технический долг;
- поддержку актуальных версий PHP и MODX;
- развитие документации;
- разбор issues и pull request'ов;
- создание новых бесплатных дополнений и инструментов.
- Поддержать разработку на Sponsr
- Поддержать разработку с помощью TBank
- Поддержать разработку с помощью Сбербанк
Open Source существует благодаря людям, которые не только используют проекты, но и помогают им становиться лучше.
Техническая поддержка MODX
Сайт лежит, тормозит или остался без разработчика?
Переезд с MODX 2 на 3, PHP 7 на 8, скорость и безопасность. Поддержка со сроками и ответственностью, а не совет в чате.
Подробнее
Реклама
0
Комментарии: 0