Нестандартная нумерация заказов в модуле "Интернет-магазин"

Материал из Umicms
Версия от 11:35, 27 марта 2019; Whoa (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск

Актуально для версии 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" - по имени файла с нашим генератором.

После этих действий написанный нами генератор будет использоваться при генерации номеров заказа в системе.