Меняем нумерацию заказов в minishop2

Необходимо переопределить функцию getNum(), которая отвечает за получение порядкового номера.
Изначально она формирует номер по формату «годмесяц/порядковый номер». Каждый месяц нумерация будет начинаться с 1.

Для переопределения создаем файл с названием, напрмиер, myorderhandler.php и размещает по адресу
/core/components/minishop2/custom/order/myorderhandler.php

Содержимое будет иметь вид
<?php
if (!class_exists('msOrderInterface')) {
    require_once dirname(dirname(dirname(__FILE__))) . '/model/minishop2/msorderhandler.class.php';
}

class myOrderHandler extends msOrderHandler {
	/**
     * Return current number of order
     *
     * @return string
     */
    public function getNum()
    {
        $num = 0;
        $c = $this->modx->newQuery('msOrder');
        $c->select('num');
        $c->sortby('id', 'DESC');
        $c->limit(1);
        if ($c->prepare() && $c->stmt->execute()) {
            $num = $c->stmt->fetchColumn();
        }
        $num++;

        return $num;
    }
}

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

Также потребуется зарегистрировать новый класс. Для этого необходимо запустить компонент Console и выполнить код:
if ($miniShop2 = $modx->getService('miniShop2')) {
    $miniShop2->addService('order', 'myOrderHandler',
        '{core_path}components/minishop2/custom/order/myorderhandler.php'
    );
}

3 комментария

touols
Вы блин пишите правильную инструкцию. А 2 часа по вашей возился и матерился не работало ничего.
Переходим в папку core/components/minishop2/custom/ и выбираем подходящее место для файлика — в зависимости от того, что мы саобираемся расширять. Допустим это будет order. Создаем файл с любым названием, которое оканчивается на .class.php.

Внутри этого файлика пишем

class msOrderHandlerMy extends msOrderHandler{
// И тут уже можно переопределить существующий метод, либо создать свой.
}
После этого переходим в системные настройки MiniShop2, и там указываем имя вашего класса (мой пример msOrderHandlerMy) в настройке ms2_order_handler_class, или ms2_cart_handler_class для нового msCartHandler
переходим в системные настройки MiniShop2, и там указываем имя вашего класса не хватает.
admin
Вы видимо не выполнили в Console код, тогда ничего в системные настройки добавлять не требовалось
touols
Код в консоле выполнил. После этого надо прописать класс. Выполнете вашу инструкцию и проверьте сами. Код в консоле только указывает где класс обработчика искать.