Свои поля в форме оформления заказа Minishop2
Иногда требуется добавить несколько специфичных полей в форму заказа, которых нет в таблице Address.
В данном случае, например, реквизиты юр. лица — ИНН, БИК, расчетный счет и тд.
Bezumkin предлагает простое решение для добавления любых полей в любом количестве с помощью одного снипета и плагина.
Для этого в чанке формы заказа нужно их указать:
<div class="control-group input-parent"> <label class="control-label" for="inn"><span class="required-star">*</span> ИНН</label> <div class="controls"> <input type="text" name="inn" value="[[+inn]]" class="[[+errors.inn]]"> </div> </div>
А в нужном месте получить в виде плейсхолдеров через вызов снипета:
[[!msGetOrderProperties?id=`[[+id]]`]] [[+address.properties.inn]]
Те если в форме задать имя [[+inn]] то потом данные будут доступны с префиксом address.properties. например в чанке отправки письма.
Код снипета msGetOrderProperties:
<?php if (empty($id)) {return $modx->lexicon('ms2_err_order_nf');} $miniShop2 = $modx->getService('minishop2'); $miniShop2->initialize($modx->context->key); if (!$modx->loadClass('pdofetch', MODX_CORE_PATH . 'components/pdotools/model/pdotools/', false, true)) {return false;} $pdoFetch = new pdoFetch($modx, $scriptProperties); if (!$order = $modx->getObject('msOrder', $id)) {return $modx->lexicon('ms2_err_order_nf');} if ((empty($_SESSION['minishop2']['orders']) || !in_array($id, $_SESSION['minishop2']['orders'])) && $order->get('user_id') != $modx->user->id && $modx->context->key != 'mgr') { return !empty($tplEmpty) ? $pdoFetch->getChunk($tplEmpty) : ''; } if(!$outer = $order->getOne('Address')->toArray('address.')) return; $props = $outer['address.properties']; if (!empty($props) && is_array($props)) { foreach ($props as $key => $value) { $outer['address.properties.'.$key] = $value; } } if (empty($tplOuter)) { $modx->setPlaceholders($outer); } else { return $pdoFetch->getChunk($tplOuter, $outer); }
Код плагина OrderProperties:
<?php switch($modx->event->name) { case 'msOnCreateOrder': $id = $msOrder->get('id'); $address = $modx->getObject('msOrderAddress', $id); $json = json_encode($_POST); $address->set('properties', $json); $address->save(); break; }
Не забываем поставить галочку в настройках msOnCreateOrder
Комментарии ()