Фільтрація способів оплати за вагою кошика в OpenCart

339

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

Але ви не хочете правити файли фреймворку безпосередньо, це погана звичка. Крім того, після цього оновлення фреймворку перетворюється на справжній кошмар, якщо ви встигли внести зміни в безліч файлів. Тому доводиться шукати інші можливості без необхідності правити ядро. Сьогодні в більшості фреймворків є такого роду система, що дозволяє проводити описані маніпуляції для розширення.

Якщо ви активно розробляєте на OpenCart, то можете знати, що способи оплати можна фільтрувати за мінімальною сумою оплати в кошику. Наприклад, можна не показувати спосіб COD, якщо сума в кошику менше певної суми. Ця функція вбудована, її можна вибрати при налаштуванні способу оплати через back end.

У цьому уроці ми розширимо цю функцію і спробуємо обмежити способи оплати по вазі кошика. Ми обговоримо, як фільтрувати COD метод в кошику, якщо сума замовлення менше попередньо заданої суми. Для цього доведеться внести зміни в код, так як через back end такого не зробиш.

Раніше ми вже сказали, що файли ядра фреймворку змінювати не можна, тому в нас залишається тільки один варіант – OCMOD. Не турбуйтеся, якщо ви не чули про нього, я розповім про цей спосіб трохи нижче.

Фільтрація способів оплати за вагою кошика в OpenCart

Інтернет-магазин на 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

Інтернет-магазин на 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 модуль налаштування, щоб настроювати значення через адмінку.

Далі йде умова, що перевіряє загальний вага кошика на мінімально необхідний для COD. У цьому умови фільтрується метод COD в масиві $results.

Із зміною коду закінчили. У наступному розділі ми повторимо фільтрацію, але через OCMOD – це я обіцяв вам на початку статті!

Створення і установка модуля OCMOD

Створення модуля

Створіть файл filter_payment_method.ocmod.xml з таким кодом.

Filtering payment methods based on cart weight
Code_Tutsplus_Filter_Payment_Methods
1.0
Code Tutsplus
http://code.tutsplus.com
model_extension_extension->getExtensions(‘payment’);
]]>
model_extension_extension->getExtensions(‘payment’);
/*** our custom code ***/
$totalCartWeight = $this->cart->getWeight();
$minCodWeight = 100;
if ($totalCartWeight

Велика частина тегів говорить сама за себе. Для нас найбільш важливий тег file – тег задає ім’я файлу, над яким буде виконана операція. З допомогою тега search проводиться пошук коду, а тег add вставляє наш код.

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

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

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

Фільтрація способів оплати за вагою кошика в OpenCart

Ви успішно встановили розширення!

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

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

Висновок

У цій статті ми дізналися, як за допомогою системи OCMOD фільтрувати методи оплати в кошику по вазі. Сподіваюся, вам сподобалося, і ви дізналися щось нове в OpenCart.

Фільтрація способів оплати за вагою кошика в OpenCart

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

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

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