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

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

От автора: сегодня мы поговорим о том, как фильтровать в OpenCart способы оплаты. Если вы разработчик, вы должны часто попадать в ситуации, когда необходимо менять базовое поведение фреймворка. Такая возможность может быть заложена в UI админки, что уже хорошо! Однако для сложной кастомизации нужно что-то большее – нужно переписать код фреймворка.

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

Если вы активно разрабатываете на OpenCart, то можете знать, что способы оплаты можно фильтровать по минимальной сумме оплаты в корзине. Например, можно не показывать способ COD, если сумма в корзине меньше определенной суммы. Эта функция встроенная, ее можно выбрать при настройке способа оплаты через back end.

В этом уроке мы расширим эту функцию и попробуем ограничить способы оплаты по весу корзины. Мы обсудим, как фильтровать COD метод в корзине, если сумма заказа меньше предварительно заданной суммы. Для этого придется внести изменения в код, так как через back end такого не сделаешь.

Ранее мы уже сказали, что файлы ядра фреймворка изменять нельзя, поэтому у нас остается только один вариант – OCMOD. Не беспокойтесь, если вы не слышали про него, я расскажу про этот способ чуть ниже.

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

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

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

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

Нам пора двигаться дальше, вперед!

Что такое OCMOD?

OCMOD – система поиска и замены на основе XML, с помощью которой можно менять файлы ядра OpenCart. Необходимо создать XML файл по правилам именования OCMOD, все остальное сделают за вас. Если слышали о vQmod в OpenCart 1.5.x, то новая система преемница старой.

Пара примеров, чтобы понять возможности:

Вставка определенного кода перед любой строкой в файле.

Замена куска кода на свой.

Поиск строки в файле по регулярному выражению и замена на другую строку.

Изменение схемы базы данных OpenCart.

Много другое…

Разделы ниже помогут вам понять принцип работы, но вы также можете почитать статьи о глубоком разборе OCMOD.

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

Познакомились с OCMOD – можно идти дальше и создать модуль OCMOD.

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

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

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

Как это сделать без OCMOD?

Быстро пробежимся по файлам, которые необходимо изменить. Откройте файл catalog/controller/checkout/payment_method.php в текстовом редакторе и найдите следующий код в методе index.

$results = $this->model_extension_extension->getExtensions('payment');

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

$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. Вы можете сделать back end модуль настройки, чтобы настраивать это значение через админку.

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

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

Создание и установка модуля OCMOD

Создание модуля

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

<?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 вставляет наш код.

Установка модуля

Перейдите на back end и далее Extensions > Extension Installer. Кликните на upload и выберите файл, созданный в предыдущем разделе. Если все будет хорошо, отобразится сообщение об успехе.

Перейдите в Extensions > Modifications – на этой странице должно отобразиться расширение OCMOD.

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

Перейдите на front end и добавьте пару товаров в корзину, чтобы общая сумма была менее 100. Перейдите к оформлению заказа. На вкладке Payment methods отсутствует метод COD. У вас должен быть активен хотя бы один метод оплаты, в противном случае OpenCart скажет вам No Payment options are available.

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

Заключение

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

Автор: Sajal Soni

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

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

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

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

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

OpenCart: быстрый старт, первые результаты

Создайте свой первый интернет-магазин на 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