От автора: в ядре OpenCart существует множество способов оплаты, и множество других доступны в магазине OpenCart в виде сторонних расширений. Но всё же ситуация может сложиться так, что понадобится что-то другое, либо не будет подходящего способа, доступного для вашего платежного шлюза, или по какой-либо другой причине. В любом случае у вас остается только один вариант: создать новый модуль оплаты OpenCart.
В этом уроке мы увидим back-end пользовательского метода, рассмотрим, как внести в список выбранный способ оплаты, а также другие способы. Кроме того, мы проверим умение создать форму конфигурации для пользовательского метода оплаты.
Предположим, что «custom» — пользовательское имя метода оплаты. Для установки товаров необходимо создать как минимум три файла. Давайте рассмотрим это более детально.
Настройка контроллера
Создаём файл контроллера admin/controller/payment/custom.php. Вставьте следующее содержимое в созданный файл контроллера custom.php. Этот файл будет отвечать за отображение формы конфигурации back-end, вызвав соответствующий вид файла, и в то же время сохраняя post значения формы в базу данных.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
<?php class ControllerPaymentCustom extends Controller { private $error = array(); public function index() { $this->language->load('payment/custom'); $this->document->setTitle('Custom Payment Method Configuration'); $this->load->model('setting/setting'); if (($this->request->server['REQUEST_METHOD'] == 'POST')) { $this->model_setting_setting->editSetting('custom', $this->request->post); $this->session->data['success'] = 'Saved.'; $this->redirect($this->url->link('extension/payment', 'token=' . $this->session->data['token'], 'SSL')); } $this->data['heading_title'] = $this->language->get('heading_title'); $this->data['entry_text_config_one'] = $this->language->get('text_config_one'); $this->data['entry_text_config_two'] = $this->language->get('text_config_two'); $this->data['button_save'] = $this->language->get('text_button_save'); $this->data['button_cancel'] = $this->language->get('text_button_cancel'); $this->data['entry_order_status'] = $this->language->get('entry_order_status'); $this->data['text_enabled'] = $this->language->get('text_enabled'); $this->data['text_disabled'] = $this->language->get('text_disabled'); $this->data['entry_status'] = $this->language->get('entry_status'); $this->data['action'] = $this->url->link('payment/custom', 'token=' . $this->session->data['token'], 'SSL'); $this->data['cancel'] = $this->url->link('extension/payment', 'token=' . $this->session->data['token'], 'SSL'); if (isset($this->request->post['text_config_one'])) { $this->data['text_config_one'] = $this->request->post['text_config_one']; } else { $this->data['text_config_one'] = $this->config->get('text_config_one'); } if (isset($this->request->post['text_config_two'])) { $this->data['text_config_two'] = $this->request->post['text_config_two']; } else { $this->data['text_config_two'] = $this->config->get('text_config_two'); } if (isset($this->request->post['custom_status'])) { $this->data['custom_status'] = $this->request->post['custom_status']; } else { $this->data['custom_status'] = $this->config->get('custom_status'); } if (isset($this->request->post['custom_order_status_id'])) { $this->data['custom_order_status_id'] = $this->request->post['custom_order_status_id']; } else { $this->data['custom_order_status_id'] = $this->config->get('custom_order_status_id'); } $this->load->model('localisation/order_status'); $this->data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses(); $this->template = 'payment/custom.tpl'; $this->children = array( 'common/header', 'common/footer' ); $this->response->setOutput($this->render()); } } |
Как мы можем видеть, имя класса следует стандартным соглашениям об именах OpenCart. Давайте разберёмся с каждым разделом. В начало index метода мы загружаем языковой файл и устанавливаем значение тега title.
1 2 |
$this->language->load('payment/custom'); $this->document->setTitle('Custom Payment Method Configuration'); |
В следующем разделе мы загрузим файл модели «setting.php, который предоставит нам методы сохранения значений post в базе данных. Мы также проверяем, доступны ли значения post , которые мы сохраним в базе данных.
1 2 3 4 5 6 7 |
$this->load->model('setting/setting'); if (($this->request->server['REQUEST_METHOD'] == 'POST')) { $this->model_setting_setting->editSetting('custom', $this->request->post); $this->session->data['success'] = 'Saved.'; $this->redirect($this->url->link('extension/payment', 'token=' . $this->session->data['token'], 'SSL')); } |
Далее, следующая пара строк кода используется только для установки статических меток, которые будут использоваться в файле шаблона.
1 2 3 4 5 6 7 8 9 |
$this->data['heading_title'] = $this->language->get('heading_title'); $this->data['entry_text_config_one'] = $this->language->get('text_config_one'); $this->data['entry_text_config_two'] = $this->language->get('text_config_two'); $this->data['button_save'] = $this->language->get('text_button_save'); $this->data['button_cancel'] = $this->language->get('text_button_cancel'); $this->data['entry_order_status'] = $this->language->get('entry_order_status'); $this->data['text_enabled'] = $this->language->get('text_enabled'); $this->data['text_disabled'] = $this->language->get('text_disabled'); $this->data['entry_status'] = $this->language->get('entry_status'); |
Затем мы установили переменную «action», чтобы убедиться, что форма передаётся нашему методу «индекс» при отправке. И таким же образом пользователь возвращается к списку способов оплаты, если нажимает кнопку «cancel».
1 2 |
$this->data['action'] = $this->url->link('payment/custom', 'token=' . $this->session->data['token'], 'SSL'); $this->data['cancel'] = $this->url->link('extension/payment', 'token=' . $this->session->data['token'], 'SSL'); |
Кроме того, есть код для заполнения значений полей формы конфигурации по умолчанию либо в режиме добавления, либо в режиме редактирования.
1 2 3 4 5 6 7 8 9 10 11 12 |
if (isset($this->request->post['text_config_one'])) { $this->data['text_config_one'] = $this->request->post['text_config_one']; } else { $this->data['text_config_one'] = $this->config->get('text_config_one'); } ... ... if (isset($this->request->post['custom_order_status_id'])) { $this->data['custom_order_status_id'] = $this->request->post['custom_order_status_id']; } else { $this->data['custom_order_status_id'] = $this->config->get('custom_order_status_id'); } |
В следующем разделе мы загрузим различные значения статуса заказа, которые доступны в этой области, и которые будут использоваться для раскрывающегося списка в форме конфигурации для поля «Order Status» (Состояние заказа).
1 2 |
$this->load->model('localisation/order_status'); $this->data['order_statuses'] = $this->model_localisation_order_status->getOrderStatuses(); |
Наконец, мы назначаем наш пользовательский файл шаблона custom.tpl и визуализируем представление.
1 2 3 4 5 6 7 8 |
$this->template = 'payment/custom.tpl'; $this->children = array( 'common/header', 'common/footer' ); $this->response->setOutput($this->render()); |
Это была настройка для файла контроллера.
Язык и файлы шаблонов
Итак, теперь, когда мы закончили с файлом контроллера, давайте создадим файлы языка и шаблона. Создаём языковой файл admin/language/english/payment/custom.php. Убедитесь, что ваш языковой файл выглядит как код, который мы предоставили ниже в примере custom.php.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php $_['heading_title'] = 'Custom Payment Method'; $_['text_enabled'] = 'Enabled'; $_['text_disabled'] = 'Disabled'; $_['text_config_one'] = 'Parameter one'; $_['text_config_two'] = 'Parameter Two'; $_['entry_status'] = 'Status:'; $_['entry_order_status'] = 'Order Status:'; $_['text_button_save'] = 'Save'; $_['text_button_cancel'] = 'Cancel'; ?> |
Как видите, мы только что установили языковые переменные, ранее используемые в файле контроллера. Это довольно легко и просто.
Давайте создадим файл вида. Создаём файл шаблона admin/view/template/payment/custom.tpl. Вставляем следующее содержимое в созданный файл шаблона custom.tpl.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
<?php echo $header; ?> <div id="content"> <div class="box"> <div class="heading"> <h1><img src="view/image/payment.png" alt="" /> <?php echo $heading_title; ?></h1> <div class="buttons"><a onclick="$('#form').submit();" class="button"><?php echo $button_save; ?></a><a href="<?php echo $cancel; ?>" class="button"><?php echo $button_cancel; ?></a></div> </div> <div class="content"> <form action="<?php echo $action; ?>" method="post" enctype="multipart/form-data" id="form"> <table class="form"> <tr> <td><?php echo $entry_order_status; ?></td> <td><select name="custom_order_status_id"> <?php foreach ($order_statuses as $order_status) { ?> <?php if ($order_status['order_status_id'] == $custom_order_status_id) { ?> <option value="<?php echo $order_status['order_status_id']; ?>" selected="selected"><?php echo $order_status['name']; ?></option> <?php } else { ?> <option value="<?php echo $order_status['order_status_id']; ?>"><?php echo $order_status['name']; ?></option> <?php } ?> <?php } ?> </select></td> </tr> <tr> <td><?php echo $entry_text_config_one; ?></td> <td><input type="text" name="text_config_one" value="<?php echo $text_config_one; ?>" size="10" /></td> </tr> <tr> <td><?php echo $entry_text_config_two; ?></td> <td><input type="text" name="text_config_two" value="<?php echo $text_config_two; ?>" size="10" /></td> </tr> <tr> <td><?php echo $entry_status; ?></td> <td><select name="custom_status"> <?php if ($custom_status) { ?> <option value="1" selected="selected"><?php echo $text_enabled; ?></option> <option value="0"><?php echo $text_disabled; ?></option> <?php } else { ?> <option value="1"><?php echo $text_enabled; ?></option> <option value="0" selected="selected"><?php echo $text_disabled; ?></option> <?php } ?> </select></td> </tr> </table> </form> </div> </div> </div> <?php echo $footer; ?> |
Опять же, это довольно легко понять: Цель этого файла шаблона — предоставить форму конфигурации для пользовательского способа оплаты. Он использует переменные, которые мы установили ранее в файле контроллера.
Как это выглядит
Мы закончили работу с файлами. Теперь пришло время двигаться дальше и увидеть всё в действии. Перейдите в раздел администрирования OpenCart к Extensions > Payment. Вы должны увидеть, что пользовательский метод указан ниже как «Cash On Delivery».
Нажмите на ссылку install, чтобы установить способ оплаты. После установки можно будет увидеть ссылку edit, чтобы открыть форму конфигурации. Нажмите ссылку edit.
Итак, это форма конфигурации, ради которой мы сделали всю тяжелую работу! Как видите, мы предоставили поля Order Status и Status. Кроме того, мы только что продемонстрировали, как можно предоставить настраиваемые параметры, а также настроить Parameter One и Parameter Two.
Заполнить форму и сохранить ее можно, нажав кнопку «Save» . Мы создали код для этого в нашем index методе контроллера, поэтому он должен работать прямо из коробки! И да, не забудьте установить статус «Enabled», если хотите, чтобы метод был доступен в интерфейсе!
Автор: Sajal Soni
Источник: //code.tutsplus.com/
Редакция: Команда webformyself.