2016-08-07 1 views
-3

Проблема - выход по сопутствующим продуктам, который показывает на каждом соответствующем поле продукта тот же самый подсчитанный номер в OpenCart. Итак, он видит только основные product_id. Таким образом, необходимо указать связанный product_id как-то. Я пробовал много способов, но он не работает для меня. Может ли кто-нибудь помочь мне исправить это?Проблема Эта функция показывает мне тот же самый продукт product_id на сопутствующих продуктах

Существует функция модулей:

public function getUnitsSold($product_id) { 
        $query = $this->db->query("SELECT SUM(op.quantity) AS total FROM `" . DB_PREFIX . "order_product` op LEFT JOIN `" . DB_PREFIX . "order` o ON (op.order_id = o.order_id) WHERE o.order_status_id = '5' AND op.product_id = '" . (int)$product_id . "'"); 
       if ($query->row) { 
        return $query->row['total']; 
       } else { 
        return FALSE; 
       } 
      } 

И это просто шаблон вывода.

  <?php if ($tproducts) { ?> 
      <?php foreach ($tproducts as $product) { ?> 
     <?php if ($product['units_sold']) { ?> 
     <?php echo $text_units_sold; ?> <?php echo $product['units_sold']; ?> 
     <?php } ?> 
     <?php } ?> 
     <?php } ?> 

В контроллере, где связанный массив продуктов - это возможность указать, может быть, этот запрос функции, а затем сделать правильный вывод. что-то вроде этого units_sold?

$data['tproducts'][] = array(

       'product_id' => $result['product_id'], 

       'units_sold' => $this->db->query("SELECT SUM(op.quantity) AS total FROM `" . DB_PREFIX . "order_product` op LEFT JOIN `" . DB_PREFIX . "order` o ON (op.order_id = o.order_id) WHERE o.order_status_id = '5' AND op.product_id = '" . (int)$product_id . "'"), 

      ); 

или, может быть,

$data['tproducts'][] = array(

       'product_id' => $result['product_id'], 

       'units_sold' => $this->model_catalog_product->getUnitsSold($this->request->get['product_id']), 

      ); 
+5

' 'the' 'your' '? – Chris

+0

@ Крис: Удар окончен, да. – twicejr

ответ

0

Вы хотите сохранить количество проданных элементов на сам предмет. Увеличьте количество, как если бы оно было обратным. Итак, я бы просто ALTER TABLE oc_product ADD amount_sold INT (8) NULL DEFAULT NULL;

Затем просто отобразите это простое значение столбца. Хранение заказов должно быть изменено и будет немного медленнее (порядка 0,001 - .0001s).

Таким образом, магазин будет хорошо работать в будущем, даже когда таблица позиций вашего заказа станет огромной.

Пусть обработчик хранения будет рабочей лошадью. Посмотрите на ModelCheckoutOrder :: addOrderHistory(), когда они вычитают количество, вы должны добавить количество :)

"UPDATE " . DB_PREFIX . "product SET /*.... opencart default shit */, amount_sold = (amount_sold + " . (int)$order_product['quantity'] . ")

+0

Су, это должно выглядеть так? $ this-> db-> query ("UPDATE". DB_PREFIX. "product SET quantity = (amount - amount_sold = (amount_sold +". (int) $ order_product ['quantity']. ") WHERE product_id = '". (int) $ order_product ['product_id']. "'И subtract =' 1 '"); –

+0

, и если все в порядке, что дальше? –

+0

Если хранилище работает нормально сейчас, вам просто нужно использовать столбец «amount_sold», Шаг 1: Modifiy ControllerProductProduct :: index() для включения «amount_sold» в $ data (он будет доступен из $ this-> model_catalog-_product-> getProduct() около строки 159, поскольку он выбирает * из продукта таблица). Так что просто добавьте if ($ product_info) {$ data ['amount_sold'] = $ product_info ['amount_sold'] Шаг 2: Измените шаблон, чтобы указать на «amount_sold». Выполнено :) – twicejr