Ruslan Brest, rb.labtodo.com
Backend web-developer: CodeIgniter, PHP, MySQL, OpenCart, PrestaShop, MaxSite CMS

Opencart 1.5.1.3 (backend): Продажи - Заказы - Товары: показ колонки SKU в списке товаров

Просмотров: 10538 RSS 28
Howto » OpenCart
,

admin: Продажи - Заказы - Товары: добавлена колонка SKU

Выводится ТЕКУЩЕЕ значение SKU из базы. То есть если продали товар, затем SKU изменился - старый не сохраняется в отличие от названия товара, модели, цены и прочего. То есть при просмотре старых заказов могут быть неточности: вы увидите состояние SKU не на тот момент (когда был сделан заказ), а на нынешний.

commit 3b5e001193b5e9c3c64ee9886455c6a1761aaba8
Author: Ruslan Brest <rb@labtodo.com>
Date:   Fri Nov 11 13:21:33 2011 +0200
    [+] admin: Продажи - Заказы - Товары: добавлена колонка SKU
    
    Выводится ТЕКУЩЕЕ значение SKU из базы. То есть если продали товар, затем SKU изменился - старый не сохраняется
    в отличие от названия товара, модели, цены и прочего
diff --git a/upload/admin/controller/sale/order.php b/upload/admin/controller/sale/order.php
index 2a2178a..dbc181f 100644
--- a/upload/admin/controller/sale/order.php
+++ b/upload/admin/controller/sale/order.php
@@ -1111,6 +1111,7 @@ class ControllerSaleOrder extends Controller {
 			$this->data['text_credit_remove'] = $this->language->get('text_credit_remove');
 			
 			$this->data['column_product'] = $this->language->get('column_product');
+			$this->data['column_sku']     = $this->language->get('column_sku');
 			$this->data['column_model'] = $this->language->get('column_model');
 			$this->data['column_quantity'] = $this->language->get('column_quantity');
 			$this->data['column_price'] = $this->language->get('column_price');
@@ -1320,6 +1321,7 @@ class ControllerSaleOrder extends Controller {
 					'order_product_id' => $product['order_product_id'],
 					'product_id'       => $product['product_id'],
 					'name'    	 	   => $product['name'],
+					'sku'    	 	   => $product['sku'],
 					'model'    		   => $product['model'],
 					'option'   		   => $option_data,
 					'quantity'		   => $product['quantity'],
diff --git a/upload/admin/language/english/sale/order.php b/upload/admin/language/english/sale/order.php
index fe25149..fe4b35b 100644
--- a/upload/admin/language/english/sale/order.php
+++ b/upload/admin/language/english/sale/order.php
@@ -65,6 +65,7 @@ $_['column_date_added']       = 'Date Added';
 $_['column_date_modified']    = 'Date Modified';
 $_['column_total']            = 'Total';
 $_['column_product']          = 'Product';
+$_['column_sku']              = 'SKU';
 $_['column_model']            = 'Model';
 $_['column_quantity']         = 'Quantity';
 $_['column_price']            = 'Unit Price';
diff --git a/upload/admin/language/russian/sale/order.php b/upload/admin/language/russian/sale/order.php
index a8f4724..3efb7d1 100644
--- a/upload/admin/language/russian/sale/order.php
+++ b/upload/admin/language/russian/sale/order.php
@@ -65,6 +65,7 @@ $_['column_date_added']     = 'Дата добавления';
 $_['column_date_modified']    = 'Дата изменения';
 $_['column_total']          = 'Итого';
 $_['column_product']        = 'Товар';
+$_['column_sku']            = 'Артикул';
 $_['column_model']          = 'Модель';
 $_['column_quantity']       = 'Количество';
 $_['column_price']          = 'Цена за единицу';
diff --git a/upload/admin/model/sale/order.php b/upload/admin/model/sale/order.php
index 22483c2..8a4a449 100644
--- a/upload/admin/model/sale/order.php
+++ b/upload/admin/model/sale/order.php
@@ -365,7 +365,7 @@ class ModelSaleOrder extends Model {
 	}
 	
 	public function getOrderProducts($order_id) {
-		$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$order_id . "'");
+		$query = $this->db->query("SELECT op.*,p.sku FROM " . DB_PREFIX . "order_product op LEFT JOIN ".DB_PREFIX."product p ON (op.product_id = p.product_id)  WHERE order_id = '" . (int)$order_id . "'");
 		
 		return $query->rows;
 	}
diff --git a/upload/admin/view/template/sale/order_info.tpl b/upload/admin/view/template/sale/order_info.tpl
index e5d04fe..3c3f13b 100644
--- a/upload/admin/view/template/sale/order_info.tpl
+++ b/upload/admin/view/template/sale/order_info.tpl
@@ -252,6 +252,7 @@
         <table id="product" class="list">
           <thead>
             <tr>
+              <td class="left"><?php echo $column_sku; ?></td>
               <td class="left"><?php echo $column_product; ?></td>
               <td class="left"><?php echo $column_model; ?></td>
               <td class="right"><?php echo $column_quantity; ?></td>
@@ -262,6 +263,7 @@
           <?php foreach ($products as $product) { ?>
           <tbody id="product-row<?php echo $product['order_product_id']; ?>">
             <tr>
+              <td class="left"><?php echo $product['sku']; ?></td>
               <td class="left"><?php if ($product['product_id']) { ?>
                 <a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?></a>
                 <?php } else { ?>
@@ -285,7 +287,7 @@
           <?php foreach ($totals as $totals) { ?>
           <tbody id="totals">
             <tr>
-              <td colspan="4" class="right"><?php echo $totals['title']; ?>:</td>
+              <td colspan="5" class="right"><?php echo $totals['title']; ?>:</td>
               <td class="right"><?php echo $totals['text']; ?></td>
             </tr>
           </tbody>
twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru digg.com friendfeed.com liveinternet.ru livejournal.ru yandex.ru del.icio.us
Комментариев: 28
  1. Доброго времени суток.

    Не нашел подобной темы и решил написать здесь.

    Как мне вывести количество товара на складе в карточке товара? ( в наличии ** шт.)

    Буду очень признателен.

  2. 2012-03-31 в 06:39:21 | Ruslan Brest

    Включите их отображение в админке, в настройках магазина.

  3. Спасибище :)))) Я половина кода перерыл и даже нашел запрос

  4. Заодно не подскажете как это вывести в списке товаров которые уже по категориям.

  5. 2012-03-31 в 07:51:29 | Ruslan Brest

    В catalog/controller/product/category.php

    найдите строку:

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

    под ней добавьте

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

    После этого в шаблоне catalog/view/theme/default/template/product/category.tpl выводите в любое удобное место, например рядом с ценой (echo $product['quantity'])

  6. 2012-05-02 в 00:57:53 | Максим

    Не работает ваш код!!! Внёс все исправления, что вы тут предложили, результата ноль! ocStore 1.5.1.3.

  7. 2012-05-02 в 18:28:01 | Ruslan Brest

    Работает. "Результата ноль" быть попросту не может - вы либо ошибки будете получать, либо то, что на картинке.

  8. 2012-09-20 в 17:32:16 | Евгений

    Добрый день. спасибо за ваш ресурс - ОЧЕНЬ помогает. Есть один вопросик, допустим у меня 5-7 магазинов с одной БД 1С, мне нужно вывести в карточке товара наличие товара в каждом магазине.модуль обмена данными установлен.

  9. 2013-01-25 в 19:43:36 | Оксана

    Здравствуйте. Все появилось, но плюс и вот эта надпись

    Notice: Undefined variable: column_sku in /home/cjpierci/public_html/shop/admin/view/template/sale/order_info.tpl on line 279

    Что за ошибка? Все перерыла. Помогииите,пожалуйста....

    Да, возможно еще и отражение в счете (кнопка показать счет)? Очень нужно

  10. 2013-01-25 в 20:01:23 | Оксана

    Дополнение к предыдущему вопросу.

    Артикул стал 2-й колонкой, в шапке он отмечен Товар.

    Колонка 1-я Товар,как и было, а в шапке эта ошибка вылазит

    Notice: Undefined variable: column_sku in /home/cjpierci/public_html/shop/admin/view/template/sale/order_info.tpl on line 279

  11. 2013-01-26 в 10:53:33 | Ruslan Brest

    В TPL нет указанной в ошибке переменной (column_sku). Значит ошиблись где-то при переносе. У меня в коде эта переменная инициализируется в контроллере.

    Колонки где-то едут? Ну значит и там где-то ошибка допущена. Может строки перепутаны. Пардон, но я не умею точно угадывать, что именно в коде не так, глядя только на номера строк.

  12. у меня почему то все работает только слово артикул не пишет 1.5.4.1

  13. Хорошо!!!

    Правда, артикул не попадает в инвойс. :( при нажатии кнопки "Показать счет".

    Как добавить?

  14. Хотелось бы видеть артикул и здесь:

    …/index.php?route=checkout/cart

    …/index.php?route=checkout/checkout

  15. 2013-06-07 в 21:43:14 | Василий П.

    Такая же фигня, пишет Notice: Undefined variable: column_sku и Notice: Undefined index: sku in

    Что не так?

  16. 2013-06-07 в 21:52:32 | Василий П.

    А, все нормально! У автора строки не соответствуют. А встречаются подобные блоки по три раза. Автор, надо было писать хоть начало функции какая! Таким же кстати образом и для инвойса запилил!

  17. 2013-06-07 в 23:01:51 | Ruslan Brest

    Вы на версии 1.5.1.3 делаете? Если нет, то какие могут быть претензии к номерам строк и названиям функций? Рецепт сделан на 1513, в более новых версиях функции вообще могут по-другому называться или отсутствовать.

    По поводу формата и как лучше - всем не угодишь. Одним названия функций подавай, другие ничего про какие-то функции слышать не хотят - им надо ткнуть, в какой строчке что заменить. Поэтому я пишу для себя и делюсь рецептами: кому пригодится - пользуйтесь, адаптируйте, делайте по аналогии. Извините, но я не могу всем разжёвывать подробно и так, как им удобней - на это никакого времени не хватит, знания у всех разные. Идея с донейтами не работает - людям лень или жалко заплатить хотя бы доллар, поэтому время на блог не окупается и он держится на остатках энтузиазма. Поэтому в блоге будет то, что интересно и удобно мне, а помощь и ответы - либо при наличии свободного времени, либо стимула бросить свои дела и переключиться на решение ваших проблем вместо своих.

  18. Поддерживаю Василия П. Начало функций нужно написать. Чтобы и в инвойс попадал артикул нужно дважды в разных функциях дописывать:

    $this->data['column_sku']     = $this->language->get('column_sku');

    и

    'sku'          => $product['sku'],

    Руслан, а в чём разница заменяемых строк у вас (строка начинается с

    $query = $this->db->query("SELECT
    ....)и вот этим: http://opencartforum.ru/topic/15557-artikul-sku-v-kartochku-tovara-i-na-e-mail-vqmod/page-2#entry130395

    Вроде похоже и тоже работает, у вас )

    WHERE order_id =
    , там
    WHERE op.order_id =

    Что правильно и почему?

  19. 2013-06-17 в 11:36:31 | Ruslan Brest
    Поддерживаю Василия П. Начало функций нужно написать.

    Я не против, напишите. Добавлю в основную статью.

    Руслан, а в чём разница заменяемых строк у вас (строка начинается с ...) и вот этим ...

    Без понятия, не сравнивал. Думаю, сравнить две строки можно самостоятельно, поэтому вникать не буду. Скорей всего в обеих местах одно и то же делается.

    Что правильно и почему?

    "op" - алиас конкретной таблицы, делающий указание более точным (откуда брать значения order_id). Оба варианта правильные. Лучше эти префиксы писать, конечно же: может избавить от проблем в будущем в больших запросах.

  20. Очень полезная доработка! А нет ли решения по отображению количества на складе в инвойсе или order_info?

    Похоже, что для вывода количества "на складе" нужен запрос к таблице Товаров, а не к таблице товаров в заказе. Как его роганизовать?

  21. 2013-06-28 в 08:06:25 | Ruslan Brest

    Чтобы в той же табличке отобразить текущее количество, достаточно там, где "SELECT op.*,p.sku ...", дописать ещё выбор текущего кол-ва товара: "SELECT op.*,p.sku,p.quantity as current_quantity ..."

    В контроллере рядом с

    'sku'          => $product['sku'],

    добавить ещё "'current_quantity' => $product['current_quantity'],"

    И после этого в tpl выводить где надо `$product['current_quantity']`.

    В инвойсе не знаю, не смотрел. Наверное всё аналогично.

  22. Добрый день. Пытаюсь сделать на версии 1.5.5.1. Только в одном месте затык.

    Notice: Undefined variable: column_sku in /home/gboschby/public_html/vqmod/vqcache/vq2-admin_view_template_sale_order_info.tpl on line 315







      - :

      - :






    Здесь немного код отличается от Вашего. Вы бы не могли помочь?

    upload/admin/view/template/sale/order_info.tpl

  23.   - :

      - :

  24. http://pastebin.com/p7hcBC9P

    302 строка

  25. http://pastebin.com/7WGiBAVW вот здесь в 315 строке пишет ошибку

  26. $this->data['column_sku'] = $this->language->get('column_sku');

    нужно писать 2 раза. Решил. Всем спасибо. Автору респект.

  27. Добрый день не подскажите как еще добавить картинку товара?

  28. Добрый день, сделал то же самое для бонусных баллов в invoice. Не подскажете как вывести сумму бонусных баллов всего заказа.

Оставьте комментарий!

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Имя и сайт используются только при регистрации

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email. При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д., а также подписку на новые комментарии.

Авторизация  Facebook. MaxSiteAuth. Loginza

(обязательно)