Наприклад, ви хочете додати обов'язкове поле "Місто". Насамперед створіть чанк із вмістом файлу assets/plugins/commerce/templates/front/order_form.tpl
і вкажіть ім'я цього чанка в параметрі formTpl
при виклику сніпету Order
.
Додати поле в чанк:
<div class="form-group">
<input class="input" type="text" name="city" placeholder="Город" value="[+city.value+]">
[+city.error+]
</div>
тепер поле відображатиметься у формі замовлення та відправлятиметься на сервер разом з формою, але воно не проходитиме перевірку під час відправки та не відображатиметься в панелі адміністрування магазином та в листах повідомленнях.
Для перевірки поля потрібно додати правила валідації у виклик Сніппет Order
, вони ідентичні правилам FormLister
. Мінімальне правило буде таким:
"!city": {
"lengthBetween": {
"params": [2, 255],
"message": "Назва міста має бути довжиною від 2 до 255 символів"
}
}
Тепер потрібно вирішити питання з відображенням у списку замовлень та перегляду замовлення. Для цього створіть плагін та прив'яжіть його до подій OnManagerBeforeOrdersListRender
и OnManagerBeforeOrderRender
:
switch ($modx->event->name) {
case 'OnManagerBeforeOrdersListRender': {
// додаємо стовпець до таблиці замовлень
$params['columns']['city'] = [
'title' => 'Місто',
'content' => function($data, $DL, $eDL) {
return !empty($data['fields']['city']) ? $data['fields']['city'] : '';
},
'sort' => 50,
];
break;
}
case 'OnManagerBeforeOrderRender': {
// додаємо поле на сторінку перегляду замовлення
$params['groups']['payment_delivery']['fields']['city'] = [
'title' => 'Місто',
'content' => function($data) {
return !empty($data['fields']['city']) ? $data['fields']['city'] : '';
},
'sort' => 20,
];
break;
}
}
Тепер потрібно додати поле до сторінки редагування замовлення. Для цього додамо в плагін обробку події OnManagerBeforeOrderEditRender
:
switch ($modx->event->name) {
case 'OnManagerBeforeOrderEditRender': {
unset($params['fields']['delivery_method']);
$params['fields']['city'] = [
'title' => 'Місто',
'content' => function($data) {
$value = !empty($data['fields']['city']) ? $data['fields']['city'] : '';
return '<input type="text" class="form-control" name="order[fields][city]" value="' . htmlentities($value) . '">';
},
'!rules' => [
'lengthBetween' => [
'params' => [2, 255],
'message' => 'Назва міста має бути довжиною від 2 до 255 символів',
],
],
'sort' => 40,
];
break;
}
}
Залишилося вивести поле у листі-повідомленні. Для цього потрібно скопіювати в чанк вміст стандартного листа з файлу assets/plugins/commerce/lang/russian-UTF8/order_report.tpl
і додати ім'я цього чанка в параметрі reportTpl
при виклику сніппета Order
.
У чанці для виведення поля використовуйте [+order.fields.city+]
.