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

Дополнительная сортировка


trampich

Recommended Posts

Сделал всё по инструкции, но товары показывает все сразу.

ocStore v0.1.7 (OpenCart 1.4.9.3)

$product_total = $this->model_catalog_product->getTotalProductsByCategoryId($category_id, $curr_manufacturer);
проробатывает отлично, показывая количество

но

$results = $this->model_catalog_product->getProductsByCategoryId($category_id, $sort, $order, ($page - 1) * $this->config->get('config_catalog_limit'), $this->config->get('config_catalog_limit'), $curr_manufacturer);
косячит :(
Надіслати
Поділитися на інших сайтах


$results = $this->model_catalog_product->getProductsByCategoryId($category_id, $sort, $order, ($page - 1) * $this->config->get('config_catalog_limit'), $this->config->get('config_catalog_limit'), $curr_manufacturer);
косячит :(
Ставил на 1.4.9.3 все корректно вроде бы, но у меня демо база. Что именно косячит?
Надіслати
Поділитися на інших сайтах


Ставил на 1.4.9.3 все корректно вроде бы, но у меня демо база. Что именно косячит?

У меня тоже демо база, сортировка по цене работает (товары двигаются ну всё стандарно), но когда жму на производителя то ничего не меняется, только снизу какое количество товаров. Например если товар всего 1-ин в категории, показываются и все остальные
Надіслати
Поділитися на інших сайтах


У меня тоже демо база, сортировка по цене работает (товары двигаются ну всё стандарно), но когда жму на производителя то ничего не меняется, только снизу какое количество товаров. Например если товар всего 1-ин в категории, показываются и все остальные

Не совсем понял... У меня если товар один в категории, то ни при каких сортировках никакие другие не показываются. Если товаров несколько, то сортировка по проихводителям работает корректно.

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


Исправил в howto пути к файлу контроллера категорий.

Спасибо 19th за репорт.

Странно, что никто, из скачавших howto на оф.сайте до этого, не отписался о проблеме.

trampich, а хз чо там у вас.

Народ вроде пользуется :) да и у меня все эти модификации стоят на хосте "и не жужжат" :D

Сайт локально или в инете?

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

catalog/controller/product/category.php
перед

$results = $this->model_catalog_product->getProductsByCategoryId($category_id, $sort, $order, ($page - 1) * $this->config->get('config_catalog_limit'), $this->config->get('config_catalog_limit'), $curr_manufacturer);
вставьте

print_r("\$this->model_catalog_product->getProductsByCategoryId(".$category_id.", ".$sort.", ".$order.", (".$page." - 1) * ".$this->config->get('config_catalog_limit').", ".$this->config->get('config_catalog_limit').", ".$curr_manufacturer.")");
зайдите в категорию.

вверху страницы появится строчка, типа такой

$this->model_catalog_product->getProductsByCategoryId(18, p.sort_order, ASC, (1 - 1) * 4, 4, 0)
скопируйте её в сообщение.

выберите какого-нибудь производителя в списке фильтрации и скопируйте снова строчку вверху страницы.

Не забудьте подписать "ху-из-ху", т.е. какая строка от каких действий.

Ну и до кучи после этого откройте файл

catalog/model/catalog/product.php
в функции

public function getProductsByCategoryId($category_id, $sort = 'p.sort_order', $order = 'ASC', $start = 0, $limit = 20, $manufacturer_id=0) {
перед

$query = $this->db->query($sql);
вставьте

print_r($sql);
и выберите какого-нибудь производителя в списке фильтрации.

скопируйте выхлоп (многа-букафф) вверху сайта и также выложите в сообщении.

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

Поругал :D

У меня кроме рейтинга все так и сделано изначально :ph34r:

Змінено користувачем afwollis
Надіслати
Поділитися на інших сайтах

В одной из категорий

$this->model_catalog_product->getProductsByCategoryId(20, p.sort_order, ASC, (1 - 1) * 20, 20, 0)
Выбран один из производителей

$this->model_catalog_product->getProductsByCategoryId(24, p.sort_order, ASC, (1 - 1) * 20, 20, 5)
Скриншот ... post-5789-0-94135100-1298738385_thumb.jpg

МногоБукаВ

$this->model_catalog_product->getProductsByCategoryId(24, p.sort_order, ASC, (1 - 1) * 20, 20, 5)SELECT *, pd.name AS name, p.image, m.name AS manufacturer, ss.name AS stock, (SELECT AVG(r.rating) FROM oc_review r WHERE p.product_id = r.product_id GROUP BY r.product_id) AS rating FROM oc_product p LEFT JOIN oc_product_description pd ON (p.product_id = pd.product_id) LEFT JOIN oc_product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN oc_manufacturer m ON (p.manufacturer_id = m.manufacturer_id) LEFT JOIN oc_stock_status ss ON (p.stock_status_id = ss.stock_status_id) LEFT JOIN oc_product_to_category p2c ON (p.product_id = p2c.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND pd.language_id = '1' AND p2s.store_id = '0' AND ss.language_id = '1' AND p2c.category_id = '24' ORDER BY p.sort_order ASC LIMIT 0,20

Скриншот ... post-5789-0-82089300-1298738491_thumb.jpg Змінено користувачем afwollis
убрал "многабукаф" в цитату. чтобы читать удобнее было
Надіслати
Поділитися на інших сайтах


нет условия для выбора производителя.

Add
	===
	/* filter by manufacturer id - start */
		if ($manufacturer_id > 0) {
			$sql .= " AND p.manufacturer_id = '".$manufacturer_id."'";
		}
		/* filter by manufacturer id - end */
	===

BEFORE
	===
		$sort_data = array(
			'pd.name',
			'p.sort_order',
			'special',
			'rating',
			'p.price',
			'p.model'
		);
	===
внимательно пересмотрите HOWTO
Надіслати
Поділитися на інших сайтах

  • 3 weeks later...

Отличное дополнение!!!

Но, пожалуйста подскажите, возможно ли сделать так, чтобы после выбора производителя осуществлялась сортировка по имени, цене, модели и т.д. только в товарах выбранного производителя, а не по всем товарам категории, как это происходит сейчас???

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


  • 2 weeks later...

нет условия для выбора производителя.

Add
	===
	/* filter by manufacturer id - start */
		if ($manufacturer_id > 0) {
			$sql .= " AND p.manufacturer_id = '".$manufacturer_id."'";
		}
		/* filter by manufacturer id - end */
	===

BEFORE
	===
		$sort_data = array(
			'pd.name',
			'p.sort_order',
			'special',
			'rating',
			'p.price',
			'p.model'
		);
	===
внимательно пересмотрите HOWTO

А что если

$this->model_catalog_product->getProductsByCategoryId(703, pd.name, ASC, (1 - 1) * , , 113)

и

SELECT *, pd.name AS name, p.image, m.name AS manufacturer, ss.name AS stock, (SELECT AVG(r.rating) FROM review r WHERE p.product_id = r.product_id GROUP BY r.product_id) AS rating FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN manufacturer m ON (p.manufacturer_id = m.manufacturer_id) LEFT JOIN stock_status ss ON (p.stock_status_id = ss.stock_status_id) LEFT JOIN product_to_category p2c ON (p.product_id = p2c.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND pd.language_id = '5' AND ss.language_id = '5' AND p2c.category_id = '703' AND p.manufacturer_id = '113' ORDER BY pd.name ASC LIMIT 0,12

При этом пришлось прописать жестко:

$results = $this->model_catalog_product->getProductsByCategoryId($category_id, $sort, $order, ($page - 1) * 12, 12, $curr_manufacturer);

вместо

$results = $this->model_catalog_product->getProductsByCategoryId($category_id, $sort, $order, ($page - 1) * $this->config->get('config_catalog_limit'), $this->config->get('config_catalog_limit'), $curr_manufacturer);

т.к. во втором случае вообще пусто на странице:

SELECT *, pd.name AS name, p.image, m.name AS manufacturer, ss.name AS stock, (SELECT AVG(r.rating) FROM review r WHERE p.product_id = r.product_id GROUP BY r.product_id) AS rating FROM product p LEFT JOIN product_description pd ON (p.product_id = pd.product_id) LEFT JOIN manufacturer m ON (p.manufacturer_id = m.manufacturer_id) LEFT JOIN stock_status ss ON (p.stock_status_id = ss.stock_status_id) LEFT JOIN product_to_category p2c ON (p.product_id = p2c.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND pd.language_id = '5' AND ss.language_id = '5' AND p2c.category_id = '703' AND p.manufacturer_id = '113' ORDER BY pd.name ASC LIMIT 0,0

Подскажите, пожалуйста, в чем ошибка?

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


  • 1 month later...

Вопрос. Возможно ли сделать 2 сортировки товара. тоесть у меня например в магазине есть повторяющая продукция но раного обьема и разные производители. Сейчас при сортировке например по имени получается каша из прозиводителей. идут в разброс. При сортировке по прозводителю идет каша по названию. тоесть 1 продукт может попастя в начале страница и тот же самый в конце списка по производителю. Пробовал разные способы и назначению продуктам порядка но все равно не помогает, вся продукция идет в разброс

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

shoma, конечно можно.

надо только определиться с данными, по которым должны сортироваться товары и указать соответствующие поля в сортировке в sql-запросе.

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

  • 3 weeks later...

Отличное дополнение!!!

Но, пожалуйста подскажите, возможно ли сделать так, чтобы после выбора производителя осуществлялась сортировка по имени, цене, модели и т.д. только в товарах выбранного производителя, а не по всем товарам категории, как это происходит сейчас???

Вот меня тоже интересует этот вопрос, помогите, пожалуйста.

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


  • 1 month later...

решил.

открываем

catalog/controller/product/category.php
ищем
$this->data['sorts'] = array();
перед этой строкой добавить
if (isset($this->request->get['manufacturer'])) {
					$manu = '&manufacturer=' . $this->request->get['manufacturer'];
				} else {$manu = '';}
находим
$this->data['sorts'][] = array(
					'text'  => $this->language->get('text_default'),
					'value' => 'p.sort_order-ASC',
					'href'  => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $this->request->get['path'] . '&sort=p.sort_order&order=ASC')
				);

				$this->data['sorts'][] = array(
					'text'  => $this->language->get('text_name_asc'),
					'value' => 'pd.name-ASC',
					'href'  => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $this->request->get['path'] . '&sort=pd.name&order=ASC')
				);

				$this->data['sorts'][] = array(
					'text'  => $this->language->get('text_name_desc'),
					'value' => 'pd.name-DESC',
					'href'  => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $this->request->get['path'] . '&sort=pd.name&order=DESC')
				);

				$this->data['sorts'][] = array(
					'text'  => $this->language->get('text_price_asc'),
					'value' => 'p.price-ASC',
					'href'  => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $this->request->get['path'] . '&sort=p.price&order=ASC')
				);

				$this->data['sorts'][] = array(
					'text'  => $this->language->get('text_price_desc'),
					'value' => 'p.price-DESC',
					'href'  => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $this->request->get['path'] . '&sort=p.price&order=DESC')
				);

				if ($this->config->get('config_review')) {
					$this->data['sorts'][] = array(
						'text'  => $this->language->get('text_rating_desc'),
						'value' => 'rating-DESC',
						'href'  => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $this->request->get['path'] . '&sort=rating&order=DESC')
					);

					$this->data['sorts'][] = array(
						'text'  => $this->language->get('text_rating_asc'),
						'value' => 'rating-ASC',
						'href'  => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $this->request->get['path'] . '&sort=rating&order=ASC')
					);
				}

				$this->data['sorts'][] = array(
					'text'  => $this->language->get('text_model_asc'),
					'value' => 'p.model-ASC',
					'href'  => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $this->request->get['path'] . '&sort=p.model&order=ASC')
				);

				$this->data['sorts'][] = array(
					'text'  => $this->language->get('text_model_desc'),
					'value' => 'p.model-DESC',
					'href'  => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $this->request->get['path'] . '&sort=p.model&order=DESC')
				);

заменяем на

$this->data['sorts'][] = array(
					'text'  => $this->language->get('text_default'),
					'value' => 'p.sort_order-ASC',
					'href'  => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $this->request->get['path'] . '&sort=p.sort_order&order=ASC' . $manu)
				);

				$this->data['sorts'][] = array(
					'text'  => $this->language->get('text_name_asc'),
					'value' => 'pd.name-ASC',
					'href'  => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $this->request->get['path'] . '&sort=pd.name&order=ASC' . $manu)
				);

				$this->data['sorts'][] = array(
					'text'  => $this->language->get('text_name_desc'),
					'value' => 'pd.name-DESC',
					'href'  => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $this->request->get['path'] . '&sort=pd.name&order=DESC' . $manu)
				);

				$this->data['sorts'][] = array(
					'text'  => $this->language->get('text_price_asc'),
					'value' => 'p.price-ASC',
					'href'  => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $this->request->get['path'] . '&sort=p.price&order=ASC' . $manu)
				);

				$this->data['sorts'][] = array(
					'text'  => $this->language->get('text_price_desc'),
					'value' => 'p.price-DESC',
					'href'  => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $this->request->get['path'] . '&sort=p.price&order=DESC' . $manu)
				);

				if ($this->config->get('config_review')) {
					$this->data['sorts'][] = array(
						'text'  => $this->language->get('text_rating_desc'),
						'value' => 'rating-DESC',
						'href'  => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $this->request->get['path'] . '&sort=rating&order=DESC' . $manu)
					);

					$this->data['sorts'][] = array(
						'text'  => $this->language->get('text_rating_asc'),
						'value' => 'rating-ASC',
						'href'  => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $this->request->get['path'] . '&sort=rating&order=ASC' . $manu)
					);
				}

				$this->data['sorts'][] = array(
					'text'  => $this->language->get('text_model_asc'),
					'value' => 'p.model-ASC',
					'href'  => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $this->request->get['path'] . '&sort=p.model&order=ASC' . $manu)
				);

				$this->data['sorts'][] = array(
					'text'  => $this->language->get('text_model_desc'),
					'value' => 'p.model-DESC',
					'href'  => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/category&path=' . $this->request->get['path'] . '&sort=p.model&order=DESC' . $manu)
				);

вуаля, сортировка по имени, цене, модели и т.д. работает до или после выбора производителя

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


  • 2 months later...
  • 2 weeks later...
  • 1 month later...

Сделал вроде все по инструкции но реакция нулевая. Вообще все как и было и даже ошибок не выдает. Скорее все в catalog/model/catalog/product.php накосячил. Там мне не совсем понятно было куда вставлять функцию

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


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

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

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

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

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

Вхід

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

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

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

Important Information

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