Вопросы

Прерывание внутри плагина

Добрый день, подскажите. Есть плагин, который выполняется перед сохранение данных пользователя. В случае исключительной (я создают условие сам) ситуации нужно остановить и вернуть текст ошибки. Но вот незадача, почему-то после выполнения кода, дальше моего условия скрипт не идет, а вот выполнение штатного скрипта modx (сохранение пользователя) идет.

Пример кода:

<?php
if ($modx->event->name === 'OnUserFormSave') {
// Пример условия для прерывания
if ($user->get('email') === 'blocked@example.com') {
$modx->event->output('Регистрация с таким email запрещена.');
$modx->event->stopPropagation();
return;
}

// Или выбросить исключение (если обрабатывается в компоненте или сниппете)
// throw new Exception('Регистрация с таким email запрещена.');
}

Или

<?php
if ($modx->event->name === 'OnUserBeforeSave') {
// Пример: запретить создание пользователя с определённым email
$email = $user->get('email');

if ($email === 'blocked@example.com') {
$modx->event->output('Пользователь с таким email не может быть создан.');
$modx->event->_output = 'Пользователь с таким email не может быть создан.';
$modx->event->stopPropagation(); // Остановить выполнение других плагинов
return false; // Очень важно — возврат false остановит сохранение!
}

В чем может быть причина?
}
charset
13 июля 2025, 21:06
modx.pro
262
0

Набор правил, настройка форм в админке для родителей

Здравствуйте!
Подскажите пожалуйста, никак не могу разобраться.
Создаю 2 набора правил для одного и того же шаблона.
Для родительского элемента (оставляю ТВ-поля)
  • Ограничивающее поле: id
  • Ограничивающее значение: 2
Для остальных элементов (убираю ТВ-поля)
  • Ограничивающее поле: [empty] (тут я не могу указать parent со значением 2, т/к там вложенность есть на несколько уровней)
  • Ограничивающее значение: [empty]
