Page 1 of 1

[1.5.1.1]Display sub category image in category page

Posted: Wed Jul 27, 2011 12:02 am
by spitos
Is it possible to display the subcategory images on the parent category page next to the subcategory name?

I've tried messing around with it a bit but had no luck.

Re: [1.5.1.1]Display sub category image in category page

Posted: Wed Jul 27, 2011 6:21 pm
by spitos
For anyone else stumbling across this post, I found the answer here:

http://forum.opencart.com/viewtopic.php?f=20&t=34923

Re: [1.5.1.1]Display sub category image in category page

Posted: Tue Sep 06, 2011 1:50 am
by Degsey
Trouble is that it needs the VQMod and that is still a bit flakey to use sucessfully, it really needs hard coding in and nobody has cracked it yet?

Re: [1.5.1.1]Display sub category image in category page

Posted: Sun Sep 11, 2011 10:32 am
by Degsey
Changed my mind and it works well with VQMod if you have the right xml file which I had to recode to use successfully.

Re: [1.5.1.1]Display sub category image in category page

Posted: Thu Sep 15, 2011 6:26 pm
by s3d
Hi All

For those wanting images - its really not that hard.......
Also there is no reason why this isnt part of Core file, as there is minimal change, and no increased load on the server to generate this:

Ok the file which require a change....

1) Styles:

Code: Select all

.category-grid {
	width: 100%;
	overflow: auto;
}
.category-grid > div {
	width: 134px;
	display: inline-block;
	vertical-align: top;
	margin-right: 44px;
	margin-left:50px;
	margin-bottom: 15px;
	text-align:center;
}
.category-grid .image {
	display: block;
	margin-bottom: 0px;

}
.category-grid .image img {
	padding: 3px;
	margin:0px auto;
}
.category-grid .name a {
	color: #e9118c;
	font-weight: bold;
	text-decoration: none;
	display: block;
	margin-bottom: 4px;
}
.category-grid .description {
	display: none;
}
2) Catalog / controller / product/ category.php

Code: Select all

Around line 159

$results = $this->model_catalog_category->getCategories($category_id);

            foreach ($results as $result)
            {
                $product_total = $this->model_catalog_product->getTotalProducts(array('filter_category_id' => $result['category_id']));

                //echo '<pre>';
                //print_r($result);
                //echo '</pre>';
                if($result['image'])
                {
                    $image = $this->model_tool_image->resize($result['image'], $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
                }
                else
                {
                    $image = '';
                }
                $this->data['categories'][] = array(
                    'name' => $result['name'] . ' (' . $product_total . ')',
                    'image' => $image,
                    'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url)
                );
            }

All we are doing here is adding to the returned array (to the view file) a image field, and making sure we pass back the thumbnail image. Uses the same code as for the products (also in that file)

3) YOUR THEME / template / product / category.tpl

Code: Select all


<?php
        if ($categories)
        {
            //print_r($categories);
            ?>

            <div class="category-grid">

                <?php for ($i = 0; $i < count($categories);)
                { ?>
                    
                        <?php $j = $i + ceil(count($categories) / 4); ?>
                        <?php for (; $i < $j; $i++)
                        { ?>
                            <?php if (isset($categories[$i]))
                            { ?>
                                
                                <div>
                                    <?php if ($categories[$i]['image'])
                                    { ?>
                                        <div class="image"><a href="<?php echo $categories[$i]['href']; ?>"><img src="<?php echo $categories[$i]['image']; ?>" title="<?php echo $categories[$i]['name']; ?>" alt="<?php echo $categories[$i]['name']; ?>" /></a></div>
                                    <?php } ?>
                                    <div class="name"><a href="<?php echo $categories[$i]['href']; ?>"><?php echo $categories[$i]['name']; ?></a></div>
                                </div>


                            
                            <?php } ?>
                        <?php } ?>
                    
                <?php } ?>

            </div>
        <?php } ?>


Simply adjust the markup to now export the image. The markup has been replicated from the product layout (also in this file)

simples!

Hope this helps people

Re: [1.5.1.1]Display sub category image in category page

