Примечание. Это руководство предназначено для osCommerce v4.
1. Создание файла

Сначала вам нужно создать файл для нового модуля и поместить его в следующий каталог.

/lib/common/modules/orderShipping/

Например, давайте назовем этот новый модуль доставки custom.php .

Скелет файла должен выглядеть следующим образом:

<?php
/**
 * namespace
 */
namespace common\modules\orderShipping;
/**
 * used classes
 */
use common\classes\modules\ModuleShipping;
use common\classes\modules\ModuleStatus;
use common\classes\modules\ModuleSortOrder;
/**
 * class declaration
 */
class custom extends ModuleShipping {

    /**
     * variables
     */
    public $enabled = false;
    public $code = 'custom';
    public $icon = '';
    public $title = '';
    public $description = '';

    /**
     * default values for translation
     */
    protected $defaultTranslationArray = [
        'MODULE_CUSTOM_TEXT_TITLE' => 'Custom rates',
        'MODULE_CUSTOM_TEXT_DESCRIPTION' => 'My custom rates',
    ];

    /**
     * class constructor
     */
    function __construct() {

        parent::__construct();
        $this->title = MODULE_CUSTOM_TEXT_TITLE;
        $this->description = MODULE_CUSTOM_TEXT_DESCRIPTION;
        if (!defined('MODULE_CUSTOM_STATUS')) {
            $this->enabled = false;
            return false;
        }
        $this->sort_order = MODULE_CUSTOM_SORT_ORDER;
        $this->enabled = ((MODULE_CUSTOM_STATUS == 'True') ? true : false);
        $this->tax_class = MODULE_CUSTOM_TAX_CLASS;
    }

    /**
     * you custom methods
     */
    function quote($method = '') {
        $methods = [];
        $methods[] = [
            'id' => 1,
            'title' => 'Today',
            'cost' => 10
        ];
        $methods[] = [
            'id' => 2,
            'title' => 'Next day',
            'cost' => 5,
        ];
        $this->quotes = [
            'id' => $this->code,
            'module' => MODULE_CUSTOM_TEXT_TITLE,
            'methods' => $methods
        ];
        if ($this->tax_class > 0) {
            $this->quotes['tax'] = \common\helpers\Tax::get_tax_rate($this->tax_class, $this->delivery['country']['id'], $this->delivery['zone_id']);
        }
        if (tep_not_null($this->icon)) {
            $this->quotes['icon'] = tep_image($this->icon, $this->title);
        }
        return $this->quotes;
    }

    /**
     * configuration fields
     */
    public function configure_keys() {
        return array(
            'MODULE_CUSTOM_STATUS' => array(
                'title' => 'Enable My Custom Shipping',
                'value' => 'True',
                'description' => 'Do you want to enable shipping?',
                'sort_order' => '0',
                'set_function' => 'tep_cfg_select_option(array(\'True\', \'False\'), ',
            ),
            'MODULE_CUSTOM_TAX_CLASS' => array(
                'title' => 'Tax Class',
                'value' => '0',
                'description' => 'Use the following tax class on the shipping fee.',
                'sort_order' => '0',
                'use_function' => '\\common\\helpers\\Tax::get_tax_class_title',
                'set_function' => 'tep_cfg_pull_down_tax_classes(',
            ),
            'MODULE_CUSTOM_SORT_ORDER' => array(
                'title' => 'Sort Order',
                'value' => '0',
                'description' => 'Sort order of display.',
                'sort_order' => '100',
            ),
        );
    }

    public function describe_status_key() {
        return new ModuleStatus('MODULE_CUSTOM_STATUS', 'True', 'False');
    }

    public function describe_sort_key() {
        return new ModuleSortOrder('MODULE_CUSTOM_SORT_ORDER');
    }

}

Примечание: обратите внимание на обязательные элементы:

  • namespace указывающее размещение класса

  • использовать классы модулей , используемые для создания установки

  • объявление класса с обязательным наследованием от ModuleShipping

  • variables необходимые для вашего модуля

  • ключи для транзакции

  • конструктор выполняет инициализацию

  • функция цитаты для предоставления списка методов

  • поддержка tax_class

  • минимальный набор полей конфигурации

  • функция description_status_key отвечающая за условие

  • функция description_sort_key отвечающая за порядок сортировки

Не рекомендуется закрывать php tag во избежание отображения непечатаемых символов на страницах.


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

После того, как вы вошли в админ-панель вашего сайта, нажмите на вкладки « Модули » и « Доставка ». Включите переключатели « Показать неактивные » и «Показать не установленные », найдите свой модуль и нажмите кнопку «Установить».

 

Проверьте клавиши и включен  ли модуль . Если в вашей версии есть раздел Доступно для , заполните его и сохраните изменения.

3. Тестирование
Если у вас несколько каналов продаж, обязательно примените настройки к нужному. Проверьте список ваших модулей.

Если вы следовали всем рекомендациям, информация на фронтенде будет следующей.

Как видно на предыдущем снимке экрана, налог не применялся к стоимости доставки. Чтобы исправить это, измените налоговый класс на нужное значение в настройках модуля.

После этого соответствующие значения на фронтенде увеличиваются на 20%.

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


Предыдущая статья:

Создание платежного модуля

Следующая статья:

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