Как передать данные доп полей продавцу в заказы и на почту в 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 сводится к двум шагам: сохранение данных в заказ через плагин и добавление этих данных в шаблон письма. Используя приведённые примеры кода, вы сможете легко расширить функционал своего магазина и не потерять важную информацию из заказов.