Перейти к содержанию
remix8080

Последние поступления (в категории)

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

С праздником!

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

Т.е., при заходе в категорию, видим ее подкатегории, а внизу список последних товаров из всех этих категорий/подкатегорий.

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

Спасибо!

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


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

поменять порядок сортировки "по-умолчанию" пробовали? ;)

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


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

поменять порядок сортировки "по-умолчанию" пробовали? ;)

Вы меня не правильно поняли, а я, наверное, не правильно объяснил.

Попробую нарисовать :)

post-3786-0-19735400-1303885732_thumb.jpg

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


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

Если есть такая иерархия каталога:

Category 1

-- SubCategory 1.1

-- SubCategory 1.2

-- -- SubSubCategory 1.2.1

-- -- SubSubCategory 1.2.2

-- SubCategory 1.3

Category 2

Category 3

Для товаров принадлежащих, например, SubSubCategory 1.2.1 надо отметить галочками категории-родители (SubCategory 1.2 и Category 1)

После этого товары из SubSubCategory 1.2.1 будут отображаться в родительских категориях.

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


Ссылка на сообщение
Поделиться на другие сайты
Yesvik, такой вариант не подходит, т.к. (забыл дописАть), товар находится только в одной категории (в родительские категории он не входит).

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


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

Неоднократно поднимался такой вопрос: Как составить MySQL запрос для выбора... ...всех продуктов из категории и подкатегорий?.

Смотрели в эту сторону?

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


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

Неоднократно поднимался такой вопрос: Как составить MySQL запрос для выбора... ...всех продуктов из категории и подкатегорий?.

Смотрели в эту сторону?

Спасибо, afwollis! Нет, не смотрел. Вечером попробую и отпишусь.

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


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

Не получается :-( Добавил функцию w_getProductsByCategoryIdPlusSubcategories (и др., что там написано) - при заходе в категорию (если у нее есть подкатегории) по всей странице кракозяблы, а при заходе в любую категорию (уже в список товаров) - пишет, категория пуста.

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


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

Только сегодня попробовал...

Не получается :-( Добавил функцию w_getProductsByCategoryIdPlusSubcategories (и др., что там написано) - при заходе в категорию (если у нее есть подкатегории) по всей странице кракозяблы, а при заходе в любую категорию (уже в список товаров) - пишет, категория пуста.

Так помимо добаления функции в catalog/model/catalog/product.php, необходимо добавить в catalog/controller/product/category.php вызов этой функции, а в catalog/view/theme/default/template/product/category.php добавить всё необходимое для отображения товаров. Могу выложить свои файлы, но у меня переделок в них очень много и мало что комментировано.

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


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

Так помимо добаления функции в catalog/model/catalog/product.php, необходимо добавить в catalog/controller/product/category.php вызов этой функции, а в catalog/view/theme/default/template/product/category.php добавить всё необходимое для отображения товаров. Могу выложить свои файлы, но у меня переделок в них очень много и мало что комментировано.

Если не затруднит, выложите, плз, свои эти три файла (в catalog/model/catalog/product.php хочу свериться).

Попробую разобраться.

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


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

Так помимо добаления функции в catalog/model/catalog/product.php, необходимо добавить в catalog/controller/product/category.php вызов этой функции, а в catalog/view/theme/default/template/product/category.php добавить всё необходимое для отображения товаров. Могу выложить свои файлы, но у меня переделок в них очень много и мало что комментировано.

это в catalog/model/catalog/product.php

public function getProductsByCategoryIdPlusSubcategories($category_id, $values, $sort = 'p.date_available', $order = 'ASC', $start = 0, $limit = 20, $manufacturer = false, $actual = false) {
                $sql = "SELECT *, pd.name AS name, p.image, m.name AS manufacturer, ss.name AS stock, (SELECT AVG(r.rating) FROM " . DB_PREFIX . "review r WHERE p.product_id = r.product_id GROUP BY r.product_id) AS rating FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) LEFT JOIN " . DB_PREFIX . "stock_status ss ON (p.stock_status_id = ss.stock_status_id) LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (p.product_id = p2c.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p2c.category_id IN (SELECT category_id FROM " . DB_PREFIX . "category WHERE parent_id = '" . (int)$category_id . "' OR category_id = '" . (int)$category_id . "')"; 
		
		$sort_data = array(
			'pd.name',
			'p.price',
			'rating',
			'p.date_available',
			'p.stock_status_id'
		);	
			
		if (in_array($sort, $sort_data)) {
			$sql .= " ORDER BY p.date_available";
		} else {
			$sql .= " ORDER BY p.date_available";	
		}
			
		if ($order == 'DESC') {
			$sql .= " DESC";
		} else {
			$sql .= " DESC";
		}
		
		if ($start < 0) {
			$start = 0;
		}
		
		$sql .= " LIMIT " . (int)$start . "," . (int)$limit;
		
		$query = $this->db->query($sql);
								  
		return $query->rows;
        }
это в catalog/controller/product/category.php

$this->data['products_lc'] = array();
        		
//$results_lc = $this->model_catalog_product->getProductsByCategoryIdPlusSubcategories($category_id, $values=NULL, $sort, $order, 0, 0);
$results_lc = $this->model_catalog_product->getProductsByCategoryIdPlusSubcategories($category_id, $values, $sort, $order, ($page - 1) * 8, 8);
	
foreach ($results_lc as $result_lc) {
					if ($result_lc['image']) {
						$image = $result_lc['image'];
					} else {
						$image = 'no_image.jpg';
					}
					
					//$rating = $this->model_catalog_review->getAverageRating($result['product_id']);	
 					
					//$special = FALSE;
					
					//$discount = $this->model_catalog_product->getProductDiscount($result['product_id']);
 					
					if ($discount) {
						$price = $this->currency->format($this->tax->calculate($discount, $result_lc['tax_class_id'], $this->config->get('config_tax')));
					} else {
						$price = $this->currency->format($this->tax->calculate($result_lc['price'], $result_lc['tax_class_id'], $this->config->get('config_tax')));
					
						$special = $this->model_catalog_product->getProductSpecial($result['product_id']);
					
						if ($special) {
							$special = $this->currency->format($this->tax->calculate($special, $result['tax_class_id'], $this->config->get('config_tax')));
						}					
					}

					$this->data['products_lc'][] = array(
					    
            			'name'    => $result_lc['name'],
						'product_id' => $result_lc['product_id'],
						'date_available' => $result_lc['date_available'],
						'stock_status_id' => $result_lc['stock_status_id'],
						'model'   => $result_lc['model'],
						'spec_date_end'    => $result_lc['spec_date_end'],
						'sku'   => $result_lc['sku'],
						'year'   => $result_lc['year'],
						//'short_desc'   => html_entity_decode($result['short_desc'], ENT_QUOTES, 'UTF-8'),
						//'description' => html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8'),
						//'description' => mb_substr(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8'), 0, 200),
            			//'rating'  => $rating,
						//'num_stars' => $rating * 10,
						//'stars'   => sprintf($this->language->get('text_stars'), $rating),
						//'stars'   => sprintf($this->language->get('text_stars'), round($rating, 1)),
						'thumb'   => $this->model_tool_image ->resize($image, $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height')),
            			'price'   => $price,
						'special' => $special,
						'quantity' => $result_lc['quantity'],
						//'href'  => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/product&path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'])
						'href'    => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/product&product_id=' . $result_lc['product_id'])
          			);
        		}
это в catalog/view/theme/default/template/product/category.tpl

<div class="top" style="margin-left:2px;" >
    <div class="center_grey">
      <h1><span class="header_mid_blue">Новинки категории <?php echo $heading_title; ?></span></h1>
    </div>
  </div>
    <div style="height:5px;"></div>
<table class="list2">
      <?php for ($i = 0; $i < sizeof($products_lc); $i = $i + 4) { ?>
      <tr>
          <?php for ($j = $i; $j < ($i + 4); $j++) { ?>
        
         <td style="width: 25%;">
		 <div id="cont_home">
         <?php if (isset($products_lc[$j])) { ?>
		  <div id="prod_name"><a href="<?php echo $products_lc[$j]['href']; ?>" title="Описание технические характеристики <?php echo $products_lc[$j]['name']; ?>"><?php echo $products_lc[$j]['name']; ?></a></div>
          <div style="width: 100%;" >
		<?php if (!$products_lc[$j]['special']) { ?>
		<?php } else { ?>
		  <!-- <div id="div_img_spec"></div> -->
		  <?php } ?>
          <a href="<?php echo str_replace('&', '&', $products_lc[$j]['href']); ?>"><img src="<?php echo $products_lc[$j]['thumb']; ?>" title="<?php echo $products_lc[$j]['name']; ?>" alt="<?php echo $products_lc[$j]['name']; ?>" id="image<?php echo $products_lc[$j]['product_id']; ?>" /></a><br />
		  </div>
		 <center>
<div style="text-align:center; width:160px; padding-top:10px;">
        <div id="buy">
		<?php if ($display_price) { ?>
         <?php if (!$products_lc[$j]['special']) { ?>
        <span style="font-size:16px; color:#6f6f6f;"><b><?php echo $products_lc[$j]['price']; ?></b></span>
         <?php } else { ?>
        <span style="color: #F00; font-weight: bold;"><font style="font-size: 16px;"><?php echo $products_lc[$j]['special']; ?></font></span>
         <?php } ?>
		 <?php } ?>
		</div>
        <div id="buy1">
		<a class="button_new small_green" href="#" onclick="buyProduct(<?php echo $products_lc[$j]['product_id']; ?>);return false;"  id="add_to_cart<?php echo $products_lc[$j]['product_id']; ?>"><span>Купить</span></a>
		</div>
</div>
</center>
          <?php } ?>
		  </div>
		  </td>
        <?php } ?>
      </tr>
      <?php } ?>
    </table>

Пример работы - http://avtozvuka.net/autosound/acoustics

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


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

...catalog/controller/product/category.php...

Не могу разобраться с файлом catalog/controller/product/category.php

Подскажите, где нужно вставить указанный код?

Вставил после:

$this->data['products'][] = array(
		'id'	  => $result['product_id'],
        	'name'    => $result['name'],
		'model'   => $result['model'],
            	'rating'  => $rating,
		'stars'   => sprintf($this->language->get('text_stars'), $rating),
		'thumb'   => $this->model_tool_image->resize($image, this->config->get('config_image_product_width'), $this->config->get('config_image_product_height')),
            	'price'   => $price,
            	'options' => $options,
		'special' => $special,
		'href'    => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/product&path=' . $this->request->get['path'] . '&product_id=' . $result['product_id']),
		'add'	  => $add
        	);
        }
Но в категории (под списком подкатегорий) выдает только текст "Новинки категории <имя категории>" :(

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


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

у меня это все находится после

if ($category_total || $product_total) {
        		$this->data['categories'] = array();
        		
				$results = $this->model_catalog_category->getCategories($category_id);
				
        		foreach ($results as $result) {
					if ($result['image']) {
						$image = $result['image'];
					} else {
						$image = 'no_image.jpg';
					}
					
					$this->data['categories'][] = array(
            			'name'  => $result['name'],
						'id'  => $result['id'],
            			'href'  => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url),
            			'thumb' => $this->model_tool_image ->resize($image, $this->config->get('config_image_category_width'), $this->config->get('config_image_category_height'))
          			);
        		}

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


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

Спасибо, serega-lomik, получилось.

Но немного не то что я хотел... У меня некоторые категории имеют более "разветвленную" иерархию (во написал :) ), т.е. вложенность > 3-го уровня (КАТЕГОРИЯ -> ПОДКАТЕГОРИЯ11 -> ПОДПОДКАТЕГОРИЯ111...). А при предложенном варианте, последние поступления отображаются только тогда, когда захожу (по иерархии) в список "последних" подкатегорий. А хотелось при входе уже в самую первую категорию видеть внизу (под списком подкатегорий) последние поступления ИЗ ВСЕХ подкатегорий и под...подкатегорий даной категории.

Сорри за такую тавтологию :)

Ага, и еще под списком товаров любой категории тоже выводится список последних товаров из нее (что вроде есть лишним).

М-да, прочитал написанное... Не знаю, поймет ли кто, об чем я :)

Изменено пользователем remix8080

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


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

serega-lomik, спасибо за отличную наработку!

Все, вроде бы, работает, но.. при добавлении кода в catalog/controller/product/category.php сыпятся ошибки:

Notice: Undefined variable: values in C:\AppServ\www\klig\catalog\controller\product\category.php on line 150Notice: Undefined variable: discount in C:\AppServ\www\klig\catalog\controller\product\category.php on line 165Notice: Undefined variable: result in C:\AppServ\www\klig\catalog\controller\product\category.php on line 170Notice: Undefined index: spec_date_end in C:\AppServ\www\klig\catalog\controller\product\category.php on line 184Notice: Undefined index: year in C:\AppServ\www\klig\catalog\controller\product\category.php on line 186Notice: Undefined variable: discount in C:\AppServ\www\klig\catalog\controller\product\category.php on line 165Notice: Undefined variable: result in C:\AppServ\www\klig\catalog\controller\product\category.php on line 170Notice: Undefined index: spec_date_end in C:\AppServ\www\klig\catalog\controller\product\category.php on line 184Notice: Undefined index: year in C:\AppServ\www\klig\catalog\controller\product\category.php on line 186Notice: Undefined variable: discount in C:\AppServ\www\klig\catalog\controller\product\category.php on line 165Notice: Undefined variable: result in C:\AppServ\www\klig\catalog\controller\product\category.php on line 170Notice: Undefined index: spec_date_end in C:\AppServ\www\klig\catalog\controller\product\category.php on line 184Notice: Undefined index: year in C:\AppServ\www\klig\catalog\controller\product\category.php on line 186

версия движка ocStore 0.2.0

Не уверен, но дело, вероятно, в $values

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


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

Вполне возможно. Уберите эту переменную и попробуйте.

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

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


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

serega-lomik, спасибо.

Вся проблема в том, что после удаления переменной ошибки пропадают, но вместе с этим пропадает и вывод последних товаров.

Код вставлял точно по инструкции.

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


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

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

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

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

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

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

Войти

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

Войти

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

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

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.