Створення кастомного розширення order total в OpenCart

345

Від автора: у цій статті ми розглянемо, як відбувається в OpenCart створення розширень. Розширення order totals дозволяють маніпулювати сумою замовлення в процесі його оформлення. Зручний спосіб як додавати додатковий податок, так і давати знижку через різні методи. Ми створимо повноцінне розширення order totals, яке буде застосовувати додатковий податок, заданий у формі налаштувань на стороні back end.

Щоб створити кастомное розширення order totals, нам необхідно створити файли back end і front end. Файли back end відповідають за форму налаштувань, а файли front end визначають логіку розширення. Природно, OpenCart не визначить ваше розширення на сторінці кошика без файлів front end.

Будемо працювати в останній версії OpenCart. Також припускаю, що ви знаєте основи процес розробки модульної в OpenCart. Перейдемо відразу до справи!

Файли back end

У цьому розділі ми створимо файли back end. В кінці розділу в списку розширень order totals з’явиться наше кастомное. Також ви зможете встановити і налаштувати його через кастомний форму налаштувань.

Створіть файл контролера admin/controller/total/customot.php з таким кодом.

Створення кастомного розширення order total в OpenCart

Інтернет-магазин на OpenCart!

Створити інтернет-магазин на самій популярної CMS OpenCart з нуля!

Приступити до створення

load->language(‘total/customot’);
$this->document->setTitle($this->language->get(‘heading_title’));
$this->load->model(‘setting/setting’);
if (($this->request->server[‘REQUEST_METHOD’] == ‘POST’) && $this->validate()) {
$this->model_setting_setting->editSetting(‘customot’, $this->request->post);
$this->session->data[‘success’] = $this->language->get(‘text_success’);
$this->response->redirect($this->url->link(‘extension/total’, ‘token=’ . $this->session->data[‘token’], ‘SSL’));
}
$data[‘heading_title’] = $this->language->get(‘heading_title’);
$data[‘text_edit’] = $this->language->get(‘text_edit’);
$data[‘text_enabled’] = $this->language->get(‘text_enabled’);
$data[‘text_disabled’] = $this->language->get(‘text_disabled’);
$data[‘text_none’] = $this->language->get(‘text_none’);
$data[‘entry_customtax’] = $this->language->get(‘entry_customtax’);
$data[‘entry_status’] = $this->language->get(‘entry_status’);
$data[‘entry_sort_order’] = $this->language->get(‘entry_sort_order’);
$data[‘button_save’] = $this->language->get(‘button_save’);
$data[‘button_cancel’] = $this->language->get(‘button_cancel’);
if (isset($this->error[‘warning’])) {
$data[‘error_warning’] = $this->error[‘warning’];
} else {
$data[‘error_warning’] = “;
}
$data[‘breadcrumbs’] = array();
$data[‘breadcrumbs’][] = array(
‘text’ => $this->language->get(‘text_home’),
‘href’ => $this->url->link(‘common/dashboard’, ‘token=’ . $this->session->data[‘token’], ‘SSL’)
);
$data[‘breadcrumbs’][] = array(
‘text’ => $this->language->get(‘text_total’),
‘href’ => $this->url->link(‘extension/total’, ‘token=’ . $this->session->data[‘token’], ‘SSL’)
);
$data[‘breadcrumbs’][] = array(
‘text’ => $this->language->get(‘heading_title’),
‘href’ => $this->url->link(‘total/customot’, ‘token=’ . $this->session->data[‘token’], ‘SSL’)
);
$data[‘action’] = $this->url->link(‘total/customot’, ‘token=’ . $this->session->data[‘token’], ‘SSL’);
$data[‘cancel’] = $this->url->link(‘extension/total’, ‘token=’ . $this->session->data[‘token’], ‘SSL’);
if (isset($this->request->post[‘customot_customtax’])) {
$data[‘customot_customtax’] = $this->request->post[‘customot_customtax’];
} else {
$data[‘customot_customtax’] = $this->config->get(‘customot_customtax’);
}
if (isset($this->request->post[‘customot_status’])) {
$data[‘customot_status’] = $this->request->post[‘customot_status’];
} else {
$data[‘customot_status’] = $this->config->get(‘customot_status’);
}
if (isset($this->request->post[‘customot_sort_order’])) {
$data[‘customot_sort_order’] = $this->request->post[‘customot_sort_order’];
} else {
$data[‘customot_sort_order’] = $this->config->get(‘customot_sort_order’);
}
$data[‘header’] = $this->load->controller(‘common/header’);
$data[‘column_left’] = $this->load->controller(‘common/column_left’);
$data[‘footer’] = $this->load->controller(‘common/footer’);
$this->response->setOutput($this->load->view(‘total/customot.tpl’, $data));
}
protected function validate() {
if (!$this->user->hasPermission(‘змінити’, ‘total/customot’)) {
$this->error[‘warning’] = $this->language->get(‘error_permission’);
}
return !$this->error;
}
}

