Где хранятся "незаказанные заказы"?

Тема в разделе "Общие вопросы", создана пользователем Эдди, 7 фев 2017.

  1. Эдди

    Эдди Активный пользователь

    Сообщения:
    302
    Симпатии:
    3
    Уж очень хотелось бы понять, много ли клиентов, которые кладут товар в корзину и не заказывают?
    Но что-то думается мне, что корзина эта хранится в сессиях и для меня недоступна.
    Я прав?
     
  2. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    687
    в 2-ке корзина хранится в таблице
    Но чистится раз в час для обыкновенных пользователей
    Код:
           $this->db->query("DELETE FROM " . DB_PREFIX . "cart WHERE customer_id = '0' AND date_added < DATE_SUB(NOW(), INTERVAL 1 HOUR)");
     
  3. Эдди

    Эдди Активный пользователь

    Сообщения:
    302
    Симпатии:
    3
    Супер! Спасибо.
     
  4. Эдди

    Эдди Активный пользователь

    Сообщения:
    302
    Симпатии:
    3
    Все же не понимаю про "Пропавшие заказы".
    Только что обнаружил таких запасов довольно много.
    Насколько я понимаю, пока клиент не подтвердит заказ, номер ему не присваивается.
    А в пропавших заказах есть присвоенный номер.
    Каким образом они получаются пропавшими?
     
  5. Ален

    Ален Эксперт

    Сообщения:
    2.056
    Симпатии:
    641
    Нет. Перед подтверждением и присваивается номер заказа, а после подтверждения просто меняется статус заказа.
     
  6. Эдди

    Эдди Активный пользователь

    Сообщения:
    302
    Симпатии:
    3
    То есть, клиент дошел до момента, где надо ставить галку и подтверждать. И не решился. Правильно понимаю?
    И надо срочно с ним связываться и выяснять, почему, поскольку заказ уже сформирован, и все данные клиента есть.
    Вот только почему статус у всех моих потерянных заказов - В обработке, хотя я везде выставляю Ожидание, пока вручную не подтвержу.
     
  7. DiMoss

    DiMoss Продвинутый пользователь

    Сообщения:
    876
    Симпатии:
    241
    По своему опыту могу сказать, что в основном люди просто не понимают того, что надо что то еще нажать. На небольших экранах это достаточно проблемно, ибо инструкции по оплате разворачиваются в невидимую область экрана. По хорошему надо сделать прокрутку экрана вниз, чтоб как то обозначить, что заказ еще не до конца сформирован.
     
  8. Эдди

    Эдди Активный пользователь

    Сообщения:
    302
    Симпатии:
    3
    Зато супер, что все данные их уже записаны. И можно с человеком связаться.
    А в каком файле надо подправить запрос sql, чтобы в общем списке заказов показывались и заказы со статусом = 0 ?
    Там ведь явно есть что-то типа AND order_status_id <> 0.

    Кстати, сделал спец. файл, который выводит данные корзины в каждый конкретный момент. Тоже интересно знать, кто что там делает.
     
  9. DiMoss

    DiMoss Продвинутый пользователь

    Сообщения:
    876
    Симпатии:
    241
    В модели admin/model/sale/order.php нужно подправить условие....
    PHP:
    public function getOrders($data = array()) {
    ...........
    } else {
      
    $sql .= " WHERE o.order_status_id >= '0'";
    }
    ...........


    public function 
    getTotalOrders($data = array()) {
    ...........
    } else {
      
    $sql .= " WHERE order_status_id >= '0'";
    }
     
  10. Эдди

    Эдди Активный пользователь

    Сообщения:
    302
    Симпатии:
    3
    Короче, просто это условие удалить.
    А почему в двух местах?
    Сейчас разберусь.
     
  11. DiMoss

    DiMoss Продвинутый пользователь

    Сообщения:
    876
    Симпатии:
    241
    getTotal нужен для корректного отображения общего количества заказов. К примеру на главной странице админки или на странице заказов в пагинации.
    Условие удалять не стоит, ибо пропадет возможность фильтровать заказы по статусам или вовсе выдаст ошибку и не покажет ни одного заказа. Список заказов выводится либо согласно указанному статусу, либо со всеми заказами со статусом больше нуля. Просто подставьте знак = чтоб выводились также заказы со статусом 0.
     
    Эдди нравится это.
  12. Эдди

    Эдди Активный пользователь

    Сообщения:
    302
    Симпатии:
    3
    Не вижу, в каком файле.
    sale.php ли order.php?
    Версия 2.3
     
  13. DiMoss

    DiMoss Продвинутый пользователь

    Сообщения:
    876
    Симпатии:
    241
    У себя я не вижу файла sale.php. Пользуюсь версией 2.1. Быть может в 2.3 что то поменялось - нет возможности проверить.
     
  14. Эдди

    Эдди Активный пользователь

    Сообщения:
    302
    Симпатии:
    3
    В каком у Вас?
    А там я примерно знаю измененную структуру 2.3
     
  15. Эдди

    Эдди Активный пользователь

    Сообщения:
    302
    Симпатии:
    3
    Нашел. В файле order.php. Там все иначе, чем в 2.1
     
  16. Эдди

    Эдди Активный пользователь

    Сообщения:
    302
    Симпатии:
    3
    Вот как в 2.3Х
    Файл admin/model/sale/order.php.
    Код:
                if ($implode) {
                    $sql .= " WHERE (" . implode(" OR ", $implode) . ")";
                }
            } else {
                $sql .= " WHERE o.order_status_id >= '0'"; //EDD - добавлено '=', чтобы в списке заказов показывались и Пропавшие заказы
            }
     
  17. Эдди

    Эдди Активный пользователь

    Сообщения:
    302
    Симпатии:
    3
    А вообще было бы полезно в конце списка вывести корзину неоформленную. Не так, как я ее вывел для себя отдельном файле. А в общем списке.
    В общем, не так, как у меня http://service.intomega.com/cart_taks.php
    Потому что здесь надо вспомнить, чтобы просмотреть корзину.
     
    Последнее редактирование: 12 мар 2017
  18. zovo

    zovo Новичок

    Сообщения:
    2
    Симпатии:
    0
    Добрый день. Интересует вопрос как можно просмотреть брошенные заказы в корзине у пользователей, если они не зареганы в магазине? магазин на ocstore 2.1
     
  19. Эдди

    Эдди Активный пользователь

    Сообщения:
    302
    Симпатии:
    3
    Можно сделать скриптик и вытаскивать из БД, если в саму БД лезть не хочется.
    Примерно так:
    Код:
    <?php //Подключение к MYSQL
    $dbase='База данных ваша... ... ...';
    $table1='cart';
    $table2='customer';
    $table3='product';
    $table4='option';
    db_connect($dbase,'p');
    echo '<h1>Корзина: не до конца оформленные заказы</h1>';
    $sql='SELECT
            `cart_id`,
            `api_id`,'.
            $table1.'.customer_id,'.
            $table1.'.product_id,
            `option`,'.
            $table1.'.quantity,
            DATE_FORMAT('.$table1.'.date_added, "%d-%m-%Y - %i:%H") AS `date_added`,
            `firstname`,
            `lastname`,
            `model`
          FROM '.$table1.'
          LEFT JOIN '.$table2.' ON '.$table1.'.customer_id='.$table2.'.customer_id
          LEFT JOIN '.$table3.' ON '.$table1.'.product_id='.$table3.'.product_id
          ORDER BY '.$table1.'.date_added DESC';
     
    Последнее редактирование: 7 окт 2018
  20. DiMoss

    DiMoss Продвинутый пользователь

    Сообщения:
    876
    Симпатии:
    241
    А такая инфа уже есть в БД?
    То есть надо всего то вывести инфу в интерфейс.