Статьи

Фильтрация способов оплаты по весу корзины в OpenCart

Как разработчику, вам часто приходится сталкиваться со сценарием, который заставляет вас изменить основное поведение платформы. Если это что-то, что уже предоставлено интерфейсом администратора или что-то подобное, вы можете идти! Но вам понадобится больше, чем в случае сложных настроек — вам придется изменить код платформы.

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

Сегодня мы обсудим аналогичный сценарий в контексте OpenCart. Если вы активно участвуете в разработке OpenCart, вы, вероятно, знаете, что вы можете отфильтровать способы оплаты по минимальной сумме оформления корзины. Например, вы можете отказаться от перечисления метода наложенного платежа, если общая сумма заказа меньше определенной суммы. Он встроен, и вы можете установить его при настройке способа оплаты из серверной части.

В этом уроке мы расширим его и попытаемся ограничить способы оплаты в зависимости от общего веса корзины. Мы обсудим, как фильтровать метод ХПК во время оформления заказа, если вес корзины меньше определенного предварительно определенного значения. Для достижения этой функциональности требуются изменения в коде, так как это не что-то настраиваемое с самого сервера.

Как упоминалось ранее, вы не должны изменять какие-либо основные файлы фреймворка, и это оставляет нам возможность выбора OCMOD. Не волнуйтесь, если вы не знакомы с этим, как я представлю это в следующем разделе.

Я предполагаю, что вы используете последнюю версию OpenCart, и на момент написания этой статьи это OpenCart 2.2.0.0. Кроме того, система OCMOD работает только с OpenCart 2.xxx и выше, что дает вам еще одну причину для установки последней версии.

Так что это хорошо для нас, чтобы двигаться вперед. Пошли!

OCMOD — это система поиска и замены на основе XML, которая позволяет изменять основные файлы каркаса OpenCart. Вы определяете файл XML в соответствии с соглашениями OCMOD, и он сделает все остальное. Если вы слышали о системе vQmod в OpenCart 1.5.x, она является преемницей этой системы.

Давайте перечислим несколько примеров, чтобы понять, на что он способен:

  • Вставьте определенный кусок кода перед любой конкретной строкой в ​​файле.
  • Замените блок кода вашим собственным блоком кода.
  • Найдите строку в файле с помощью регулярных выражений и замените ее другой строкой.
  • Измените схему базы данных OpenCart.
  • Многое другое…

Хотя следующие несколько разделов должны помочь вам понять, как это работает, вы также можете взглянуть на это подробное объяснение OCMOD .

Если вы не знакомы ни с vQmod, ни с OCMOD, я бы порекомендовал вам ознакомиться с вышеупомянутой статьей, поскольку в этом руководстве рассматривается использование OCMOD.

Познакомившись с OCMOD, мы перейдем к следующему разделу, в котором строится модуль OCMOD для достижения вышеупомянутой настройки.

Давайте кратко рассмотрим файл, который необходимо изменить в нашем случае. Идите вперед и откройте файл catalog/controller/checkout/payment_method.php в вашем любимом текстовом редакторе и найдите следующий фрагмент в методе index .

1
$results = $this->model_extension_extension->getExtensions(‘payment’);

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
$results = $this->model_extension_extension->getExtensions(‘payment’);
 
/*** our custom code ***/
$totalCartWeight = $this->cart->getWeight();
$minCodWeight = 100;
 
if ($totalCartWeight < $minCodWeight) {
    $updated_results = array();
 
    foreach ($results as $result) {
      if ($result[‘code’] != ‘cod’) {
        $updated_results[] = $result;
      }
    }
 
    $results = $updated_results;
}
/*** our custom code ***/

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

Сначала мы выбираем общий вес корзины, используя метод getWeight объекта Cart . Для простоты мы жестко закодировали минимальный требуемый вес для метода COD до 100. Конечно, вы могли бы сделать внутренний модуль конфигурации, чтобы вы могли настраивать его со стороны администратора.

Далее, есть условие if которое проверяет общий вес корзины с минимальным весом наложенного платежа и на основании этого фильтрует метод COD из массива $results .

Итак, вот и все, что касается модификации кода. В следующем разделе мы добьемся этого с помощью OCMOD, и я обещал вам это в начале статьи!

Создайте файл filter_payment_method.ocmod.xml со следующим содержимым.

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
29
30
31
32
33
34
35
<?xml version=»1.0″ encoding=»utf-8″?>
<modification>
    <name>Filtering payment methods based on cart weight</name>
    <code>Code_Tutsplus_Filter_Payment_Methods</code>
    <version>1.0</version>
    <author>Code Tutsplus</author>
    <link>http://code.tutsplus.com</link>
    <file path=»catalog/controller/checkout/payment_method.php»>
        <operation>
            <search><![CDATA[
            $results = $this->model_extension_extension->getExtensions(‘payment’);
            ]]></search>
            <add position=»replace»><![CDATA[
            $results = $this->model_extension_extension->getExtensions(‘payment’);
 
            /*** our custom code ***/
            $totalCartWeight = $this->cart->getWeight();
            $minCodWeight = 100;
             
            if ($totalCartWeight < $minCodWeight) {
              $updated_results = array();
                 
              foreach ($results as $result) {
                if ($result[‘code’] != ‘cod’) {
                  $updated_results[] = $result;
                }
              }
 
              $results = $updated_results;
            }
            /*** our custom code ***/
            ]]></add>
        </operation>
    </file>
</modification>

Как видите, большинство тегов говорят сами за себя. Самый важный тег — это <file> , который определяет имя файла, над которым будет выполняться операция. Тег <search> используется для поиска кода, который мы ищем, и, наконец, мы использовали <add> для внедрения нашего кода.

Перейдите на сервер и перейдите к Расширения> Установщик расширений . Нажмите на кнопку загрузки и выберите файл, который мы создали в предыдущем разделе. Если все идет хорошо, вы должны увидеть сообщение об успехе.

Перейдите к Расширениям> Модификации , и вы должны увидеть свое расширение OCMOD в списке на этой странице.

изменения

Вы успешно установили расширение!

Перейдите во внешний интерфейс и добавьте пару продуктов в корзину, чтобы общий вес корзины оставался ниже 100. Теперь запустите процесс оформления заказа и на вкладке Способы оплаты вы должны заметить, что нет доступных наложенных платежей . Конечно, у вас должен быть включен как минимум еще один способ оплаты, в противном случае OpenCart будет жаловаться, что варианты оплаты недоступны .

Итак, на сегодня все! Таким образом, вы можете пойти дальше и использовать систему OCMOD для любой настройки, которая требует от вас изменения основных файлов.

В этой статье мы узнали, как использовать систему OCMOD для фильтрации способов оплаты при оформлении заказа на основе общего веса корзины. Надеюсь, вам понравилось и вы узнали что-то новое в OpenCart.

Не забудьте поделиться своими мыслями и запросами, используя ленту комментариев ниже.