Posted: Mon Sep 26, 2011 4:49 am
by madgoal
I tried to update all 3 files as you suggested but getting errors as shown in http://gadgetmarket.net78.net/index.php ... ry&path=20

Your help would be greatly appreciated

Mario

Re: [1.5.1.1]Display sub category image in category page

Posted: Tue Oct 04, 2011 5:39 pm
by iidx036
Hi,

I also made the changes. However, the category links are laid out correctly but no thumbnail appears.

Any ideas?

Cheers
Jay

Re: [1.5.1.1]Display sub category image in category page

Posted: Thu Oct 13, 2011 12:03 am
by madgoal
The lines have to be added at line 259 and not 159 in category.php

Tell me how it went

Mario

Re: [1.5.1.1]Display sub category image in category page

Posted: Thu Oct 13, 2011 12:17 am
by iidx036
madgoal wrote:The lines have to be added at line 259 and not 159 in category.php

Tell me how it went

Mario
Hi,

I added it at 259 and I get the images now! However, I also get the categories 4 times????

Do I add it just after the line below: (which line of code did you add it after?)

foreach ($results as $result) {

$product_total = $this->model_catalog_product->getTotalProducts(array('filter_category_id' => $result['category_id']));

Thanks for your help
Jay

Re: [1.5.1.1]Display sub category image in category page

Posted: Mon Nov 07, 2011 4:56 am
by Script webshop
Anyone nows why its shows 2 times the category ?
First line category shows Notice: Undefined index: image in /home//domains//public_html/catalog/view/theme/phantomshop/template/product/category.tpl on line 24
Then there is the right category with the thumb

And where do i change the size of the category thumb

Anyone ?

Re: [1.5.1.1]Display sub category image in category page

Posted: Mon Nov 07, 2011 6:24 am
by Script webshop
Delete the next code in the category.php file some where at line 132

Code: Select all

$this->data['categories'][] = array(
					'name'  => $result['name'] . ' (' . $product_total . ')',
					'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url)
				);

Re: [1.5.1.1]Display sub category image in category page

Posted: Mon Nov 07, 2011 11:51 am
by pagetopixel
Here is my method for 1.5.1.3 works like a charm
http://forum.opencart.com/viewtopic.php?f=20&t=44803

Re: [1.5.1.1]Display sub category image in category page

Posted: Wed Nov 09, 2011 10:01 pm
by jimaras
The thumbs didn't show up.
I tryed around line 200 but it show up only double category-list without thumbs.
There is my code category.php

Code: Select all

<?php 
class ControllerProductCategory extends Controller {  
	public function index() { 
		$this->language->load('product/category');
		
		$this->load->model('catalog/category');
		
		$this->load->model('catalog/product');
		
		$this->load->model('tool/image'); 
		
		if (isset($this->request->get['sort'])) {
			$sort = $this->request->get['sort'];
		} else {
			$sort = 'p.sort_order';
		}

		if (isset($this->request->get['order'])) {
			$order = $this->request->get['order'];
		} else {
			$order = 'ASC';
		}
		
		if (isset($this->request->get['page'])) {
			$page = $this->request->get['page'];
		} else { 
			$page = 1;
		}	
							
		if (isset($this->request->get['limit'])) {
			$limit = $this->request->get['limit'];
		} else {
			$limit = $this->config->get('config_catalog_limit');
		}
					
		$this->data['breadcrumbs'] = array();

   		$this->data['breadcrumbs'][] = array(
       		'text'      => $this->language->get('text_home'),
			'href'      => $this->url->link('common/home'),
       		'separator' => false
   		);	
			
		if (isset($this->request->get['path'])) {
			$path = '';
		
			$parts = explode('_', (string)$this->request->get['path']);
		
			foreach ($parts as $path_id) {
				if (!$path) {
					$path = $path_id;
				} else {
					$path .= '_' . $path_id;
				}
									
				$category_info = $this->model_catalog_category->getCategory($path_id);
				
				if ($category_info) {
	       			$this->data['breadcrumbs'][] = array(
   	    				'text'      => $category_info['name'],
						'href'      => $this->url->link('product/category', 'path=' . $path),
        				'separator' => $this->language->get('text_separator')
        			);
				}
			}		
		
			$category_id = array_pop($parts);
		} else {
			$category_id = 0;
		}
		
		$category_info = $this->model_catalog_category->getCategory($category_id);
	
		if ($category_info) {
	  		$this->document->setTitle($category_info['name']);
			$this->document->setDescription($category_info['meta_description']);
			$this->document->setKeywords($category_info['meta_keyword']);
			
			$this->data['heading_title'] = $category_info['name'];
			
			$this->data['text_refine'] = $this->language->get('text_refine');
			$this->data['text_empty'] = $this->language->get('text_empty');			
			$this->data['text_quantity'] = $this->language->get('text_quantity');
			$this->data['text_manufacturer'] = $this->language->get('text_manufacturer');
			$this->data['text_model'] = $this->language->get('text_model');
			$this->data['text_price'] = $this->language->get('text_price');
			$this->data['text_tax'] = $this->language->get('text_tax');
			$this->data['text_points'] = $this->language->get('text_points');
			$this->data['text_compare'] = sprintf($this->language->get('text_compare'), (isset($this->session->data['compare']) ? count($this->session->data['compare']) : 0));
			$this->data['text_display'] = $this->language->get('text_display');
			$this->data['text_list'] = $this->language->get('text_list');
			$this->data['text_grid'] = $this->language->get('text_grid');
			$this->data['text_sort'] = $this->language->get('text_sort');
			$this->data['text_limit'] = $this->language->get('text_limit');
					
			$this->data['button_cart'] = $this->language->get('button_cart');
			$this->data['button_wishlist'] = $this->language->get('button_wishlist');
			$this->data['button_compare'] = $this->language->get('button_compare');
			$this->data['button_continue'] = $this->language->get('button_continue');
					
			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'));
			} else {
				$this->data['thumb'] = '';
			}
									
			$this->data['description'] = html_entity_decode($category_info['description'], ENT_QUOTES, 'UTF-8');
			$this->data['compare'] = $this->url->link('product/compare');
			
			$url = '';
			
			if (isset($this->request->get['sort'])) {
				$url .= '&sort=' . $this->request->get['sort'];
			}	

			if (isset($this->request->get['order'])) {
				$url .= '&order=' . $this->request->get['order'];
			}	
			
			if (isset($this->request->get['limit'])) {
				$url .= '&limit=' . $this->request->get['limit'];
			}
								
			$this->data['categories'] = array();
			
			$results = $this->model_catalog_category->getCategories($category_id);
			
			foreach ($results as $result) {
				$data = array(
					'filter_category_id'  => $result['category_id'],
					'filter_sub_category' => true	
				);				
											
				$product_total = $this->model_catalog_product->getTotalProducts($data);
				
				$this->data['categories'][] = array(
					'name'  => $result['name'] . ' (' . $product_total . ')',
					'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url)
				);
			}
			
			$this->data['products'] = array();
			
			$data = array(
				'filter_category_id' => $category_id, 
				'sort'               => $sort,
				'order'              => $order,
				'start'              => ($page - 1) * $limit,
				'limit'              => $limit
			);
					
			$product_total = $this->model_catalog_product->getTotalProducts($data); 
			
			$results = $this->model_catalog_product->getProducts($data);
			
			foreach ($results as $result) {
				if ($result['image']) {
					$image = $this->model_tool_image->resize($result['image'], $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
				} else {
					$image = false;
				}
				
				if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
					$price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')));
				} else {
					$price = false;
				}
				
				if ((float)$result['special']) {
					$special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')));
				} else {
					$special = false;
				}	
				
				if ($this->config->get('config_tax')) {
					$tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price']);
				} else {
					$tax = false;
				}				
				
				if ($this->config->get('config_review_status')) {
					$rating = (int)$result['rating'];
				} else {
					$rating = false;
				}
								
				$this->data['products'][] = array(
					'product_id'  => $result['product_id'],
					'thumb'       => $image,
					'name'        => $result['name'],
					'description' => mb_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 300) . '..',
					'price'       => $price,
					'special'     => $special,
					'tax'         => $tax,
					'rating'      => $result['rating'],
					'reviews'     => sprintf($this->language->get('text_reviews'), (int)$result['reviews']),
					'href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'])
				);
			}
			
			$url = '';
	
			if (isset($this->request->get['limit'])) {
				$url .= '&limit=' . $this->request->get['limit'];
			}
							
			$this->data['sorts'] = array();
			
			$this->data['sorts'][] = array(
				'text'  => $this->language->get('text_default'),
				'value' => 'p.sort_order-ASC',
				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.sort_order&order=ASC' . $url)
			);
			
			$this->data['sorts'][] = array(
				'text'  => $this->language->get('text_name_asc'),
				'value' => 'pd.name-ASC',
				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=pd.name&order=ASC' . $url)
			);

			$this->data['sorts'][] = array(
				'text'  => $this->language->get('text_name_desc'),
				'value' => 'pd.name-DESC',
				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=pd.name&order=DESC' . $url)
			);

			$this->data['sorts'][] = array(
				'text'  => $this->language->get('text_price_asc'),
				'value' => 'p.price-ASC',
				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.price&order=ASC' . $url)
			); 

			$this->data['sorts'][] = array(
				'text'  => $this->language->get('text_price_desc'),
				'value' => 'p.price-DESC',
				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.price&order=DESC' . $url)
			); 
			
			$this->data['sorts'][] = array(
				'text'  => $this->language->get('text_rating_desc'),
				'value' => 'rating-DESC',
				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=rating&order=DESC' . $url)
			); 
			
			$this->data['sorts'][] = array(
				'text'  => $this->language->get('text_rating_asc'),
				'value' => 'rating-ASC',
				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=rating&order=ASC' . $url)
			);
			
			$this->data['sorts'][] = array(
				'text'  => $this->language->get('text_model_asc'),
				'value' => 'p.model-ASC',
				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.model&order=ASC' . $url)
			);

			$this->data['sorts'][] = array(
				'text'  => $this->language->get('text_model_desc'),
				'value' => 'p.model-DESC',
				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.model&order=DESC' . $url)
			);
			
			$url = '';
	
			if (isset($this->request->get['sort'])) {
				$url .= '&sort=' . $this->request->get['sort'];
			}	

			if (isset($this->request->get['order'])) {
				$url .= '&order=' . $this->request->get['order'];
			}
			
			$this->data['limits'] = array();
			
			$this->data['limits'][] = array(
				'text'  => $this->config->get('config_catalog_limit'),
				'value' => $this->config->get('config_catalog_limit'),
				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&limit=' . $this->config->get('config_catalog_limit'))
			);
						
			$this->data['limits'][] = array(
				'text'  => 25,
				'value' => 25,
				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&limit=25')
			);
			
			$this->data['limits'][] = array(
				'text'  => 50,
				'value' => 50,
				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&limit=50')
			);

			$this->data['limits'][] = array(
				'text'  => 75,
				'value' => 75,
				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&limit=75')
			);
			
			$this->data['limits'][] = array(
				'text'  => 100,
				'value' => 100,
				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&limit=100')
			);
						
			$url = '';
	
			if (isset($this->request->get['sort'])) {
				$url .= '&sort=' . $this->request->get['sort'];
			}	

			if (isset($this->request->get['order'])) {
				$url .= '&order=' . $this->request->get['order'];
			}
	
			if (isset($this->request->get['limit'])) {
				$url .= '&limit=' . $this->request->get['limit'];
			}
					
			$pagination = new Pagination();
			$pagination->total = $product_total;
			$pagination->page = $page;
			$pagination->limit = $limit;
			$pagination->text = $this->language->get('text_pagination');
			$pagination->url = $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&page={page}');
		
			$this->data['pagination'] = $pagination->render();
		
			$this->data['sort'] = $sort;
			$this->data['order'] = $order;
			$this->data['limit'] = $limit;
		
			$this->data['continue'] = $this->url->link('common/home');

			if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/product/category.tpl')) {
				$this->template = $this->config->get('config_template') . '/template/product/category.tpl';
			} else {
				$this->template = 'default/template/product/category.tpl';
			}
			
			$this->children = array(
				'common/column_left',
				'common/column_right',
				'common/content_top',
				'common/content_bottom',
				'common/footer',
				'common/header'
			);
				
			$this->response->setOutput($this->render());										
    	} else {
			$url = '';
			
			if (isset($this->request->get['path'])) {
				$url .= '&path=' . $this->request->get['path'];
			}
									
			if (isset($this->request->get['sort'])) {
				$url .= '&sort=' . $this->request->get['sort'];
			}	

			if (isset($this->request->get['order'])) {
				$url .= '&order=' . $this->request->get['order'];
			}
				
			if (isset($this->request->get['page'])) {
				$url .= '&page=' . $this->request->get['page'];
			}
						
			if (isset($this->request->get['limit'])) {
				$url .= '&limit=' . $this->request->get['limit'];
			}
						
			$this->data['breadcrumbs'][] = array(
				'text'      => $this->language->get('text_error'),
				'href'      => $this->url->link('product/category', $url),
				'separator' => $this->language->get('text_separator')
			);
				
			$this->document->setTitle($this->language->get('text_error'));

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

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

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

      		$this->data['continue'] = $this->url->link('common/home');

			if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/error/not_found.tpl')) {
				$this->template = $this->config->get('config_template') . '/template/error/not_found.tpl';
			} else {
				$this->template = 'default/template/error/not_found.tpl';
			}
			
			$this->children = array(
				'common/column_left',
				'common/column_right',
				'common/content_top',
				'common/content_bottom',
				'common/footer',
				'common/header'
			);
					
			$this->response->setOutput($this->render());
		}
  	}
}
?>
Any help?

