Полезный совет: Принятие нескольких подарочных сертификатов в OpenCart 2.0

Полезный совет: Принятие нескольких подарочных сертификатов в OpenCart 2.0

От автора: OpenCart — это решение для электронной коммерции с открытым исходным кодом, которое позволяет принимать и обрабатывать заказы онлайн. Оно дает возможность клиентам совершать покупки с использованием ваучеров, но по умолчанию можно использовать только один ваучер за раз. Если вы хотите, чтобы ваши клиенты могли использовать не один подарочный сертификат OpenCart, а сразу несколько, то вам нужно будет изменить код. В этом руководстве я покажу, как это сделать.

Как создать подарочный ваучер?

Только администраторы и доверенные пользователи back-end могут создавать подарочные ваучеры. Для этого OpenCart содержит модуль по умолчанию. На следующем скриншоте показан раздел, в котором пользователь может создавать ваучеры.

Так в чем проблема?

Если у нас в OpenCart по умолчанию реализована система ваучеров, в чем проблема? Поясним это с помощью примера:
Недавно моя знакомая хотела купить через OpenCart пару предметов, стоимость которых составляла 800 долларов, но у нее было только 500 долларов и два подарочных ваучера стоимостью 250 долларов каждый. Поэтому она позвонила мне и попросила помочь ей. Поскольку OpenCart позволяет использовать для покупки только один ваучер за раз, она не могла купить нужные вещи.

Решение

Чтобы решить эту проблему, нам нужно добавить опцию для использования нескольких ваучеров, чтобы клиенты не испытывали никаких трудностей. Вот решение, в котором мы изменим несколько строк кода, и это поможет справиться с данной проблемой. Данное руководство состоит из трех основных этапов:

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

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

Приступить к созданию

Изменение контроллера

Изменение модели

Изменение представления

Файл контроллера

Откройте файл catalog/controller/checkout/cart.php. Найдите следующий код:

if(isset($this->request->post['voucher']) && $this-> valid voucher())
{
$this->session->data['voucher']=$this->request->post['voucher'];
}

Измените приведенный выше код таким образом:

if(isset($this->request->post['voucher']) && $this-> valid voucher())
{
$this->session->data['voucher'][$this->request->post['voucher']]=$this->request->post['voucher']; // creates an array for multiple vouchers
}

Файл модели

Откройте файл catalog/model/total/voucher.php. Найдите следующие строки кода:

$this->load->model('checkout/voucher');
 
$voucher_info = $this->model_checkout_voucher->getVoucher($this->session->data['voucher']);
 
 if ($voucher_info) {
 if ($voucher_info['amount'] > $total) {
 $amount = $total; 
 } else {
 $amount = $voucher_info['amount']; 
 } 
 
 $total_data[] = array(
 'code' => 'voucher',
 'title' => sprintf($this->language->get('text_voucher'), $this->session- >data['voucher']),
 'text' => $this->currency->format(-$amount),
 'value' => -$amount,
 'sort_order' => $this->config->get('voucher_sort_order')
 );
 
 $total -= $amount;
 }

Нам нужно запустить внешний цикл для извлечения всех ваучеров, для которых мы задали массив в шаге 1. Мы поместим внешний цикл после $this->load->model(‘checkout/voucher’);. Мы будем обрабатывать через цикл Массив ваучеров сессии, чтобы получить все ваучеры, которые мы применяем. Код для этого должен быть таким, как показано ниже. Обратите внимание, что в коде размещены комментарии, чтобы его было проще понять.

foreach (array_unique($this->session->data['voucher']) as $voucher)
 { // цикл foreach выбирает все элементы массива и извлекает уникальный ваучер
 
 $voucher_info = $this->model_checkout_voucher->getVoucher($voucher); // fetch the order details
 
 // Проверка 1: Существует ли ваучер 
 if ($voucher_info) {
 // Проверка 2: Превышает ли количество ваучеров количество заказов, результат сохраняется
 if ($voucher_info['amount'] > $total) {
 $amount = $total; 
 } else {
 $amount = $voucher_info['amount']; 
 }
 // Конец проверки 2
 
  // Массив для возвращения обновленной общей суммы
 $total_data[] = array( 'code' => 'voucher', 'title' => sprintf($this->language->  get('text_voucher'), $voucher),
 'text' => $this->currency->format(-$amount),
 'value' => -$amount,
 'sort_order' => $this->config->get('voucher_sort_order')
 );
  // Конец массива
 
 $total -= $amount; // Вычитает количество для общих сумм по заказу
 
 } // Конец проверки 1
 
 } // Конец цикла Foreach

Файл представления

Откройте файл catalog/view/theme/default/template/checkout/voucher.tpl. Найдите следующую строку кода:

<input type="text" name="voucher" value="<?php echo $voucher; ?>" placeholder="<?php echo $entry_voucher; ?>" id="input-voucher" class="form-control" />

Замените ее на:

<input type="text" name="voucher" value="" placeholder="<?php echo $entry_voucher; ?>" id="input-voucher" class="form-control" /> 

Мы решили нашу проблему! Фактически, мы просто выполнили для этого несколько простых хаков, поэтому нам не пришлось разрабатывать новый модуль или расширение. Мы только изменили несколько строк кода.

Заключение

В этой статье мы представили успешное решение для добавления в интернет-магазин нескольких ваучеров. Поскольку OpenCart не позволяет покупателям по умолчанию использовать несколько ваучеров за раз, мы изменили код, чтобы они могли использовать столько ваучеров, сколько захотят. Это поможет клиентам легко и просто совершать покупки без каких-либо проблем.

В наших следующих статьях мы внедрим в систему OpenCart несколько реальных бизнес-инструментов, поэтому следите за нашими обновлениями. Спасибо за внимание!

Автор: Zaman Riaz

Источник: http://code.tutsplus.com/

Редакция: Команда webformyself.

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

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

Приступить к созданию
Самые свежие новости IT и веб-разработки на нашем Telegram-канале

Интернет-магазин на OpenCart

Создание магазина с уникальным шаблоном на CMS OpenCart

Научиться

Метки:

Похожие статьи:

Комментарии Вконтакте:

Комментарии Facebook:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree