Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


dido81

Recommended Posts

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

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

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

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

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

Надіслати
Поділитися на інших сайтах


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

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

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

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

Надіслати
Поділитися на інших сайтах

  • 2 months later...

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

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

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

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

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

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

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

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

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

Надіслати
Поділитися на інших сайтах


  • 6 months later...
  • 11 months later...

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

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; ?>
  • +1 1
Надіслати
Поділитися на інших сайтах


  • 2 years later...

 

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

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; ?>

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

  • +1 1
Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.