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

Opencart: картинка товара в истории заказов покупателя

Просмотров: 8913 RSS 13
Howto » OpenCart
,
oc153.image-account-order-information_.png

При просмотре истории заказов зарегистрированный покупатель теперь сможет видеть фото товаров. Фото товара используется текущее (т.е. может не совпадать с тем, которое было на момент покупки).

Делалось на текущей версии Opencart из репозитория (т.е. 1531+, commit:a023998).

На 1541 тоже работает.

Кто хочет видеть меньшие размеры фотографий, вместо предложенных config_image_category_width может использовать config_image_additional_width. Некоторые "за" и "против" можно увидеть в комментариях.

commit 8914dee796792b5662cd40638829fd52e4664289
Author: Ruslan Brest <rb@labtodo.com>
Date:   Mon Aug 6 08:11:06 2012 +0300
    Product image on account/order/info page
diff --git a/upload/catalog/controller/account/order.php b/upload/catalog/controller/account/order.php
index 41dd890..016b996 100644
--- a/upload/catalog/controller/account/order.php
+++ b/upload/catalog/controller/account/order.php
@@ -306,7 +306,8 @@ class ControllerAccountOrder extends Controller {
 			$this->data['shipping_method'] = $order_info['shipping_method'];
 			
 			$this->data['products'] = array();
-			
+			$this->load->model('tool/image');
+
 			$products = $this->model_account_order->getOrderProducts($this->request->get['order_id']);
 
       		foreach ($products as $product) {
@@ -327,8 +328,15 @@ class ControllerAccountOrder extends Controller {
 					);					
         		}
 
+				if (empty($product['image'])) {
+					$thumb = '';
+				} else {
+					$thumb = $this->model_tool_image->resize($product['image'], $this->config->get('config_image_category_width'), $this->config->get('config_image_category_height'));
+				}
+
         		$this->data['products'][] = array(
           			'name'     => $product['name'],
+          			'thumb'    => $thumb,
           			'model'    => $product['model'],
           			'option'   => $option_data,
           			'quantity' => $product['quantity'],
diff --git a/upload/catalog/model/account/order.php b/upload/catalog/model/account/order.php
index 605c1ff..e26012f 100644
--- a/upload/catalog/model/account/order.php
+++ b/upload/catalog/model/account/order.php
@@ -116,7 +116,7 @@ class ModelAccountOrder 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.image FROM `" . DB_PREFIX . "order_product` op LEFT JOIN `" . DB_PREFIX . "product` p ON (p.product_id = op.product_id) WHERE order_id = '" . (int)$order_id . "'");
 	
 		return $query->rows;
 	}
diff --git a/upload/catalog/view/theme/default/stylesheet/stylesheet.css b/upload/catalog/view/theme/default/stylesheet/stylesheet.css
index e0084eb..1110151 100644
--- a/upload/catalog/view/theme/default/stylesheet/stylesheet.css
+++ b/upload/catalog/view/theme/default/stylesheet/stylesheet.css
@@ -508,6 +508,11 @@ table.list .center {
 	text-align: center;
 	padding: 7px;
 }
+table.list .left > img
+{
+	float: left;
+}
+
 table.radio {
 	width: 100%;
 	border-collapse: collapse;
diff --git a/upload/catalog/view/theme/default/template/account/order_info.tpl b/upload/catalog/view/theme/default/template/account/order_info.tpl
index c94aa0c..e9843be 100644
--- a/upload/catalog/view/theme/default/template/account/order_info.tpl
+++ b/upload/catalog/view/theme/default/template/account/order_info.tpl
@@ -62,11 +62,14 @@
     <tbody>
       <?php foreach ($products as $product) { ?>
       <tr>
-        <td class="left"><?php echo $product['name']; ?>
+        <td class="left">
+          <img src="<?php echo $product['thumb']; ?>" alt="<?php echo $product['name']; ?>" />
+          <?php echo $product['name']; ?>
           <?php foreach ($product['option'] as $option) { ?>
           
            <small> - <?php echo $option['name']; ?>: <?php echo $option['value']; ?></small>
-          <?php } ?></td>
+          <?php } ?>
+        </td>
         <td class="left"><?php echo $product['model']; ?></td>
         <td class="right"><?php echo $product['quantity']; ?></td>
         <td class="right"><?php echo $product['price']; ?></td>

Измененные файлы текущей версии Опенкарт (1.5.3.xyz). Как всегда, рекомендую не заменять, а сравнивать со своими (WinMerge.org, TotalCommander, Meld и т.п.):

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
Комментариев: 13
  1. Все сделал как Вы написали, но увы ничего не вышло? Я думаю из за модуля "Модуль Simple - упрощенная регистрация и заказ". Но очень понравилась Ваша доработка с фото! Если не трудно может глянете http://www.vigorous.msk.ru что нужно подправить? Заранее спасибо

  2. 2012-08-09 в 08:50:54 | Ruslan Brest

    Модуль оформления заказа здесь ни при чём. Если заказ в истории покупателю виден - значит Simple своё дело сделал правильно.

    Глядеть на сайт, к сожалению, бесполезно: исходные файлы я сквозь сайт не увижу. А вся кухня и всё ценное именно там происходит. И ошибки только там увидеть можно. А как вносили изменения? Вручную, заменой файлов, сравнением и переносом?

  3. Да, сравнивал через TotalCommander и вносил только Ваши изменения. Но когда вносил вчера была парочка вопросов. Сейчас верну оригиналы и повторно буду сравнивать,может чего и не увидел. Спасибо за скорый ответ!

  4. И еще вопрос возможно добавить дополнительно в заказе категорию откуда берется товар? Клиент и продавец по названию товара ( их более 500 ) не могут вспомнить а что это было :-) . А если добавить что это были сапоги :-D то у них на душе сразу все хорошо.

  5. 2012-08-09 в 19:37:06 | Ruslan Brest

    В Опенкарт товар может принадлежать нескольким категориям, поэтому в общем случае нет способа узнать, какая из категорий - его. Можно, конечно, предполагать, что он принадлежит одной категории, но в большинстве случаев это обычно не так, т.к. товар включается одновременно и в подкатегории, и в категории первого уровня.

    Поэтому такое можно сделать либо

    - при использовании ocStore и включенном SeoPro;

    - если товары действительно принадлежат только одной-единственной категории.

    Либо дать нормальные названия товарам. Посмотрите, что у Вас: 10040-WO-A, 20122-5. И это заголовки, одна из самых весомых для поисковиков информация. Добавьте туда "20122-5: Сапоги зимние, коричневая замша", и вас на порядок чаще станут находить из поисковиков.

    И путаницы в заказах легко избежите.

  6. Здравствуйте. Спасибо за ваш сайт, многое помогло!

    Теперь по теме, сделал все исправления даже сравнивал, ничего не происходит, как выводилось без картинки товара так и выводится, проверял неоднократно. Возможно что где то ошибка. Спасибо.

  7. А производителя можно добавить? Я бы тогда там добавил нужную информацию.

    Огромное спасибо за ответ!

  8. 2012-08-09 в 21:15:49 | Ruslan Brest

    @Миха, может и ошибка. Только у кого? Я делал на текущей версии из репозитория - это указано возле файлов для скачивания, продублировал эту информацию поближе к началу. Сделал изменения, проверил, что всё работает, закоммитил и отправил их в репозиторий opencart.com, опубликовал в блоге. (В официальном репозитории, правда, от этой правки отказались - мол, не нужна там картинка, но спасибо.)

    Поэтому если где-то не работает - смотрите в первую очередь версию (1.5.3?) и движок (opencart? ocstore?). Может с этим связано.

  9. Спасибо, на 1541 прекрасно работает, только я бы брал размер фотки поменьше (не config_image_category_width, а например config_image_additional_width, ну и с высотой так же), потому что слишком много пустого места выходит

  10. 2013-06-22 в 10:04:09 | Ruslan Brest

    Спасибо, про совместимость с 1541 добавил.

    Для картинок я сперва вообще взял те размеры, что в поп-ап корзине выводятся. Но потом вывел те, что побольше: по-моему лучше немного переверстать таблицу и вывод текстов, чем картинки размером с ноготь мизинца использовать. Я просто по части верстки не силён, поэтому воспринимаю это как рецепты и примеры-заготовки, а не законченные и вылизанные решения. Может если бы для реального проекта писалось - больше времени потратил на оформление и выравнивания.

    К тому же есть магазины с короткими названиями товаров (как на скриншоте), а есть с километровыми и русскими. И тут уже непонятно что будет преимуществом - большая картинка или маленькая.

  11. Хозяин — барин :)

  12. 2013-08-16 в 14:34:35 | Евгений

    Добрый день.

    Такой вот вопрос, а можно добавить ссылку на "наименование товара" ? Или может подскажите какие файлы нужно "ковырять"?

  13. Если хотите чтобы в списке товары были со ссылкой, то необходимо внести изменения в 2х файлах:

    1. файл /catalog/view/theme/*/template/account/order_info.tpl

    строка 67 (файл из прикрепленной к данной теме архива)

    <?php echo $product['name']; ?>

    меняем на

    <a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?></a>

    2. файл catalog/controller/account/order.php в функции info в массив

    $this->data['products'][] = array(
    'name'     => ....
    ...
    ...

    (у меня это строки 338-347) добавляем следующую строку:

    'href'     => $this->url->link('product/product', 'product_id=' . $product['product_id']),

    Если будете добавлять в конце массива то не забудьте удалить запятую.

    Думаю будет полезно кому-нибудь)

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

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

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

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

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

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