1. Создание файла
Сначала вам нужно создать файл для нового модуля и поместить его в следующий каталог.
/lib/common/modules/orderTotal/
Например, давайте назовем этот новый общий модуль ot_custom_fee.php.
Скелет файла должен выглядеть следующим образом:
<?php /** * namespace */ namespace common\modules\orderTotal; /** * used classes */ use common\classes\modules\ModuleTotal; use common\classes\modules\ModuleStatus; use common\classes\modules\ModuleSortOrder; use common\helpers\Tax; /** * class declaration */ class ot_custom_fee extends ModuleTotal { /** * variables */ public $title; public $output; /** * default values for translation */ protected $defaultTranslationArray = [ 'MODULE_ORDER_TOTAL_CUSTOM_FEE_TITLE' => 'Custom fee', 'MODULE_ORDER_TOTAL_CUSTOM_FEE_DESCRIPTION' => 'Custom module description' ]; /** * class constructor */ function __construct() { parent::__construct(); $this->code = 'ot_custom_fee'; $this->title = MODULE_ORDER_TOTAL_CUSTOM_FEE_TITLE; $this->description = MODULE_ORDER_TOTAL_CUSTOM_FEE_DESCRIPTION; if (!defined('MODULE_ORDER_TOTAL_CUSTOM_FEE_STATUS')) { $this->enabled = false; return false; } $this->enabled = ((MODULE_ORDER_TOTAL_CUSTOM_FEE_STATUS == 'true') ? true : false); $this->sort_order = MODULE_ORDER_TOTAL_CUSTOM_FEE_SORT_ORDER; $this->output = []; } /** * your custom process */ function process($replacing_value = -1, $visible = false) { $currencies = \Yii::$container->get('currencies'); $order = $this->manager->getOrderInstance(); if (defined('MODULE_ORDER_TOTAL_CUSTOM_FEE_FEE') && MODULE_ORDER_TOTAL_CUSTOM_FEE_FEE > 0) { $taxation = $this->getTaxValues(MODULE_ORDER_TOTAL_CUSTOM_FEE_TAX_CLASS, $order); $tax_class_id = $taxation['tax_class_id']; $tax = $taxation['tax']; $tax_description = $taxation['tax_description']; $gift_wrap_amount += $order->info['total'] * MODULE_ORDER_TOTAL_CUSTOM_FEE_FEE / 100; $gift_wrap_tax_amount += Tax::roundTax(Tax::calculate_tax($gift_wrap_amount, $tax)); $gift_wrap_amount_inc += Tax::add_tax($gift_wrap_amount, $tax); $order->info['tax'] += $gift_wrap_tax_amount; $order->info['tax_groups']["$tax_description"] += $gift_wrap_tax_amount; $order->info['total'] += ($gift_wrap_amount + $gift_wrap_tax_amount); $order->info['total_inc_tax'] += ($gift_wrap_amount + $gift_wrap_tax_amount); $order->info['total_exc_tax'] += $gift_wrap_amount; parent::$adjusting += $currencies->format_clear($gift_wrap_amount, true, $order->info['currency'], $order->info['currency_value']); } $this->output[] = array( 'title' => $this->title . ':', 'text' => $currencies->format($gift_wrap_amount_inc, true, $order->info['currency'], $order->info['currency_value']), 'value' => $gift_wrap_amount_inc, 'text_exc_tax' => $currencies->format($gift_wrap_amount, true, $order->info['currency'], $order->info['currency_value']), 'text_inc_tax' => $currencies->format(($gift_wrap_amount + $gift_wrap_tax_amount), true, $order->info['currency'], $order->info['currency_value']), 'tax_class_id' => $tax_class_id, 'value_exc_vat' => $gift_wrap_amount, 'value_inc_tax' => ($gift_wrap_amount + $gift_wrap_tax_amount), 'prefix' => '+', ); } /** * configuration fields */ public function configure_keys() { return [ 'MODULE_ORDER_TOTAL_CUSTOM_FEE_STATUS' => [ 'title' => 'Display Custom fee', 'value' => 'true', 'description' => 'Do you want to display the Custom fee?', 'sort_order' => '1', 'set_function' => 'tep_cfg_select_option(array(\'true\', \'false\'), ', ], 'MODULE_ORDER_TOTAL_CUSTOM_FEE_FEE' => [ 'title' => 'Fee', 'value' => '0', 'description' => 'Additional fee in percentage', 'sort_order' => '2', ], 'MODULE_ORDER_TOTAL_CUSTOM_FEE_TAX_CLASS' => [ 'title' => 'Tax Class', 'value' => '0', 'description' => 'Use the following tax class on the payment fee.', 'sort_order' => '3', 'use_function' => '\\common\\helpers\\Tax::get_tax_class_title', 'set_function' => 'tep_cfg_pull_down_tax_classes(', ], 'MODULE_ORDER_TOTAL_CUSTOM_FEE_SORT_ORDER' => [ 'title' => 'Sort Order', 'value' => '4', 'description' => 'Sort order of display.', 'sort_order' => '4', ], ]; } public function describe_status_key() { return new ModuleStatus('MODULE_ORDER_TOTAL_CUSTOM_FEE_STATUS', 'true', 'false'); } public function describe_sort_key() { return new ModuleSortOrder('MODULE_ORDER_TOTAL_CUSTOM_FEE_SORT_ORDER'); } }
Примечание: обратите внимание на обязательные элементы:
пространство имен , указывающее размещение класса
использовать классы модулей, используемые для создания установки
объявление класса с обязательным наследованием от ModuleTotal
variables необходимые для вашего модуля
keys для транзакции
конструктор выполняет инициализацию
функция процесса для вычислений
поддержка tax_class
минимальный набор полей конфигурации
функция description_status_key отвечающая за условие
функция description_sort_key отвечающая за порядок сортировки
Не рекомендуется закрывать php tag во избежание отображения непечатаемых символов на страницах.
2. Установка модуля
После того, как вы вошли в админ-панель своего веб-сайта, нажмите «Модули», «Структура заказа» и необходимые вкладки внешнего интерфейса . Включите переключатели « Показать неактивные» и «Показать не установленные», найдите свой модуль и нажмите кнопку «Установить » .
Проверьте клавиши и включен ли модуль . Если в вашей версии есть раздел Доступно для , заполните его и сохраните изменения.
3. Тестирование
Если у вас несколько каналов продаж, обязательно примените настройки к нужному. Убедитесь, что статус установленного вами модуля включен.
Если вы следовали всем рекомендациям, информация на фронтенде будет следующей.
Как видно на предыдущем скриншоте, дополнительная комиссия в процентах и налог на нее не применялись к общей сумме. Чтобы исправить это, добавьте дополнительную комиссию в процентах и измените налоговый класс на нужное значение в настройках модуля.
После этого применяются соответствующие значения на переднем конце и увеличиваются на 20%.
4. Вывод
Этот пример самый простой. В большинстве случаев предоставленные решения должны соответствовать вашим требованиям. Однако этот пример дает представление о том, как подготовиться к использованию более сложных структур, использующих API для получения ставок. Если вы знакомы со старыми модулями, вам не составит труда их обновить.