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

Отображение товаров в категории (сортировка)


Recommended Posts

1) Заметил такой не приятный момент, если я не ошибаются то в opencart сортировка по умолчанию  идет по алфавиту?  У меня на одной и той же странице при перезагрузке страницы товары постоянно появляются (строятся) рандомно??? Есть предположение почему это происходит (у многих товаров одинаковые названия, и в своих приделах например на странице 5 товаров с одинаковым названием и они постоянно рандомно генерируют порядок), как их упорядочить что бы постоянно были в адекватном порядке....

 

2) Еще очень плохое что то с пагинацией, допустим при переходе с первой страницы на 2-ю страницу пагинации попадаются товары с первой страницы(бывает даже по несколько товаров).... это вообще как??? это точно нужно исправлять!

https://imperiazolota.ua/ring  протестите

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


11 минут назад, axaxaxa сказал:

1) Заметил такой не приятный момент, если я не ошибаются то в opencart сортировка по умолчанию  идет по алфавиту?  У меня на одной и той же странице при перезагрузке страницы товары постоянно появляются (строятся) рандомно??? Есть предположение почему это происходит (у многих товаров одинаковые названия, и в своих приделах например на странице 5 товаров с одинаковым названием и они постоянно рандомно генерируют порядок), как их упорядочить что бы постоянно были в адекватном порядке....

 

2) Еще очень плохое что то с пагинацией, допустим при переходе с первой страницы на 2-ю страницу пагинации попадаются товары с первой страницы(бывает даже по несколько товаров).... это вообще как??? это точно нужно исправлять!

https://imperiazolota.ua/ring  протестите

по стандарту sort_order

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

покажите файл контролера категорий

к примеру у меня так

 

		if (isset($this->request->get['sort'])) {
			$sort = $this->request->get['sort'];
		} else {
			$sort = 'p.price';
		}

		if (isset($this->request->get['order'])) {
			$order = $this->request->get['order'];
		} else {
			$order = 'ASC';
		}

 

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

9 минут назад, Ptenec сказал:

покажите файл контролера категорий

к примеру у меня так

 


		if (isset($this->request->get['sort'])) {
			$sort = $this->request->get['sort'];
		} else {
			$sort = 'p.price';
		}

		if (isset($this->request->get['order'])) {
			$order = $this->request->get['order'];
		} else {
			$order = 'ASC';
		}

 

у вас не рандомит товары??? пробовали у меня на сайте как происходит ????

Спойлер

<?php
// *	@source		See SOURCE.txt for source and other copyright.
// *	@license	GNU General Public License version 3; see LICENSE.txt

class ControllerProductCategory extends Controller {
	public function index() {
		$this->load->language('product/category');

		$this->load->model('catalog/category');

		$this->load->model('catalog/product');

		$this->load->model('tool/image');
		
		
		$data['text_empty'] = $this->language->get('text_empty');
		$data['text_model'] = $this->language->get('text_model');

		if (isset($this->request->get['filter'])) {
			$filter = $this->request->get['filter'];
			$this->document->setRobots('noindex,follow');
		} else {
			$filter = '';
		}

		if (isset($this->request->get['sort'])) {
			$sort = $this->request->get['sort'];
			$this->document->setRobots('noindex,follow');
		} else {
			$sort = 'p.sort_order';
		}

		if (isset($this->request->get['order'])) {
			$order = $this->request->get['order'];
			$this->document->setRobots('noindex,follow');
		} else {
			$order = 'ASC';
		}

		if (isset($this->request->get['page'])) {
			$page = $this->request->get['page'];
			$this->document->setRobots('noindex,follow');
		} else {
			$page = 1;
		}

		if (isset($this->request->get['limit'])) {
			$limit = (int)$this->request->get['limit'];
			$this->document->setRobots('noindex,follow');
		} else {
			$limit = $this->config->get('theme_' . $this->config->get('config_theme') . '_product_limit');
		}

		$data['breadcrumbs'] = array();

		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('text_home'),
			'href' => $this->url->link('common/home')
		);

		if (isset($this->request->get['path'])) {
			$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'];
			}

			$path = '';

			$parts = explode('_', (string)$this->request->get['path']);

			$category_id = (int)array_pop($parts);

