Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Оглавление

Дополнение для итогов заказа

Сумма заказа складывается из строк: стоимость товаров, доставка, купон, налог, итог. Каждая строка — отдельное дополнение вида total. Чтобы добавить свой сбор или скидку, пишут ещё одно такое дополнение — здесь это сбор за маленький заказ.

Файлы

Итог состоит из страницы настроек в панели и модели на витрине:

extension/acme_hello/
├── admin/
│   ├── controller/total/small_order.php
│   ├── language/en-gb/total/small_order.php
│   └── view/template/total/small_order.twig
└── catalog/
    ├── model/total/small_order.php
    └── language/ru-ru/total/small_order.php

Часть для панели пишется точно так же, как страница настроек модуля, только пространство имён заканчивается на Total, маршрут — extension/acme_hello/total/small_order, а код настроек — total_small_order. Нужны два поля: total_small_order_status и total_small_order_sort_order.

Модель

// extension/acme_hello/catalog/model/total/small_order.php
namespace Opencart\Catalog\Model\Extension\AcmeHello\Total;
 
class SmallOrder extends \Opencart\System\Engine\Model
{
    public function getTotal(array &$totals, array &$taxes, float &$total): void
    {
        if ($this->cart->getSubTotal() >= 20) {
            return;
        }
 
        $this->load->language('extension/acme_hello/total/small_order');
 
        $fee = 3.0;
 
        $totals[] = [
            'extension' => 'acme_hello',
            'code' => 'small_order',
            'title' => $this->language->get('text_small_order'),
            'value' => $fee,
            'sort_order' => (int) $this->config->get('total_small_order_sort_order'),
        ];
 
        $total += $fee;
    }
}

Ядро по очереди вызывает getTotal() каждого включённого итога. Метод получает по ссылке три значения: список строк, налоги и накопленную сумму. Он добавляет свою строку и увеличивает сумму.

// extension/acme_hello/catalog/language/ru-ru/total/small_order.php
$_['text_small_order'] = 'Сбор за маленький заказ';

Включение

  1. Откройте Extensions → Extensions и выберите вид Order Totals.
  2. Установите «Small order fee», откройте его настройки, включите статус и задайте порядок сортировки.

Положите в корзину товар дешевле $20 и откройте index.php?route=checkout/cart — под стоимостью товаров стоит строка «Сбор за маленький заказ $3.00», а итог больше на эту сумму.

Если нового пункта в списке нет, пересоберите архив и установите пакет заново в Extensions → Installer: список файлов пакета записывается при установке.

Порядок сортировки

Строки считаются в порядке настройки sort_order, поэтому её значение важно:

СтрокаОбычный порядок
Sub-Total1
Shipping3
Taxes5
Total9

Сбор с порядком 2 считается после товаров и до налога. Настоящие значения в своём магазине смотрите в настройках каждого итога.

Скидка

Скидка — та же строка с отрицательным значением: 'value' => -5.0 и $total -= 5.0.

Частая ошибка

Строку добавляют в $totals, а $total не меняют. В корзине сбор виден, а итоговая сумма прежняя — покупатель платит меньше, чем дают строки в сумме. Каждая строка, добавленная в список, должна изменить и накопленную сумму на то же значение.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.