И в этом случае у меня получается, что везде поля не отображаются.
Пробовал разные комбинации, либо у всех есть поля, либо у всех их нет :(

Что я хочу, чтобы у родителя были определенные поля, а у его потомков (всех уровней) эти поля в админке не отображались, как такое сделать подскажите пожалуйста?
Меня шаблон у всех потомков не хочу, не удобно.
Роман
10 июля 2025, 09:23
modx.pro
113
0

Какими компонентами сделать интернет-магазин (каталог) по модульным (сборным) товарам?

Добрый день. Фирма продает модульные летние домики. Можно купить просто навес. Можно к нему добавить стенки глухие, можно с окнами или со входной группой. Такой мини конструктор. Достаточно минишопа или проще будет с какими-то дополнительными компонентами?
Пример: человек выбрал навес 5x5, сумма 100, добавил 3 стены, сумма 200, добавил четвертую стену с дверью и окном — сумма 300. Нажал заказать — создался заказ с 5 товарами: навес + 3 стены + 1 стена с дверью и окном.
Подскажите пожалуйста.
Павлик Мышкин
09 июля 2025, 16:23
modx.pro
604
0

[[~[[+vendor.resource]]]] ошибка

Добрый день! Делаю вывод производителя с ссылкой
<a [[+vendor.resource:gt=`0`:then=`href="[[~[[+vendor.resource]]]]"`]]>[[!+vendor.name]]</a>
в ошибках постоянно
`0` is not a valid integer and may not be passed to makeUrl()
. Может кто сталкивался, как исправить? Я понимаю, что он ругается, что страницы нет, но стоит же проверка…
Дмитрий
02 июля 2025, 13:55
modx.pro
197
0

Публикация новостей из RSS в канале

Система Modx 2.8.4
Как организовать автопостинг новости в Телеграм?
Нашел варианты от 17го и 18го годов. Попробовал. Увы, не работает…

Делаю бота, подключаю к RSS каналу и, увы…
В RSS запись есть, бот публикует в канале то, что ему пишешь вручную, а из RSS забирать не хочет…
Матвей
30 июня 2025, 23:02
modx.pro
239
0

ms2Gallery Вопрос по уменьшению оригиналов изображений

У меня на сайте более 20GB изображений. Оригиналы загружались без ограничений. Есть ли способ уменьшить именно оригиналы, не превьюшки, а именно оригиналы!
Способ Ильи ilyaut.ru/cheats/to-rebuild-all-previews-of-products/ не трогает оригиналы…
Евгений
28 июня 2025, 10:13
modx.pro
1
237
0

[Внимание] SQL-инъекция через miniShop2 (msPayment) в MODX — разбор и поиск причины

Хочу поделиться реальным кейсом: вчера на два сайта обнаружилась массовая SQL-инъекция через компонент miniShop2, которая загружала MySQL и выводила из строя сайт (я бы сказал нагружает сервер под 100%).

Версия minishop2 (2.8.3)

Что происходило
Началась высокая нагрузка на MySQL: десятки зависших SELECT COUNT(DISTINCT msPayment.id) с вложенными INFORMATION_SCHEMA, ORD(MID(...)), CAST(...), XOR() — т.е. типичный blind SQL injection.

Все вредоносные запросы шли от пользователя, к базе.

Сайт работал через miniShop2, и инъекции шли через msPayment и msDeliveryMember в JOIN-запросах.

Пример вредоносного запроса:

SELECT COUNT(DISTINCT msPayment.id)
FROM modx_ms2_payments AS msPayment
JOIN modx_ms2_delivery_payments Member ON Member.payment_id = msPayment.id AND 7574=IF((SESSION_USER() LIKE USER()), (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS A, INFORMATION_SCHEMA.COLUMNS B, INFORMATION_SCHEMA.COLUMNS C WHERE 0 XOR 1), 7574)
WHERE msPayment.id = 1 AND msPayment.active = 1
Сергей
22 июня 2025, 12:09
modx.pro
1
1 203
0

Что делает в Tickets таблица tickets_views?

Приветствую.
Взглянул внутрь БД и увидел таблицу tickets_views от компонента tikets. В ней несколько миллионов строк. Она много места занимает. Подскажите, пожалуйста, где используются данные этой таблицы и можно ли ее очищать периодически, чтобы не рарзасталась?
weranda
15 июня 2025, 09:20
modx.pro
3 676
0

Взломали сайт на версии 2.6.5

Доброго дня всем!
Впервый сайт за 10 лет работы на MODX Revolution 2.6.5-pl сегодня подвергся «взлому».
Каким то образом в новостном блоке(поднятом из архива появились левые строчки текста с ссылкой на «недетский сайт».)
Tanya
09 июня 2025, 12:18
modx.pro
392
0

Пакет СДЭК — услуги курьерской службы для Minishop2

В MiniShop2 долгое время отсутствовал подходящий модуль для интеграции с СДЭК. После многочисленных запросов от клиентов было принято решение доработать существующий модуль. Поскольку времени на создание с нуля не было, за основу взял текущий вариант и переписал его, добавив необходимые функции.

В результате: виджет стал на 90% локальным, что положительно сказалось на скорости загрузки. Добавлена возможность отправки трек-кода клиенту напрямую из заказа, а также отправки самого заказа в СДЭК.

Реализованы новые хотелки:

  • Добавлена возможность интеграции с сервисом dadata.ru.
  • Добавлен фиксированный тариф для ПВЗ и доставки до двери.
  • Добавлена страховка к тарифу ПВЗ.
  • Обновлены иконки ПВЗ на Яндекс.Карте.
  • Кнопки выбора ПВЗ теперь наглядно отображают выбранный пункт выдачи.
  • На Яндекс.Карте показывает выбранный ВПЗ другим цветом (скрин прилагаю)
  • Отправка заказа в СДЭК
  • Обмен статусами доставки СДЭК => Minishop2
Пакет проходит тестирование на нескольких сайтах, и в случае получения положительной обратной связи планируется дальнейшая поддержка и техническое сопровождение.

Алексей
04 июня 2025, 22:55
modx.pro
1
465
+4