Re: [1.5.1.1]Display sub category image in category page

Posted: Wed Nov 09, 2011 10:09 pm
by Script webshop
You still using the next lines please delete this next code in php
and the double category wil be fixd

Code: Select all

$this->data['categories'][] = array(
               'name'  => $result['name'] . ' (' . $product_total . ')',
               'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url)
            );
Do you upload some images in the admin in the category group ?

Re: [1.5.1.1]Display sub category image in category page

Posted: Thu Nov 10, 2011 7:03 am
by jimaras
Script webshop wrote:You still using the next lines please delete this next code in php
and the double category wil be fixd

Code: Select all
$this->data['categories'][] = array(
'name' => $result['name'] . ' (' . $product_total . ')',
'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url)
);



Do you upload some images in the admin in the category group ?
which line i should add the code?
yes i uploaded images.

Re: [1.5.1.1]Display sub category image in category page

Posted: Thu Nov 10, 2011 7:37 am
by Script webshop
add the next lines Around line 259 in the category.php

Code: Select all

$results = $this->model_catalog_category->getCategories($category_id);

            foreach ($results as $result)
            {
                $product_total = $this->model_catalog_product->getTotalProducts(array('filter_category_id' => $result['category_id']));

                //echo '<pre>';
                //print_r($result);
                //echo '</pre>';
                if($result['image'])
                {
                    $image = $this->model_tool_image->resize($result['image'], $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
                }
                else
                {
                    $image = '';
                }
                $this->data['categories'][] = array(
                    'name' => $result['name'] . ' (' . $product_total . ')',
                    'image' => $image,
                    'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url)
                );
            }

Re: [1.5.1.1]Display sub category image in category page

Posted: Fri Apr 20, 2012 5:31 am
by Baco
How to paginate in parrent category ?
p.s. Have a 30-50 subcategories whith images, add

Code: Select all

<div class="pagination"><?php echo $pagination; ?></div>
text pages is displayed, but not paginated (in sys./libr./pagination.php wrote public $limit = 15;)
any ideas or this is bug ?

Re: [1.5.1.1]Display sub category image in category page

Posted: Sat Apr 27, 2013 12:41 pm
by IT_MAN
How to make it work in 1.5.5.1?

Re: [1.5.1.1]Display sub category image in category page

Posted: Sat Apr 25, 2015 12:41 am
by auto-mafia
Any idea if this will work in 2.02?

Re: [1.5.1.1]Display sub category image in category page

Posted: Tue May 12, 2015 8:27 pm
by Flysan
auto-mafia wrote:Any idea if this will work in 2.02?