Статьи

Совет: принимайте несколько ваучеров в OpenCart 2.0

OpenCart — это решение для электронной коммерции на основе PHP с открытым исходным кодом, которое позволяет принимать заказы онлайн. Это позволяет клиентам совершать покупки с использованием ваучеров, но по умолчанию только по одному. Если вы хотите разрешить своим клиентам использовать несколько ваучеров одновременно, вам нужно изменить код. Я покажу вам, как это сделать в этом уроке.

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

Приборная доска

Если у нас есть система ваучеров, реализованная в OpenCart по умолчанию, в чем проблема? Давайте разберемся с этим на примере:

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

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

Этот урок разделен на три основных этапа:

  1. Изменение в контроллере
  2. Изменение в модели
  3. Изменить в представлении
  1. Перейдите в catalog/controller/checkout/cart.php .
  2. Найдите следующий код:
1
2
3
4
If(isset($this->request->post[‘voucher’]) && $this-> valid voucher())
{
$this->session->data[‘voucher’]=$this->request->post[‘voucher’];
}

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

1
2
3
4
If(isset($this->request->post[‘voucher’]) && $this-> valid voucher())
{
$this->session->data[‘voucher’][$this->request->post[‘voucher’]]=$this->request->post[‘voucher’];
}
  1. Перейдите в catalog/model/total/voucher.php .
  2. Найдите следующие строки кода:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
$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'); ,

Поэтому мы будем зацикливать наш массив ваучеров Session для получения всех примененных нами ваучеров, и код будет таким, как показано ниже. Обратите внимание, что следующий код прокомментирован для облегчения понимания.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
foreach (array_unique($this->session->data[‘voucher’]) as $voucher)
{ // foreach loop will select each array and extract the unique voucher
 
    $voucher_info = $this->model_checkout_voucher->getVoucher($voucher);
     
    // Check 1: If Voucher Exists
    if ($voucher_info) {
    // Check 2: If the voucher amount is greater than our order amount, voucher balance will be maintained
    if ($voucher_info[‘amount’] > $total) {
    $amount = $total;
    } else {
    $amount = $voucher_info[‘amount’];
    }
   // End Check 2
  
 // Array to return Updated Totals
    $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’)
    );
 // End Array
  
   $total -= $amount;
     
    } // End Check 1
     
} // End Foreach Loop
  1. Перейдите в catalog/view/theme/default/template/checkout/voucher.tpl .
  2. Найдите следующую строку кода:
1
<input type=»text» name=»voucher» value=»<?php echo $voucher; ?>» placeholder=»<?php echo $entry_voucher; ?>» id=»input-voucher» class=»form-control» />

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

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

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

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

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