У цьому прикладі до форми замовлення додається галочка "Передплата 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;
}
}
Це все!