			foreach ($parts as $path_id) {
				if (!$path) {
					$path = (int)$path_id;
				} else {
					$path .= '_' . (int)$path_id;
				}

				$category_info = $this->model_catalog_category->getCategory($path_id);

				if ($category_info) {
					$data['breadcrumbs'][] = array(
						'text' => $category_info['name'],
						'href' => $this->url->link('product/category', 'path=' . $path . $url)
					);
				}
			}
		} else {
			$category_id = 0;
		}

		$category_info = $this->model_catalog_category->getCategory($category_id);

		if ($category_info) {
			
			if ($category_info['meta_title']) {
				$this->document->setTitle($category_info['meta_title']);
			} else {
				$this->document->setTitle($category_info['name']);
			}
			
			if ($category_info['noindex'] <= 0) {
				$this->document->setRobots('noindex,follow');
			}
			
			if ($category_info['meta_h1']) {
				$data['heading_title'] = $category_info['meta_h1'];
			} else {
				$data['heading_title'] = $category_info['name'];
			}
			
			$this->document->setDescription($category_info['meta_description']);
			$this->document->setKeywords($category_info['meta_keyword']);

			$data['text_compare'] = sprintf($this->language->get('text_compare'), (isset($this->session->data['compare']) ? count($this->session->data['compare']) : 0));

			// Set the last category breadcrumb
			$data['breadcrumbs'][] = array(
				'text' => $category_info['name'],
				'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'])
			);

			if ($category_info['image']) {
				$data['thumb'] = $this->model_tool_image->resize($category_info['image'], $this->config->get('theme_' . $this->config->get('config_theme') . '_image_category_width'), $this->config->get('theme_' . $this->config->get('config_theme') . '_image_category_height'));
			} else {
				$data['thumb'] = '';
			}

			$data['description'] = html_entity_decode($category_info['description'], ENT_QUOTES, 'UTF-8');
			$data['compare'] = $this->url->link('product/compare');

			$url = '';

			if (isset($this->request->get['filter'])) {
				$url .= '&filter=' . $this->request->get['filter'];
			}

			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'];
			}

			$data['categories'] = array();

			$results = $this->model_catalog_category->getCategories($category_id);

			foreach ($results as $result) {
				$filter_data = array(
					'filter_category_id'  => $result['category_id'],
					'filter_sub_category' => true
				);

				$data['categories'][] = array(
					'name' => $result['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''),
					'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url)
				);
			}

			$data['products'] = array();

			$filter_data = array(
				'filter_category_id' => $category_id,
				'filter_filter'      => $filter,
				'sort'               => $sort,
				'order'              => $order,
				'start'              => ($page - 1) * $limit,
				'limit'              => $limit
			);

			$product_total = $this->model_catalog_product->getTotalProducts($filter_data);

			$results = $this->model_catalog_product->getProducts($filter_data);

			if ($this->customer->isLogged()) {
				$this->load->model('account/wishlist');
				$w_list = $this->model_account_wishlist->getWishlist();
				} else if (!empty($this->session->data['wishlist'])) {
				$w_list = $this->session->data['wishlist'];
				} 
				else {
				$w_list = array();
				}

			foreach ($results as $result) {
				if ($result['image']) {
					$image = $this->model_tool_image->resize($result['image'], $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_width'), $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_height'));
				} else {
					$image = $this->model_tool_image->resize('placeholder.png', $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_width'), $this->config->get('theme_' . $this->config->get('config_theme') . '_image_product_height'));
				}

				if ($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')), $this->session->data['currency']);
				} 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')), $this->session->data['currency']);
				} else {
					$special = false;
				}

				if ($this->config->get('config_tax')) {
					$tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price'], $this->session->data['currency']);
				} else {
					$tax = false;
				}

				if ($this->config->get('config_review_status')) {
					$rating = (int)$result['rating'];
				} else {
					$rating = false;
				}

				if (in_array($result['product_id'], $w_list)) {
					$wl_class = 'wl-add';
					} else {
					$wl_class = '';
					}

				$data['products'][] = array(					
					'product_id'  => $result['product_id'],
					'thumb'       => $image,
					'name'        => $result['name'],					
					'model'       => $result['model'],
					'description' => utf8_substr(trim(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8'))), 0, $this->config->get('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..',
					'price'       => $price,
					'special'     => $special,
					'tax'         => $tax,
					'minimum'     => $result['minimum'] > 0 ? $result['minimum'] : 1,
					'rating'      => $result['rating'],
					'href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url),
					'wl_class'    => $wl_class
				);
			}

			$url = '';

			if (isset($this->request->get['filter'])) {
				$url .= '&filter=' . $this->request->get['filter'];
			}

			if (isset($this->request->get['limit'])) {
				$url .= '&limit=' . $this->request->get['limit'];
			}

			$data['sorts'] = array();

			$data['sorts'][] = array(
				'text'  => $this->language->get('text_default'),
				'value' => 'p.sort_order-ASC',
				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.sort_order&order=ASC' . $url)
			);

			

			$data['sorts'][] = array(
				'text'  => $this->language->get('text_price_asc'),
				'value' => 'p.price-ASC',
				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.price&order=ASC' . $url)
			);

			$data['sorts'][] = array(
				'text'  => $this->language->get('text_price_desc'),
				'value' => 'p.price-DESC',
				'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.price&order=DESC' . $url)
			);

			if ($this->config->get('config_review_status')) {
				$data['sorts'][] = array(
					'text'  => $this->language->get('text_rating_desc'),
					'value' => 'rating-DESC',
					'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=rating&order=DESC' . $url)
				);

				
			}

			

			$url = '';

			if (isset($this->request->get['filter'])) {
				$url .= '&filter=' . $this->request->get['filter'];
			}

			if (isset($this->request->get['sort'])) {
				$url .= '&sort=' . $this->request->get['sort'];
			}

			if (isset($this->request->get['order'])) {
				$url .= '&order=' . $this->request->get['order'];
			}

			$data['limits'] = array();

			$limits = array_unique(array($this->config->get('theme_' . $this->config->get('config_theme') . '_product_limit'), 25, 50, 75, 100));

			sort($limits);

			foreach($limits as $value) {
				$data['limits'][] = array(
					'text'  => $value,
					'value' => $value,
					'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&limit=' . $value)
				);
			}

			$url = '';

			if (isset($this->request->get['filter'])) {
				$url .= '&filter=' . $this->request->get['filter'];
			}

			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'];
			}

			$pagination = new Pagination();
			$pagination->total = $product_total;
			$pagination->page = $page;
			$pagination->limit = $limit;
			$pagination->url = $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&page={page}');

			$data['pagination'] = $pagination->render();

			$data['results'] = sprintf($this->language->get('text_pagination'), ($product_total) ? (($page - 1) * $limit) + 1 : 0, ((($page - 1) * $limit) > ($product_total - $limit)) ? $product_total : ((($page - 1) * $limit) + $limit), $product_total, ceil($product_total / $limit));

			// http://googlewebmastercentral.blogspot.com/2011/09/pagination-with-relnext-and-relprev.html
			if ($page == 1) {
			    $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id']), 'canonical');
			} else {
				$this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'] . '&page='. $page), 'canonical');
			}
			
			if ($page > 1) {
			    $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'] . (($page - 2) ? '&page='. ($page - 1) : '')), 'prev');
			}

			if ($limit && ceil($product_total / $limit) > $page) {
			    $this->document->addLink($this->url->link('product/category', 'path=' . $category_info['category_id'] . '&page='. ($page + 1)), 'next');
			}

			$data['sort'] = $sort;
			$data['order'] = $order;
			$data['limit'] = $limit;

			$data['continue'] = $this->url->link('common/home');

			$data['column_left'] = $this->load->controller('common/column_left');
			$data['column_right'] = $this->load->controller('common/column_right');
			$data['content_top'] = $this->load->controller('common/content_top');
			$data['content_topf'] = $this->load->controller('common/content_topf');
			$data['content_botf'] = $this->load->controller('common/content_botf');
			$data['content_bottom'] = $this->load->controller('common/content_bottom');
			$data['footer'] = $this->load->controller('common/footer');
			$data['header'] = $this->load->controller('common/header');
			

			$this->response->setOutput($this->load->view('product/category', $data));
		} else {
			$url = '';

			if (isset($this->request->get['path'])) {
				$url .= '&path=' . $this->request->get['path'];
			}

			if (isset($this->request->get['filter'])) {
				$url .= '&filter=' . $this->request->get['filter'];
			}

			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'];
			}

			$data['breadcrumbs'][] = array(
				'text' => $this->language->get('text_error'),
				'href' => $this->url->link('product/category', $url)
			);

			$this->document->setTitle($this->language->get('text_error'));

			$data['continue'] = $this->url->link('common/home');

			$this->response->addHeader($this->request->server['SERVER_PROTOCOL'] . ' 404 Not Found');

			$data['column_left'] = $this->load->controller('common/column_left');
			$data['column_right'] = $this->load->controller('common/column_right');
			$data['content_top'] = $this->load->controller('common/content_top');
			$data['content_topf'] = $this->load->controller('common/content_topf');
			$data['content_botf'] = $this->load->controller('common/content_botf');
			$data['content_bottom'] = $this->load->controller('common/content_bottom');
			$data['footer'] = $this->load->controller('common/footer');
			$data['header'] = $this->load->controller('common/header');

			$this->response->setOutput($this->load->view('error/not_found', $data));
		}
	}
}

 

 

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


