Номера заказов в minishop2

Как можно сделать нумерацию заказов по порядку, но начиная не с 1, а, например, с 500?
Анастасия
10 апреля 2018, 20:31
modx.pro
1
1 028
0

Комментарии: 16

Володя
11 апреля 2018, 09:09
0
переопределить класс заказа

в нем переопределить метод 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;
    }
    Анастасия
    11 апреля 2018, 10:57
    0
    Имелось ввиду чтобы номера заказов были сквозные. То есть сейчас номер заказа это год месяц/порядковый номер в рамках месяца. Можно ли сделать, чтобы шло просто 500, 501, 502 и т.п. и не сбрасывалось при начале нового месяца
      Володя
      11 апреля 2018, 11:21
      0
      аналогично
      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;
          }
        Дима
        06 мая 2019, 23:39
        0
        Добрый вечер, пробовал сделать. Возникла проблема, в том, что номера заказов повторяются при оформлении. Например — оформил заказ, номер заказа — 1, оформил заказ еще раз — номер заказа 1 и т.д., в общем повторение идет.

        Нумерация также не работает из первого варианта, просто ничего не происходит при смене цифры.
          Станислав
          20 августа 2019, 16:15
          0
          Не работает так
            ElenaLelo
            20 августа 2019, 16:24
            0
            Попробуйте убрать строчку или поставьте сюда свой разделитель
            $num = explode('/', $num);
              Станислав
              20 августа 2019, 16:26
              0
              пробовал
                ElenaLelo
                20 августа 2019, 16:28
                0
                Тогда полный код давайте, соусы
                  Станислав
                  20 августа 2019, 16:29
                  0
                  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;
                      }
                    ElenaLelo
                    20 августа 2019, 16:46
                    0
                    В вашем примере нужно просто скопировать код выше и изменить «500» на «2864», если же разделитель по умолчанию другой то вот пример:
                    if (empty($num)) {
                                $num = date('dm') . '-000';
                            }
                            $num = explode('-', $num);
                            $num = $cur . '-' . sprintf('%03d',($num[1] + 1));
                      Станислав
                      20 августа 2019, 16:57
                      0
                      я так и сделал, но он начинает с 1
                        ElenaLelo
                        20 августа 2019, 17:05
                        0
                        Проверьте еще раз, код/логи/консоль
                        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;
                            }
                        Станислав
                        20 августа 2019, 17:12
                        0
                        у меня срабатывает, проставляет 2865, но при повторном, снова 2865
                        skrinshoter.ru/s/200819/oBnYJvpZ?a
    Станислав
    20 августа 2019, 19:38
    +1
    Все оказалось просто
    {
            $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;
        }
      Станислав
      21 августа 2019, 19:29
      0
      при оплате через yandex кассу выдает ошибку
      Fatal error: Class 'msOrderHandler' not found in /core/components/minishop2/custom/cart/myOrderHandler.php on line 2
      сделано через кастомный класс и соотвтсвенно его не видит, что с этим делать?
        Станислав
        21 августа 2019, 19:57
        +1
        <?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;
            }
        }
        решение, может кому то пригодится
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          16