04 февраля 2026, 10:42 IDE бы тебе помогла, там есть поиск по файлам. А в целом наверное файл должен назваться или footer или scripts, хотя может быть и base и wrapper и index и main Вопросы / Как удалить с сайта счетчик Google Analytics? 4 0
03 февраля 2026, 20:56 Файловые элементы есть? Может там? Вопросы / Как удалить с сайта счетчик Google Analytics? 4 0
24 января 2026, 13:12 Подскажите плз, старые версии еще могут быть как либо работо-способны?Нет Новые дополнения и их версии / ms_CDEK2 возвращается! 63 0
23 января 2026, 19:18 На сайтах B и C пишешь плагин на событие OnDocFormSave. В этом плагин отправляешь запрос с помощью CURL с данными ресурса на сайт A. На сайте A обрабатываешь входящий запрос: создаёшь или обновляешь ресурс пришедшими данными. Вопросы / Сбор новостей с разных сайтах на один общий 1 +1
21 января 2026, 11:28 Как будто бы 2 секунды на фильтрацию 1000 товаров без единой твшки это многовато. Новые дополнения и их версии / simpleFilters - простая фильтрация для MODX3 13 0
15 января 2026, 20:23 Вариант 1 Переопределить метод msOrderHandler::submit() таким образом, чтобы там перед установлением статуса «Новый» проверялся способ оплаты и, если оплата при получении, статус устанавливать методом minishop2::changeOrderStatus(), иначе через modResource::save(). Вариант 2. Ввести для оплаты при получении отдельный статус. Написать плагин на событие msOnChangeOrderStatus, в котором проверять способ оплаты и, если это оплата при получении, вызывать метод minishop2::changeOrderStatus() и устанавливать созданный для этого способа оплаты статус. При этом отправку писем для статуса «Новый» отключить в настройках минишопа. Вариант 3. Отключить стандартную отправку писем. Написать свой класс отправки писем и вызывать его в плагине на событие msOnChangeOrderStatus. Вот пример реализации такого класса <?php namespace CustomServices\Manage; use CustomServices\Helpers\Mailer; class MailingOrder extends Base { private Mailer $mailer; private array $mailingStatuses = [ 2 => [ 'user' => [ 'subject' => 'ms2_email_subject_paid_user', 'chunk' => 'msEmailPaid.user' ], 'manager' => [], ], 3 => [ 'user' => [ 'subject' => 'ms2_email_subject_sent_user', 'chunk' => 'msEmail.sent.user' ], 'manager' => [], ], 108 => [ 'user' => [ 'subject' => 'ms2_email_subject_sent_user', 'chunk' => 'msEmail.sent.user' ], 'manager' => [], ], 117 => [ 'user' => [ 'subject' => 'ms2_email_subject_paid_user', 'chunk' => 'msEmailPaid.user' ], 'manager' => [], ], 103 => [ 'user' => [ 'subject' => 'ms2_email_subject_paid_user', 'chunk' => 'msEmailPaid.user' ], 'manager' => [], ], ]; private array $statusData; public function __construct(\modX $modx, ?array $properties = []) { parent::__construct($modx, $properties); if ($properties['order'] && $properties['order']->get('context') !== $this->modx->context->get('key')) { $this->modx->switchContext($properties['order']->get('context')); $this->cultureKey = $this->modx->getOption('cultureKey', '', 'en'); } $this->mailer = new Mailer($this->modx); $this->statusData = []; } public function send(): bool { $statusId = $this->properties['statusId']; if (!isset($this->mailingStatuses[$statusId])) { return false; } $this->statusData = $this->mailingStatuses[$statusId]; if (!$this->properties['order']) { $this->logging->write([ 'msg' => "Mail not sent. Order not defined", ]); return false; } $pls = $this->getEmailPls(); if (!empty($this->statusData['manager']) && $mgrMailerProps = $this->getMailerProperties($pls, 'manager')) { if(!$this->mailer->send($mgrMailerProps)){ $this->logging->write([ 'msg' => "Order {$pls['num']} was not sent to manager email", 'data'=> [ 'mailerProps' => $mgrMailerProps ] ]); } } if (!empty($this->statusData['user']) && $usrMailerProps = $this->getMailerProperties($pls)) { if(!$this->mailer->send($usrMailerProps)){ $this->logging->write([ 'msg' => "Order {$pls['num']} was not sent to customer email", 'data'=> [ 'mailerProps' => $usrMailerProps ] ]); } } return true; } public function getEmailPls(): array { $pls = $this->properties['order']->toArray(); $pls['cost'] = $this->miniShop2->formatPrice($pls['cost']); $pls['cart_cost'] = $this->miniShop2->formatPrice($pls['cart_cost']); $pls['delivery_cost'] = $this->miniShop2->formatPrice($pls['delivery_cost']); $pls['weight'] = $this->miniShop2->formatWeight($pls['weight']); $pls['payment_link'] = $this->properties['paymentLink'] ?: ''; return $pls; } public function getMailerProperties(array $pls, $type = 'user'): array { $mailerProperties = []; $mailerProperties['subject'] = $this->modx->lexicon($this->statusData[$type]['subject'], $pls, $this->cultureKey); if($mailerProperties['subject'] === $this->statusData[$type]['subject']){ $mailerProperties['subject'] = $this->modx->lexicon($this->statusData[$type]['subject'], $pls, 'en'); } $mailerProperties['body'] = $this->parser->runSnippet('msGetOrder', array_merge($pls, ['tpl' => $this->statusData[$type]['chunk']])); if ($this->properties['invoicePath'] && $type === 'user') { $mailerProperties['attachment'] = $this->properties['invoicePath']; } if (!$mailerProperties['to'] = $type === 'user' ? $this->getUserEmails($pls['user_id']) : $this->getManagerEmails()) { return []; } return $mailerProperties; } public function getUserEmails(int $userId): array { if (!$profile = $this->modx->getObject('modUserProfile', ['internalKey' => $userId])) { return []; } $email = $profile->get('email'); if (!$email) { if (!$user = $this->modx->getObject('modUser', $userId)) { return []; } if (!$email = $user->get('username')) { return []; } } return [$email]; } public function getManagerEmails(): array { return array_map( 'trim', explode( ',', $this->modx->getOption('ms2_email_manager', null, $this->modx->getOption('emailsender')) ) ); } } Вопросы / [miniShop2] Дополнительная логика отправки писем при оформлении заказа 1 +1
30 декабря 2025, 22:11 Спасибо, Николай, что не бросаешь нас и развиваешь сообщество своим примером! Новости и события / Итоги 2025 года на MODX.pro 3 +1
26 декабря 2025, 19:16 Нет с плагинами ничего не делал. Проблему я понял. Подумаю что можно сделатьКак вариант передавать данные, которые могут быть изменены в плагине, как публичные свойства класса. Новые дополнения и их версии / MiniShop3 1.0.0-alpha.4 — Большое обновление админки 24 0
24 декабря 2025, 22:11 Есть поле mail_smtp_user введи туда логин, если не сработает введи email. И не забудь в emailsender корректный email прописать. Вопросы / Modx 2.8.8 еще подходит отправки почты через smtp.yandex.ru? 3 0
23 декабря 2025, 17:32 при Авторизации или Регистрациидумаю проблема в том, что при авторизации и регистрации меняется идентификатор сессии, рекомендую переключиться на сессии SendIt доступные с версии 2.7.0. В этом случае идентификатор пользователя не будет меняться. Вопросы / Sendit 5 0
30 ноября 2025, 15:25 С визуальным конструктором полей прям огонь. Горжусь тобой!))) Новые дополнения и их версии / MiniShop3 - новый релиз. 1.0.0-alpha.2 15 +1
26 ноября 2025, 21:47 На выходных займусь Новые дополнения и их версии / [CDEKIntegrate] Отправка заказов напрямую в CDEK 20 0
18 ноября 2025, 18:53 Спрошу по-другому, почему просто не использовать файловые элементы, не создавая их в админке? Готовые решения / StaticFilesPlus — автоматическое создание статических элементов с поддержкой категорий 10 0
18 ноября 2025, 18:32 Если хотите изменить базовый путь сохранения файлов, поправьте системную настройку: pdotools_elements_pathТ.е. pdoTools установлен, зачем же тогда создавать статические чанки, шаблоны и сниппеты? Готовые решения / StaticFilesPlus — автоматическое создание статических элементов с поддержкой категорий 10 0
16 ноября 2025, 16:48 Поверь, с гитом разрабатывать удобнее Для разработчиков / Обновление PdoPage 12 0
10 ноября 2025, 17:21 Каким сниппетом обрабатывается данный пресет по-твоему? 'filter_resources' => [ 'hooks' => 'filter_resources', 'resultBlockSelector' => '#filter-results', 'resultShowMethod'=>'insert', ], Вопросы / Как на SendIt вернуть на страницу результат из сниппета? 4 +1 1
10 ноября 2025, 15:29 Логи сервера смотри. Но скорее всего путь к какому-то обработчику указан неверное в ms2_services Вопросы / Ошибка 500 при открытии настроек доставки, не даёт сменить класс-обработчик 2 +1
10 ноября 2025, 15:28 $SendIt = $modx->getService('sendit', 'SendIt', MODX_CORE_PATH.'components/sendit/model/sendit/');Удали Вопросы / Как на SendIt вернуть на страницу результат из сниппета? 4 0
MobileDetect 2.0.0-pl функция "планшеты как стандартные браузеры не работает" в 2.1.0-pl баг исправлен
msImportExport не сохраняет родителя по умолчанию Компонент не понимает кирилические домены при загрузку фото. пример: Error download. Url : https://антаресдвери.рф/upload/iblock/a50/a50b2ef45305a3c18f6e298f1e134880.jpg. Message...
Где можно править тексты и заголовки писем? «Управление словарями» находится в панели администратора по пути: меню Система (иконка в виде шестеренки) -> Управление словарями.
mxBoard: канбан-доска для команд, людей и ИИ-агентов в MODX 3 Токены для ИИ-агентов, чтобы они могли работать с доской. Подробнее написал тут Баг проверю и постараюсь исправить.
Плагин EnvBadge: визуальный индикатор окружения в админке MODX3 Лучше автоматический ci/cd настроить и не править прод напрямую. Это самый безопасный вариант. Другое дело, что далеко не каждый владелец сайта и далеко не каждый сайт готовы в авт...
[videoGallery] Видео галерея YouTube, Vimeo Невозможно установить пакет с подписью: videogallery-1.4.0-beta Ошибка установки Error в /core/packages/videogallery-1.4.0-beta/modCategory/7fc931a7772edc9752c16e9c41eb5e52.reso...
Релиз miniShop2 ver. 4.4.1 & 4.4.2 Подскажите пожалуйста, может я что-то не знаю или упустил. Но есть ли решение по глюку с radio? Указываешь свое radio c одинаковым name и в результате при переключении получаешь вс...
MaxNotify Обновление компонента 1.3.0-pl (22.07.2026) — добавлено автоматическое получение полей через msOrder->toArray(); — массивы и объекты безопасно пропускаются; — стандартные...
Переопределить метод msOrderHandler::submit() таким образом, чтобы там перед установлением статуса «Новый» проверялся способ оплаты и, если оплата при получении, статус устанавливать методом minishop2::changeOrderStatus(), иначе через modResource::save().
Вариант 2.
Ввести для оплаты при получении отдельный статус. Написать плагин на событие msOnChangeOrderStatus, в котором проверять способ оплаты и, если это оплата при получении, вызывать метод minishop2::changeOrderStatus() и устанавливать созданный для этого способа оплаты статус. При этом отправку писем для статуса «Новый» отключить в настройках минишопа.
Вариант 3.
Отключить стандартную отправку писем. Написать свой класс отправки писем и вызывать его в плагине на событие msOnChangeOrderStatus. Вот пример реализации такого класса