Помогите доработать код вывода количества проданных товаров

Тема в разделе "Общие вопросы", создана пользователем Vipsaler, 14 окт 2023.

  1. Vipsaler

    Vipsaler Пользователь

    Сообщения:
    76
    Симпатии:
    1
    Приветствую! Есть необходимость вывести количество проданных товаров в модуле "Рекомендуемые".
    Что сделано:
    1. В файл /catalog/controller/extension/module/featured.php добавлен код:
    Код:
    $data['total_sales'] = $this->model_catalog_product->getProductSalesTotal($this->request->get['product_id']);
    2. В файл /catalog/model/catalog/product.php добавлен код:
    Код:
    public function getProductSalesTotal($product_id) {    
    
            $query = $this->db->query("SELECT COUNT(DISTINCT order_id) AS total FROM " . DB_PREFIX . "order_product WHERE product_id = '" . (int)$product_id . "'");  
            if (isset($query->row['total'])) {
                return $query->row['total'];
            } else {
                return 0;
            }
        }
    3. В файл /catalog/view/theme/default/template/extension/module/featured.tpl добавлено:
    Код:
    {{ total_sales }}
    В результате получаю количество - 0 :(
    Подскажите где и что нужно поправить. Спасибо!!!

    P.S. Opencart 3.0.3.8
     
    Последнее редактирование: 14 окт 2023
  2. zema50

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

    Сообщения:
    802
    Симпатии:
    91
    мда уж, наворотили вы )))
    COUNT вы подсчитываете количество строк, а если вы хотите подсчитать количество проданных товаров, вам надо обращаться к таблице order_product и подсчитывать по количеству товаров quantity
    Код:
    SELECT SUM(quantity) FROM oc_order_product where `product_id`= $product_id
    ;
     
  3. Vipsaler

    Vipsaler Пользователь

    Сообщения:
    76
    Симпатии:
    1
    Спасибо, что откликнулись. Не могли бы вы поделиться полным куском кода для product.php
    Прописываю то, что вы скинули выше, но получаю ошибку, видаться что-то делаю не так.
     
  4. Blast

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

    Сообщения:
    192
    Симпатии:
    66
    0 видимо потому что в $this->request->get['product_id'] пусто. Там находится ид товара только если вы зашли в карточку какого-то товара. маловероятно, что вы выводите этот модуль на странице карточки товара.
    если же вы хотите посчитать кол-во продаж каждого рекомендуемого товара, то внимательно посмотрите как ид товаров там получается в цикле. и куда записываются данные каждого товара.
     
  5. Vipsaler

    Vipsaler Пользователь

    Сообщения:
    76
    Симпатии:
    1
    В магазине всего один товар. Он выводится на главной модулем "Рекомендуемые". Вот нужно отобразить количество его продаж. Можно в модуле, а можно и просто на странице вне модуля.
     
  6. Tom

    Tom Специалист

    Сообщения:
    607
    Симпатии:
    180
    1. В файле catalog/model/catalog/product.php:
    Найдите строку public function getProduct($product_id) {
    Перед этой строкой добавьте :

    Код:
    public function getQuantityProduct($product_id){
        $query = $this->db->query("SELECT `product_id`, SUM(`quantity`) AS `total` FROM `" . DB_PREFIX . "order_product` WHERE `product_id` = " . (int)$product_id);
        $res = $query->row;
        return $res['total'];
        }
    2. В файле catalog/language/ru-ru/extension/module/featured.php:

    Добавьте :

    $_['text_qty'] = 'Всего продано:';

    3. В файле catalog/controller/extension/module/featured.php:

    Найдите строку $data['products'][] = array(

    Перед этой строкой добавьте :

    Код:
    $summ = $this->model_catalog_product->getQuantityProduct($product_info['product_id']);
    После этой же строки $data['products'][] = array(

    Код:
    'sale' => $summ,
    В файле catalog/view/theme/*/template/extension/module/featured.twig:

    В нужном вам месте добавьте так например:

    Код:
     <div class="block_qty"><div class="text_qty">{{ text_qty }}</div><div class="order_qty"> {{ product.sale }}</div></div>
    Ну и немного css стилей :
    Код:
     .block_qty {display: flex;align-items: center;margin: 0 0 20px;font-size: .85em;color: #777;white-space: nowrap;line-height: 1.3em;}
    .block_qty .text_qty {display: flex;align-items: center;min-height: 20px;font-size: 1.1em;font-weight:bold;}
    .block_qty .order_qty {display: flex;align-items: center;min-height: 20px;margin-left: 5px;font-size: 1.3em;font-weight:100;}
     
    Vipsaler нравится это.
  7. Vipsaler

    Vipsaler Пользователь

    Сообщения:
    76
    Симпатии:
    1
    О... даже стилей накидали) спасибо, работает :)
     
  8. Tom

    Tom Специалист

    Сообщения:
    607
    Симпатии:
    180
    Да не за что.
    Взял из собственного модификатора который был написан под мой же шаблон лет 5 назад.
    Хорошего дня.
     
    Последнее редактирование: 15 окт 2023
    Vipsaler нравится это.