1 час назад, axaxaxa сказал:

это точно нужно исправлять!

отключи фильтр и попробуй? будет также мешать сортировку или нет?
 

Так как мне кажется фильтр выводит свою сортировку.

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


1 час назад, axaxaxa сказал:

изначальная сортировка происходит отсюда, если я не ошибаюсь catalog\model\catalog\product.php

от туда тоже! но то что я скинул выше стоит в приоритете!  если модификаторы не внесли у вас коррективы

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

5 часов назад, kikaridza123 сказал:

отключи фильтр и попробуй? будет также мешать сортировку или нет?
 

Так как мне кажется фильтр выводит свою сортировку.

без фильтра так же, попробовал

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


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

if (isset($this->request->get['sort'])) {
			$sort = $this->request->get['sort'];
			$this->document->setRobots('noindex,follow');
		} else {
			$sort = 'p.date_added';
		}

		if (isset($this->request->get['order'])) {
			$order = $this->request->get['order'];
			$this->document->setRobots('noindex,follow');
		} else {
			$order = 'ASC';
		}

отсортировало, уже меньше товары  перемешиваются после перезагрузки страницы, но то что товар с первой страницы может отобразиться на 2-й или 3-й, вообще плохо, как решить???

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


Ребята, дайте ответ, как сделать хотя бы что бы в одно сессии товары не прыгали, а дубли(повторы) товаров при пагинации!!! Что делать????

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


короче сделал сортировку по ID товара, все мои симптомы пропали, рандомности и дублей нету, но теперь появилась проблемка, при такой сортировке нету возможности поднять товар выше или опустить, в товаре порядок сортировки не влияет, можно как то решить?

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


6 минут назад, axaxaxa сказал:

короче сделал сортировку по ID товара, все мои симптомы пропали, рандомности и дублей нету, но теперь появилась проблемка, при такой сортировке нету возможности поднять товар выше или опустить, в товаре порядок сортировки не влияет, можно как то решить?

Модуль сортировка товаров в категории

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

4 часа назад, axaxaxa сказал:

короче сделал сортировку по ID товара, все мои симптомы пропали, рандомности и дублей нету,

Конечно
потому что у вас неоднозначная сотриовка

Сортировка дефолтная подразумевает двойную
ORDER BY sort_order, pd.name

 

1 . 0 aaa
2 . 0 aaa
3,  0 aaa

Что у вас там.. не знаю, но что 123 321 231 - однозначны
И по каким-либо внутренним параметрам оптимизатора происходит псевдослучайная сортировка .. сортировки

 

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

4 часа назад, axaxaxa сказал:

можно как то решить?

 

12 минут назад, axaxaxa сказал:

я спрашиваю совет а не какай модуль купить

 

А что не так? :)

Вот, например, на Ваш первый вопрос я находил несколько решений на данном форуме.

Если поиском не владеете (скорее всего нет, раз создали тему), то есть способ проще, надёжнее и качественнее.

Есть обученная программа, которая "в два клика" сделает работу за Вас.

Причем цена у неё смехотворная да ещё с моментальной техподдержкой.

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

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


  • 4 weeks later...
В 03.10.2019 в 14:36, Otvet сказал:

 

купил сегодня 

установил, в расширения > модификаторы есть, расширения > расширения нету! плюс ошибка появилась

Notice: Undefined variable: limits in D:\OSPanel\domains\test.imperiazolota.ua\catalog\controller\module\sorts_limits.php on line 180Warning: Invalid argument supplied for foreach() in D:\OSPanel\domains\storage\modification\catalog\controller\product\category.php on line 448

мне нужно для opencart 3, а в скачаном архиве файлы tpl

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


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

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

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

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

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

Вхід

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

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

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

Important Information

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