Как передать данные в заказы MODX Revolution

    При разработке интернет-магазина на MODX Revolution часто возникает необходимость добавить дополнительные поля в форму оформления заказа - например, выбор региона или города. В этой статье мы разберём, как с помощью конструкции {foreach} передать данные из выпадающего списка в заказ, чтобы они сохранялись и были доступны в административной панели.

    Проблема: данные из select не попадают в заказ

    Многие разработчики сталкиваются с ситуацией, когда селект с регионами отображается, но выбранное значение не сохраняется в заказе. Стандартный код с {foreach ['region'] as $field} может не работать, если не настроена правильная передача параметров через miniShop2 или другой компонент оформления заказов.

    Решение: настройка поля и шаблона

    Для корректной передачи данных необходимо:

    • Добавить кастомное поле в системные настройки miniShop2 (например, region).
    • Убедиться, что в чанке формы используется правильное имя атрибута name у элемента select.
    • Обработать значение на серверной стороне с помощью сниппета или плагина.

    Пример рабочего кода для select

    Вместо {foreach ['region'] as $field} используйте простой HTML-список:

    <select name="region" class="form-select">
      <option value="">Выберите область:</option>
      <option value="penzenskaya">Пензенская</option>
      <option value="saratovskaya">Саратовская</option>
    </select>

    Убедитесь, что атрибут name совпадает с именем поля в настройках компонента. Если вы используете miniShop2, добавьте поле region в массив ms2_order_fields через системные настройки или плагин.

    Обработка данных на сервере

    Для сохранения значения напишите небольшой плагин на событие msOnCreateOrder или используйте готовый сниппет. Пример кода:

    if ($modx->event->name == 'msOnCreateOrder') {
      $order = $modx->event->params['order'];
      $region = $_POST['region'];
      if ($region) {
        $order->set('region', $region);
        $order->save();
      }
    }

    Этот код сохранит выбранный регион в заказе, и вы сможете увидеть его в админке.

    Частые ошибки и их исправление

    • Ошибка: данные не приходят - проверьте, что форма отправляется методом POST и имя поля не содержит пробелов или спецсимволов.
    • Ошибка: foreach не выводит значения - конструкция {foreach ['region'] as $field} не предназначена для простого select; используйте обычный HTML или чанк с плейсхолдерами.
    • Ошибка: значение не сохраняется - убедитесь, что поле добавлено в список разрешённых полей заказа в настройках компонента.

    Следуя этим рекомендациям, вы сможете без проблем передавать любые дополнительные данные в заказы MODX, улучшая функциональность интернет-магазина и удобство для пользователей.

    Часто задаваемые вопросы