Нестандартная нумерация заказов в модуле "Интернет-магазин"
Актуально для версии 20
Иногда может возникнуть необходимость вести нумерацию заказов в интернет-магазине каким-либо нестандартным образом. Мы рассмотрим несколько простых способов реализовать эту возможность.
Если необходимо изменить стартовый номер заказа. Если необходимо вести счёт заказов не с единицы, а, скажем, с 2000, нужно проделать следующие шаги: Любым удобным способом зайти в базу данных; В таблице cms_reg найти запись, в которой поле var будет равно lastOrderNumber; Изменить значение поля на 2000.
Теперь следующий заказ в системе будет иметь номер 2001, следующий 2002 и так далее.
Также все эти изменения можно применить с помощью SQL запроса вида:
UPDATE cms_reg SET val = <нужный вам стартовый номер> WHERE var = 'lastOrderNumber'
2. Если необходимо использовать какой-то особый алгоритм в формировании номера заказа
Например, мы хотим, чтобы номера заказов у нас увеличивались не на 1 при каждом заказе, а на 2.
Для этого необходимо будет написать кастомный генератор номера заказа. Генератор номера заказа по умолчанию расположен в папке ~/classes/components/emarket/classes/orders/number и называется default.php.
Для создания своего генератора достаточно будет дублировать данный файл и назвать его, скажем, custom.php.В новом файле необходимо будет изменить название класса defaultOrderNumber на своё, в нашем случае это будет customOrderNumber.
За генерацию номера заказа в данном классе отвечает метод number(), перепишем его код следующим образом:
public function number() {
$umiRegistry = Service::Registry();
$lastOrderNumber = $umiRegistry->get('emarket/lastOrderNumber');
if ($lastOrderNumber) {
// Вычисляем номер заказа
$number = $lastOrderNumber + 2;
$umiRegistry->set('emarket/lastOrderNumber', $number);
$this->setOrderNumber($number);
return $number;
}
$sel = new selector('objects');
$sel->types('object-type')->name('emarket', 'order');
$sel->order('number')->desc();
$sel->limit(0, 1);
$number = $sel->first() ? ($sel->first()->number + 1) : 1;
$umiRegistry->set('emarket/lastOrderNumber', $number);
$this->setOrderNumber($number);
return $number;
}
Мы изменили строку $number = $lastOrderNumber + 2; - теперь номера наших заказов при генерации будут идти следующим образом: 2, 4, 6 и так далее.
Теперь необходимо указать в конфигурационном файле наш генератор в качестве используемого.
Находим в файле config.ini, в секции [modules] запись emarket.numbers = "default" и заменяем её на emarket.numbers = "custom" - по имени файла с нашим генератором.
После этих действий написанный нами генератор будет использоваться при генерации номеров заказа в системе.