dido81

Вывод товаров и подкатегорий в родительской категории

Рекомендуемые сообщения

dido81    0

Хочу создать в компьютерном магазине структуру списка товара, чтобы в категории отображались названия подкатегорий и сразу все товары подкатегорий.

Выглядеть это должно быть так: http://krasnoyarsk.dns-shop.ru/catalog/185/

Существует ли какое-нибудь готовое решение для вывода товаров таким образом? Модули, шаблоны? Бесплатные и платные пойдут.

Я встречал лишь модуль "Прайс-листа", который несколько похож, но там выводятся лишь товары из 1 категории списком (http://opencart.=^_^=.ru/151/index.php?route=product/pricelist).

Подскажите, пожалуйста, как это можно реализовать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
afwollis    1 099

для начала обрисуйте ситуацию, дав информацию, хотя бы, по таким пунктам:

1) версии движков;

2) подробнее о структуре товаров в категориях;

3) используется ли поле "основная категория"?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
dess81    10

для начала обрисуйте ситуацию, дав информацию, хотя бы, по таким пунктам:

1) версии движков;

2) подробнее о структуре товаров в категориях;

3) используется ли поле "основная категория"?

Версия движка 1.5.1.3.

По поводу структуры, то хотелось бы, чтобы категории 2 и выше уровней выводились в виде: название подкатегрии, товар.

Например: главные категории: Компьютеры, Ноутбуки, Принтеры, подкатегории уже делятся на производителей "Samsung", "LG" и выдается список таблицей: название подкатегории и ниже сразу товар. По аналогии с http://krasnoyarsk.dns-shop.ru/catalog/185/

По идее лучшим вариантом было бы добавление к "Вид: Список / Витрина" еще одного пункта, который условно можно назвать "Смешанный". И чтобы можно было для новых категорий выбирать этот тип отображения.

Что-то сомневаюсь, что есть готовое даже среди платных плагинов..,:(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
flex21    0

Вопрос все еще актуален, кто то нашел решение данного вопроса ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
beshleyweb    6

Меня тоже интересует этот вопрос, кто то нашел решения?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
beshleyweb    6

Нашел решения данного вопроса, может кому то понадобиться.

1) Файл catalog/controller/product/catalog.php

<?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);
 
			  $categories = $this->model_catalog_category->getCategories($category_id);
        foreach ($categories as $category){
            $products_data = array();
 
			$data = array(
				'filter_category_id' => $category['category_id'], 
//				'sort'               => $sort,
//				'order'              => $order,
				'start'              => 0,
				'limit'              => 30
			);
 
			$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;
				}
 
						$weight = round($result['weight'], 0);		
				$products_data[] = array(
				'weight' => $weight,
					'product_id'  => $result['product_id'],
					'thumb'       => $image,
					'name'        => $result['name'],
				'description' => substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 200) . '',
					'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=' . $category['category_id'] . '&product_id=' . $result['product_id'])
				);
			}
 
			$this->data['categories'][] = array(
				'category_id' => $category['category_id'],
                'name'        => $category['name'] ,
				'products'    => $products_data,
				'href'        => $this->url->link('product/category', 'path=' . $category['category_id'])
                );            
            }
			$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());
		}
  	}
}
?>

2) Файл catalog/view/theme/default/template/product/catalog.tpl

<?php echo $header; ?>
<?php echo $column_left; ?>
<?php echo $column_right; ?>
<div id="content">
<?php echo $content_top; ?>
<?php if ($categories) { ?> <?php foreach ($categories as $category) { ?>
<div class="cattitle">
<h1 style="text-align: left; font-weight: bold;"><a name="<?php echo $category['category_id']; ?>"></a> <?php echo $category['name']; ?></h1>
</div>
<?php $products = $category['products'];
  if ($products) { ?>
<div class="product-grid"><?php foreach ($products as $product) { ?>
<div><?php if ($product['thumb']) { ?>
<div class="image"><img title="<?php echo $product['description']; ?>" alt="<?php echo $product['name']; ?>" src="<?php echo $product['thumb']; ?>" /></div>
<?php } ?>
<div class="name"></div>
</div>
<?php } ?></div>
<?php } ?> <?php } ?> <?php } ?> <?php echo $content_bottom; ?></div>
<pre lang="html" escaped="true">
<?php echo $footer; ?>

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
voron121    0

 

Нашел решения данного вопроса, может кому то понадобиться.

1) Файл catalog/controller/product/catalog.php

<?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);
 
			  $categories = $this->model_catalog_category->getCategories($category_id);
        foreach ($categories as $category){
            $products_data = array();
 
			$data = array(
				'filter_category_id' => $category['category_id'], 
//				'sort'               => $sort,
//				'order'              => $order,
				'start'              => 0,
				'limit'              => 30
			);
 
			$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;
				}
 
						$weight = round($result['weight'], 0);		
				$products_data[] = array(
				'weight' => $weight,
					'product_id'  => $result['product_id'],
					'thumb'       => $image,
					'name'        => $result['name'],
				'description' => substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 200) . '',
					'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=' . $category['category_id'] . '&product_id=' . $result['product_id'])
				);
			}
 
			$this->data['categories'][] = array(
				'category_id' => $category['category_id'],
                'name'        => $category['name'] ,
				'products'    => $products_data,
				'href'        => $this->url->link('product/category', 'path=' . $category['category_id'])
                );            
            }
			$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());
		}
  	}
}
?>

2) Файл catalog/view/theme/default/template/product/catalog.tpl

<?php echo $header; ?>
<?php echo $column_left; ?>
<?php echo $column_right; ?>
<div id="content">
<?php echo $content_top; ?>
<?php if ($categories) { ?> <?php foreach ($categories as $category) { ?>
<div class="cattitle">
<h1 style="text-align: left; font-weight: bold;"><a name="<?php echo $category['category_id']; ?>"></a> <?php echo $category['name']; ?></h1>
</div>
<?php $products = $category['products'];
  if ($products) { ?>
<div class="product-grid"><?php foreach ($products as $product) { ?>
<div><?php if ($product['thumb']) { ?>
<div class="image"><img title="<?php echo $product['description']; ?>" alt="<?php echo $product['name']; ?>" src="<?php echo $product['thumb']; ?>" /></div>
<?php } ?>
<div class="name"></div>
</div>
<?php } ?></div>
<?php } ?> <?php } ?> <?php } ?> <?php echo $content_bottom; ?></div>
<pre lang="html" escaped="true">
<?php echo $footer; ?>

не мешало бы откоментировать с какой именно строки вносить правку в контроллер

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу