trampich

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

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

trampich    0

Всем привет!

В категории товаров нужна сортировка по производителям. Копал не нашёл. Что посоветуете?

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


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

Если с английским дружите, то вот на оф.сайте мой пост с howto-файлом:

Re: [MOD] Filtering product by manufacturers in categories

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


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

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

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);
косячит :(

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


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

$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 все корректно вроде бы, но у меня демо база. Что именно косячит?

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


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

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

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

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


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

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

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

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


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

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

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

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

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

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

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

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


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

Сайт локальный

Изменено пользователем afwollis
overquote detected!

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


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

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);
и выберите какого-нибудь производителя в списке фильтрации.

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

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


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

Поругал :D

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

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

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


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

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

ну а кто-то пляшет от "Openstore_module_product_filter_1.0_(clean_install)"...

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


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

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

$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
убрал "многабукаф" в цитату. чтобы читать удобнее было

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


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

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

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

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


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

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

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

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


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

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

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

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

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


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

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

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


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

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

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

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


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

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

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

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

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


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

решил.

открываем

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

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

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


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

Под 1.5 есть исправления?

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


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

Присоединяюсь Ritter, по 1.5 есть рецепт?

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


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

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

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


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

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

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

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

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

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

Войти

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

Войти


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

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