Як бачите, це досить стандартний контролер back end в OpenCart. Основне завдання контролера файлу – установка лейблів та інших елементів, які будуть викликатися на формі налаштувань. Також він обробляє відправку форми шляхом валідації та збереження значень форми в базі даних.

Тепер створіть мовний файл admin/language/english/total/customot.php з таким кодом.

Код зрозуміти не важко, тут просто задаються лейбли.

І нарешті, створіть файл шаблону подання admin/view/template/total/customot.tpl.

У файлі зберігається XHTML код нашої форми налаштувань.

З back end закінчили. Перейдіть в Extensions > Order Totals. Розширення Custom Order Total повинно бути в списку разом з іншими розширеннями. Давайте встановимо і налаштуємо його, як показано на скріншоті нижче.

Створення кастомного розширення order total в OpenCart

Я задав Custom Tax значення 5, тобто поверх загальної суми замовлення будемо стягуватися ще 5%. Заповніть значення і збережіть форму.

Створення кастомного розширення order total в OpenCart

Інтернет-магазин на OpenCart!

Створити інтернет-магазин на самій популярної CMS OpenCart з нуля!

Приступити до створення

Файли front end

У цьому розділі ми створимо файли front end, щоб наше розширення визначалося на сторінці оформлення замовлення.

Створіть файл моделі catalog/model/total/customot.php з таким кодом.

load->language(‘total/customot’);
// get customtax
$customtax_percentage = $this->config->get(‘customot_customtax’);
if ($customtax_percentage > 0) {
$customtax_value = round(($total * $customtax_percentage) / 100);
$total_data[] = array(
‘code’ => ‘customot’,
‘title’ => $this->language->get(‘text_customot’),
‘value’ => $customtax_value,
‘sort_order’ => $this->config->get(‘customot_sort_order’)
);
$total += $customtax_value;
}
}
}

Важливий файл і центральна логіка нашого розширення. OpenCart викликає метод getTotal для всіх розширень order totals на сторінці оформлення замовлення. Зверніть увагу на важливі аргументи $total_data, $total і $taxes.

Змінна $total_data являє собою масив даних розширень order total. Змінна $total – загальна сума замовлення, а $taxes зберігає застосовуваний податок.

У цьому методі ми отримуємо значення Custom Tax, яке було задано в формі налаштувань на стороні back end. Далі ми обчислюємо суму кастомного податку і присвоюємо її змінну $customtax_value. Потім ми записуємо нашу інформацію про розширення в масив $total_data і додаємо кастомный податок у змінну $total.

Нам залишилося створити мовний файл catalog/language/english/total/customot.php з таким кодом.

З front end закінчили!

Демо front end

Додайте товари в корзину, і ви побачите, як наш кастомный податок применился до загальної суми, як показано на скріншоті нижче.

Створення кастомного розширення order total в OpenCart

Таким чином, ви можете впливати на загальну суму замовлення через розширення order totals.

Висновок

У цій статті ми дізналися, як створити кастомное розширення order totals, а також як маніпулювати загальною сумою замовлення. Дуже зручно прикріплювати будь кастомный податок або знижку. Пропозиції і питання вітаються!

Створення кастомного розширення order total в OpenCart

Інтернет-магазин на OpenCart!

Створити інтернет-магазин на самій популярної CMS OpenCart з нуля!

Приступити до створення