18 сентября 2025, 17:14 так, а в чем проблема во втором абзаце, не очень понял? $modx->addEventListenerClosure( 'OnWebPagePrerender', function (\MODX\Revolution\modX $modx) { (new \Namespace\YourClass($modx))->doSomething(); // $class = $modx->services->get('yourservice'); $class->doSomething(); // \Namespace\YourClass::doSomething(); // my_global_function($modx); return null; }, priority: 10, name: 'appendTestComment', replace: false ); Вопросы / Предложение нового механизма closure и слушателей событий в bootstrap неймспейсов MODX с приоритетами и именами 8 0
18 сентября 2025, 17:07 с обычными плагинами — я пока это не учитывал, но вопрос логичный. НО это не учитывается и в оригинальном методе addEventListener, так что текущая логика по сути не меняется. Оригинал: public function addEventListener($event, $pluginId, $propertySetName = '') { $added = false; $pluginId = intval($pluginId); if ($event && $pluginId) { if (!isset($this->eventMap[$event]) || empty ($this->eventMap[$event])) { $this->eventMap[$event]= []; } $this->eventMap[$event][$pluginId]= $pluginId . (!empty($propertySetName) ? ':' . $propertySetName : ''); $added = true; } return $added; }Проблема в том что карта у них строится без какой либо доп информации о плагинах, просто событие->список ID плагинов, уже отсортированных в sql запросе. То есть пересортировать ее без дополнительного запроса к базе не получится (ну или надо сохранять расширенную карту из базы при инициализации и потом при добавлении нового плагина пересобирать итоговую карту). Сейчас реализовано так, что сначала выполняются плагины из бд — и подвязанные к событию в админке, и подвязанные к событию в коде, потом все closure плагины. Вообще это больше не для того чтобы кто-то в админке вручную тыкал, а чтобы например при разработке пакета вы спокойно свой функционал раскидали по нужным событиям и не парились с созданием плагинов и привязкой/отвязкой событий при обновлении например. Вопросы / Предложение нового механизма closure и слушателей событий в bootstrap неймспейсов MODX с приоритетами и именами 8 0
18 сентября 2025, 16:50 Да, но это приоритет выполнения именно Closure слушателей — они выполняются уже после плагинов из бд Вопросы / Предложение нового механизма closure и слушателей событий в bootstrap неймспейсов MODX с приоритетами и именами 8 0
18 сентября 2025, 16:47 Вот да, я тоже из этого исхожу) Вопросы / Предложение нового механизма closure и слушателей событий в bootstrap неймспейсов MODX с приоритетами и именами 8 0
29 августа 2025, 18:05 Василий, здравствуйте! Очень интересное (и правильное) направление для развития modx экосистемы как мне кажется. В последнее время для разработки больше работаю с Laravel, но в плане управления контентом конечно очень удобен modx3 — файловый менеджер, дерево ресурсов, таблицы коллекций с инлайн редактированием и тд, на сборку удобной админки в ларавел уйдет оч много времени… Так вот на проекте веб-приложения, который начинал писать давно еще на MODx, стал постепенно внедрять по частям ларавле параллельно с modx — получается modx живет в public и core, а рядом части ларавел в app, config и тд, с кастомным бутстрап файлом. И в modx подключается автолоадер laravel и кастомный конфиг инициализации контейнера с нужными сервисами типа лога, елоквента, кеша, блейда и фасадами. И получается можно использовать их прямо в сниппетах modx. Или вообще у modx ресурса делать пустой шаблон, и в контенте через небольшой сниппет типа runController — вызов определенного своего контроллера, который по сути стандарный контроллер ларавел с валидацией, возвращает blade view. а на событие не найденной страницы вешать файл роутинга со всеми плюхами ларавел. Вопросы остаются еще с авторизацией пользователей — было бы удобно в итоге иметь вообще laravel как сервис создания фронта сайта, а modx как админку ресурсов. Очень полезно что вы написали про возможность подключения композер файла прямо через основной файл modx — у меня реализовано через отдельный композер файл, подключаемый при инициализации modx. В целом направление интеграции modx и современных инструментов кажется очень перспективным, рад что вы снова тут (хоть и статьи прошлого года)) Новые дополнения и их версии / Новый тип дополнений: mmxDatabase и mmxForms 41 0
Localizator3 для MODX 3: перевод полей и TV без отдельного context на язык, Vue 3 + PrimeV... Вложенный migx тоже переведет??
PageBuilder — визуальный конструктор страниц для MODX 3 Класс! Пара моментов смутила: 1. Почему бы чанки сразу не вынести в файлы? 2. На фронте грузится свой CSS для стандартных блоков<link rel="stylesheet" href="/a...
mxDadata — интеграция DaData (Suggest, Clean, Party) с MODX 3 и MiniShop3 Вышла новая версия: [1.0.2-pl] — 2026-10-06 Fixed #9 Права mxdadata_edit, mxdadata_logs, mxdadata_cache_clear теперь проверяются в connector.php и в Processors\Mgr\Pr...
msp3PaymentSkeleton — шаблон для создания платёжных дополнений MiniShop3 вот круто. я как то писал платежное дополнение и парился как что. а теперь надеюсь все проше будет :-)
MiniShop3 1.2.0 - 1.3.0 Самое интересное Пообщались с клиентом он сказал что тыкал в позицию т.к. она не добавлялась (видимо лагал инет) и вот она размножилась таким образом.
Modx Revo 2.8.8 + Minishop 2 (4.4.2) + Babel 3.5.2 - превью товаров в админке у дополнител... Сначала сравните ответ connector для исходного товара и его перевода во вкладке Network. Если у перевода поле миниатюры пустое, смена чанка или рендерера сама картинку не добавит: ...
Сайт тормозит сервер, грузит процессор на 100% полезно посмотреть, какие URL запрашивают эти боты и сколько времени занимает их обработка. Частые обращения к поиску и фильтрам могут нагружать PHP сильнее, чем обычные страницы. ...
Подскажите насколько это рабочее решение Спасибо за ответ. У меня время создания заказа равно времени оплаты. Заказ оплачивается сразу через iframe на сайте. При нажатии на кнопку «оформить заказ» всплывает окошко робокас...
Не всегда срабатывает JS-событие Здесь лучше разделить «заказ создан» и «заказ оплачен». Первое событие фиксируется при успешном создании заказа, второе — после проверенного уведомления платёжной системы на сервер...
Проблема в том что карта у них строится без какой либо доп информации о плагинах, просто событие->список ID плагинов, уже отсортированных в sql запросе. То есть пересортировать ее без дополнительного запроса к базе не получится (ну или надо сохранять расширенную карту из базы при инициализации и потом при добавлении нового плагина пересобирать итоговую карту). Сейчас реализовано так, что сначала выполняются плагины из бд — и подвязанные к событию в админке, и подвязанные к событию в коде, потом все closure плагины. Вообще это больше не для того чтобы кто-то в админке вручную тыкал, а чтобы например при разработке пакета вы спокойно свой функционал раскидали по нужным событиям и не парились с созданием плагинов и привязкой/отвязкой событий при обновлении например.
Так вот на проекте веб-приложения, который начинал писать давно еще на MODx, стал постепенно внедрять по частям ларавле параллельно с modx — получается modx живет в public и core, а рядом части ларавел в app, config и тд, с кастомным бутстрап файлом. И в modx подключается автолоадер laravel и кастомный конфиг инициализации контейнера с нужными сервисами типа лога, елоквента, кеша, блейда и фасадами.
И получается можно использовать их прямо в сниппетах modx. Или вообще у modx ресурса делать пустой шаблон, и в контенте через небольшой сниппет типа runController — вызов определенного своего контроллера, который по сути стандарный контроллер ларавел с валидацией, возвращает blade view. а на событие не найденной страницы вешать файл роутинга со всеми плюхами ларавел. Вопросы остаются еще с авторизацией пользователей — было бы удобно в итоге иметь вообще laravel как сервис создания фронта сайта, а modx как админку ресурсов.
Очень полезно что вы написали про возможность подключения композер файла прямо через основной файл modx — у меня реализовано через отдельный композер файл, подключаемый при инициализации modx. В целом направление интеграции modx и современных инструментов кажется очень перспективным, рад что вы снова тут (хоть и статьи прошлого года))