В этом примере в форму заказа добавляется галочка "Предоплата 50%". Если она отмечена покупателем, первый платеж будет уменьшаться наполовину.
Первым делом скопируйте код формы заказа из файла assets/plugins/commerce/templates/front/order_form.tpl
в чанк, добавьте в него следующий код:
<div class="form-group">
<label><input type="checkbox" name="partial" value="1" [+c.partial+] onchange="Commerce.updateOrderData($(this.form))">
Предоплата 50%
</label>
</div>
В коде выше Commerce.updateOrderData($(this.form))
означает, что при каждом изменении значения данного поля на сервер будут отправляться данные формы.
Добавьте параметр formTpl
с именем нового чанка к вызову сниппета Order
.
Далее создайте плагин:
switch ($modx->event->name) {
case 'OnBeforePaymentCreate': {
$processor = ci()->commerce->loadProcessor();
$data = $processor->getRawData();
// получаем уже оплаченную сумму по этому заказу
$paid = $processor->getOrderPaymentsAmount($params['order_id']);
// если платежей по заказу не было, и галочка предоплаты отмечена,
// уменьшаем сумму платежа наполовину
if (!$paid && !empty($data['partial'])) {
$params['amount'] = floor($params['amount'] * 0.5);
}
break;
}
}
Это всё!