Как передать данные доп полей продавцу в заказы и на почту в miniShop2

    При работе с интернет-магазином на MODX Revolution нередко возникает необходимость добавить кастомные поля в форму оформления заказа (например, Имя, Промокод, Область, Город). Стандартный компонент miniShop2 позволяет расширить форму, но данные из этих полей по умолчанию не попадают в письмо продавцу и не отображаются в панели управления. Разберём, как решить эту задачу.

    Способы передачи данных из дополнительных полей

    Существует два основных подхода: сохранять значения в заказ (в таблицу ms2_orders или через msOrder) и отправлять их по email плагином. Рассмотрим оба варианта.

    1. Сохранение доп полей в заказ

    Для того чтобы данные из полей (например, Промокод, Область) сохранялись в заказе, необходимо создать плагин на событие msOnBeforeCreateOrder или msOnCreateOrder. В этом плагине вы можете получить значения из формы ($scriptProperties['form']) и записать их в свойство заказа:

    if ($modx->event->name == 'msOnBeforeCreateOrder') {
        $form = $scriptProperties['form'];
        $order = $scriptProperties['order'];
        $order->set('promocode', $form['Промокод']);
        $order->set('region', $form['Область']);
    }

    После этого поля появятся в списке заказов в админке (если добавить соответствующие колонки в грид).

    2. Отправка доп полей на почту продавцу

    По умолчанию miniShop2 отправляет письма с помощью сниппета msOrderEmail. Чтобы добавить в шаблон письма дополнительные поля, нужно модифицировать чанк tpl.msOrderEmail. Например, внутрь таблицы с данными заказа вставьте строку:

    <tr><td>Промокод:</td><td>[[+promocode]]</td></tr>

    Но чтобы плейсхолдер [[+promocode]] стал доступен, его нужно передать в письмо через плагин на событие msOnBeforeSendOrder:

    if ($modx->event->name == 'msOnBeforeSendOrder') {
        $order = $scriptProperties['order'];
        $form = $order->getOne('Address')->toArray();
        $modx->event->params['order']->set('promocode', $form['promocode']);
    }

    Теперь в письме продавцу отобразится значение поля Промокод.

    Пример готового решения для формы оформления заказа

    В вашей форме уже есть все необходимые поля. Обратите внимание на атрибуты name - они должны совпадать с ключами, которые вы будете обрабатывать в плагине. Например, для поля Область используйте name="Область" (или латиницу - name="region"). Главное - единообразие.

    Проверка и отладка

    После настройки плагина и чанка обязательно протестируйте оформление заказа. Проверьте:

    • Появились ли новые поля в карточке заказа в админке.
    • Пришло ли письмо с этими данными.
    • Нет ли ошибок в логах MODX (ОшибкиЖурнал ошибок).

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

    Заключение

    Настройка передачи дополнительных полей продавцу в miniShop2 сводится к двум шагам: сохранение данных в заказ через плагин и добавление этих данных в шаблон письма. Используя приведённые примеры кода, вы сможете легко расширить функционал своего магазина и не потерять важную информацию из заказов.

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