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

Пользовательская сортировка товаров по имени


Recommended Posts

Доброго дня!

Есть opencart 1.5.6

Хочу сделать пользовательскую сортировку по имени. Анализирую название товара и сортирую функцией uasort() в catalog/controller/product/category.php

После:

$results = $this->model_catalog_product->getProducts($data);
вставляю функцию:

function cmp($a, $b){
...
return ($a < $b) ? -1 : 1;
}
и вызываю ее

uasort($results, "cmp");
Сортировка работает, но в пределах одной страницы.

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

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


$data['sort'] = 'pd.name'

Мне нужно не просто по имени. Мне нужно анализировать имя и в зависимости от условий отсортировать. Это необязательно может быть название товара, но мне нужно именно оно

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


Доделал сам.

Все изменения только в файле catalog/controller/product/category.php

Если кому интересно, то:

Изменил start на 0 и limit сделал 1000, чтобы выбрать наверняка все товары из группы (немного костыльно, но все же работает):

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

			$product_total = $this->model_catalog_product->getTotalProducts($data); 
Далее описываем функцию и запускаем, если сортировка стоит по-умолчанию:

function cmp($a, $b) {
...
return ($a < $b) ? -1 : 1;
}

if($sort == 'p.sort_order') {
    uasort($results, "cmp");
}
Далее добавил счетчик и пару переменных. В цикле вывожу товары только для нужной страницы:

			$num = 0;
			$start1 = ($page - 1) * $limit;
			$limit1 = $page * $limit;

			foreach ($results as $result) {
			  if (($num >= $start1) && ($num < $limit1)) {

				...

			  }
				$num++;
			}
Надіслати
Поділитися на інших сайтах


>> Изменил start на 0 и limit сделал 1000

штудируй доки mysql на предмет "как перенести свою функцию в sql" или выпей йаду.

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

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

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

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

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

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

Вхід

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

Вхід зараз
×
×
  • Створити...

Important Information

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