Номера заказов в minishop2
Как можно сделать нумерацию заказов по порядку, но начиная не с 1, а, например, с 500?
Комментарии: 17
переопределить класс заказа
в нем переопределить метод getNum()
думаю достаточно поменять одну строчку
в нем переопределить метод getNum()
думаю достаточно поменять одну строчку
$num = date('ym') . '/0';
на $num = date('ym') . '/500';
public function getNum()
{
$cur = date('ym');
$num = 0;
$c = $this->modx->newQuery('msOrder');
$c->where(array('num:LIKE' => "{$cur}%"));
$c->select('num');
$c->sortby('id', 'DESC');
$c->limit(1);
if ($c->prepare() && $c->stmt->execute()) {
$num = $c->stmt->fetchColumn();
}
if (empty($num)) {
$num = date('ym') . '/500';
}
$num = explode('/', $num);
$num = $cur . '/' . ($num[1] + 1);
return $num;
}
Имелось ввиду чтобы номера заказов были сквозные. То есть сейчас номер заказа это год месяц/порядковый номер в рамках месяца. Можно ли сделать, чтобы шло просто 500, 501, 502 и т.п. и не сбрасывалось при начале нового месяца
аналогично
public function getNum()
{
$cur = date('ym');
$num = 0;
$c = $this->modx->newQuery('msOrder');
$c->where(array('num:LIKE' => "{$cur}%"));
$c->select('num');
$c->sortby('id', 'DESC');
$c->limit(1);
if ($c->prepare() && $c->stmt->execute()) {
$num = $c->stmt->fetchColumn();
}
if (empty($num)) {
$num = '500';
}
$num = explode('/', $num);
$num = end($num) + 1;
return $num;
}
Добрый вечер, пробовал сделать. Возникла проблема, в том, что номера заказов повторяются при оформлении. Например — оформил заказ, номер заказа — 1, оформил заказ еще раз — номер заказа 1 и т.д., в общем повторение идет.
Нумерация также не работает из первого варианта, просто ничего не происходит при смене цифры.
Нумерация также не работает из первого варианта, просто ничего не происходит при смене цифры.
Не работает так
Попробуйте убрать строчку или поставьте сюда свой разделитель
$num = explode('/', $num);
пробовал
Тогда полный код давайте, соусы
public function getNum()
{
$cur = date('ym');
$num = 0;
$c = $this->modx->newQuery('msOrder');
$c->where(array('num:LIKE' => "{$cur}%"));
$c->select('num');
$c->sortby('id', 'DESC');
$c->limit(1);
if ($c->prepare() && $c->stmt->execute()) {
$num = $c->stmt->fetchColumn();
}
if (empty($num)) {
$num = '2864';
}
$num = end($num) + 1;
return $num;
}
В вашем примере нужно просто скопировать код выше и изменить «500» на «2864», если же разделитель по умолчанию другой то вот пример:
if (empty($num)) {
$num = date('dm') . '-000';
}
$num = explode('-', $num);
$num = $cur . '-' . sprintf('%03d',($num[1] + 1));
я так и сделал, но он начинает с 1
Проверьте еще раз, код/логи/консоль
public function getNum()
{
$cur = date('ym');
$num = 0;
$c = $this->modx->newQuery('msOrder');
$c->where(array('num:LIKE' => "{$cur}%"));
$c->select('num');
$c->sortby('id', 'DESC');
$c->limit(1);
if ($c->prepare() && $c->stmt->execute()) {
$num = $c->stmt->fetchColumn();
}
if (empty($num)) {
$num = '2864';
}
$num = explode('/', $num);
$num = end($num) + 1;
return $num;
}
у меня срабатывает, проставляет 2865, но при повторном, снова 2865
skrinshoter.ru/s/200819/oBnYJvpZ?a
skrinshoter.ru/s/200819/oBnYJvpZ?a
Добрый день. Подскажите, а если вообще разделитель не нужен? пусть будет номер заказа и без слеша сразу месяц и год. Как сделать?
Все оказалось просто
{
$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 = $num + 1;
return $num;
}
при оплате через yandex кассу выдает ошибку
Fatal error: Class 'msOrderHandler' not found in /core/components/minishop2/custom/cart/myOrderHandler.php on line 2
сделано через кастомный класс и соотвтсвенно его не видит, что с этим делать? <?php
if(!class_exists('msOrderHandler')) {
require_once dirname(dirname(dirname(__FILE__))) . '/model/minishop2/msorderhandler.class.php';
}
class myOrderHandler extends msOrderHandler {
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 = $num + 1;
return $num;
}
}
решение, может кому то пригодится
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.