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

Opencart 1.5.1.x: Указание размеров картинок в product/category

Просмотров: 8255 RSS 5
Howto » OpenCart

Указание размеров картинок в product/category, чтобы не ехала вёрстка (при медленной подгрузке картинок некоторые описания иногда оставалось очень далеко от картинки).

См. также Opencartforum.ru: Кривое отображение при отсутствии картинки товара. Там есть иллюстрация того, от чего именно это спасает.

Проверено на v1.5.1.2 и 1.5.1.3 - нет никаких отличий.

commit 771675b8c92df253457d29eafe804b56aabc8240
Author: Ruslan Brest <rb@labtodo.com>
Date:   Tue Sep 27 14:04:59 2011 +0300
    [+] Указание размеров картинок в product/category
    
    чтобы не ехала вёрстка (при медленной подгрузке картинок некоторые описания
    иногда оставалось очень далеко от картинки)
diff --git a/public_html/catalog/controller/product/category.php b/public_html/catalog/controller/product/category.php
index 6cc4b86..cd86bfd 100644
--- a/public_html/catalog/controller/product/category.php
+++ b/public_html/catalog/controller/product/category.php
@@ -100,8 +100,10 @@ class ControllerProductCategory extends Controller {
 
 			if ($category_info['image']) {
 				$this->data['thumb'] = $this->model_tool_image->resize($category_info['image'], $this->config->get('config_image_category_width'), $this->config->get('config_image_category_height'));
+				$this->data['thumb_attr'] = 'width="'.$this->config->get('config_image_category_width').'" height="'.$this->config->get('config_image_category_height').'"';
 			} else {
 				$this->data['thumb'] = '';
+				$this->data['thumb_attr'] = '';
 			}
 
 			$this->data['description'] = html_entity_decode($category_info['description'], ENT_QUOTES, 'UTF-8');
@@ -190,6 +192,8 @@ class ControllerProductCategory extends Controller {
 				$this->data['products'][] = array(
 					'product_id'  => $result['product_id'],
 					'thumb'       => $image,
+					'thumb_w'     => $this->config->get('config_image_product_width'),
+					'thumb_h'     => $this->config->get('config_image_product_height'),
 					'name'        => $result['name'],
 					'description' => $descr_plaintext,
 					'price'       => $price,
diff --git a/public_html/catalog/view/theme/default/template/product/category.tpl b/public_html/catalog/view/theme/default/template/product/category.tpl
index dd795de..e5e080c 100644
--- a/public_html/catalog/view/theme/default/template/product/category.tpl
+++ b/public_html/catalog/view/theme/default/template/product/category.tpl
@@ -9,7 +9,7 @@
   <?php if ($thumb || $description) { ?>
   <div class="category-info">
     <?php if ($thumb) { ?>
-    <div class="image"><img src="<?php echo $thumb; ?>" alt="<?php echo $heading_title; ?>" /></div>
+    <div class="image"><img src="<?php echo $thumb; ?>" alt="<?php echo $heading_title; ?>" <?php echo $thumb_attr; ?> /></div>
     <?php } ?>
     <?php if ($description) { ?>
     <?php echo $description; ?>
@@ -70,7 +70,7 @@
     <?php foreach ($products as $product) { ?>
     <div>
       <?php if ($product['thumb']) { ?>
-      <div class="image"><a href="<?php echo $product['href']; ?>"><img src="<?php echo $product['thumb']; ?>" title="<?php echo $product['name']; ?>" alt="<?php echo $product['name']; ?>" /></a></div>
+      <div class="image"><a href="<?php echo $product['href']; ?>"><img src="<?php echo $product['thumb']; ?>" width="<?php echo $product['thumb_w']; ?>" height="<?php echo $product['thumb_h']; ?>" title="<?php echo $product['name']; ?>" alt="<?php echo $product['name']; ?>" /></a></div>
       <?php } ?>
       <div class="name"><a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?></a></div>
       <div class="description"><?php echo $product['description']; ?></div>
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
Комментариев: 5
  1. По-моему у человека на форуме проблема еще в том, помимо смешения названия и описания, что картинка no_image не ставится,а вместе нее отображается пустое место. Кстати, я тоже это заметил на v1.5.1.3, на v1.5.1 все было нормально

  2. 2012-01-22 в 11:42:11 | Ruslan Brest

    Возможно. Но я выделил основную проблему, а наличие там более красивой картинки -вторично. Этот способ решает главную проблему и быстро, и правильно. И если потом подсунуть любую картинку, растянет её до нужных размеров на ходу.

    А поставить там NO_IMAGE - могу предложить быстрый, но нехороший способ. Который делает ровно то, что человек хотел, но без проверок и без учета размеров. Его это спасёт, и быстро, но... Ну, в общем, на описание более правильного способа у меня сейчас времени нет. Это надо все места вывода проанализировать и в контроллерах вместо чего-то вроде $image = false; или $thumb = ''; в нужных местах поставить ...resize('no_image.jpg', требуемых, размеров). И все дела. Но больше правок.

    А быстро, но нехорошо и неправильно -- это в catalog/model/tool/image.php изменить 5-ую строку с

    return;

    на

    return HTTP_IMAGE . 'cache/no_image-100x100.jpg';

    То есть если надо быстро спасти больного - вперёд. Выживет и будет работать. Но если надолго и нормально - лучше делать более основательно.

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

  4. 2012-04-16 в 21:07:31 | Максим

    на 1.5.1.3 не работает

  5. 2012-04-17 в 02:43:59 | Максим

    на 1.5.1.3. не работает, можете подправить?

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

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

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

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

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

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