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

Сортировка в функции getCategories


Recommended Posts

Добрый день.

Замечена кривая сортировка при выводе категорий в админке.

Конкретно там где используется функция getCategories.

На вскидку, встречается во вкладке Связи товарах, категориях, модулях которые используют вывод категорий через getCategories.

Просто сортирует по алфавиту, игнорируя структуру вложения категорий.

Все замеры на демке ocStore 2.3.0.2.2, хотя эта штука тянется с выхода первой двойки.

На демо категорий не много, и это не так критичным кажется.

Однако если категорий много - визуально нужное выбирать становится трудно.

 

Мой вариант решения не уверен, что супер правильный, но хотя бы немного сглаживает ситуацию. Мне этого хватило.

В admin/model/catalog/category.php в функции getCategories в 260 строке

$sql .= " GROUP BY cp.category_id";

заменить на

$sql .= " GROUP BY cp.category_id ORDER BY name, c1.parent_id";

и удалить условие ниже

if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
			$sql .= " ORDER BY " . $data['sort'];
		} else {
			$sql .= " ORDER BY sort_order";
		}

		if (isset($data['order']) && ($data['order'] == 'DESC')) {
			$sql .= " DESC";
		} else {
			$sql .= " ASC";
		}

Выводить категории стало по алфавиту, с учетом структуры вложения "категорий-подкатегорий-и глубже". 

Хотелось бы сделать чтобы подхватывало сортировку и струтктуру установленную пользователем (как это было в ветке 1.5).

Я пробовал варианты через c1.sort_order, но у меня не вышло.

Например: $sql .= " GROUP BY cp.category_id ORDER BY c1.sort_order, c1.parent_id"; - без результата.

 

Может кто более компетентный и разбирающийся подскажет, или доведет до ума мои исправления?

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


1. Не надо лезть в модель

надо в контроллере просто поставить в фильтре нужную сортировку

 

getList() {
        if (isset($this->request->get['sort'])) {
            $sort = $this->request->get['sort'];
        } else {
            $sort = 'name';
        }

2. двойная сортировка в запросе если и получится, то будет нагрузочной для базы

Нужна будет дополнительная сортировка по level - но средствами php

 

 

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

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

1. Не надо лезть в модель

надо в контроллере просто поставить в фильтре нужную сортировку

 


getList() {
        if (isset($this->request->get['sort'])) {
            $sort = $this->request->get['sort'];
        } else {
            $sort = 'name';
        }

2. двойная сортировка в запросе если и получится, то будет нагрузочной для базы

Нужна будет дополнительная сортировка по level - но средствами php

Я так понимаю, по причине нагрузки в 2.х и отказались от двойной сортировки по level?

На магазине с суммой 100+ категорий (разных уровней) выглядит список жутко. Приходится искать нужные категории через ctrl+f

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


22 часа назад, igorekioo сказал:

Я так понимаю, по причине нагрузки в 2.х и отказались от двойной сортировки по level?

Нет

Она бесполезна для такого вида категории

 

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

  • 4 years later...
В 10.04.2017 в 12:55, chukcha сказал:

1. Не надо лезть в модель

надо в контроллере просто поставить в фильтре нужную сортировку

 


getList() {
        if (isset($this->request->get['sort'])) {
            $sort = $this->request->get['sort'];
        } else {
            $sort = 'name';
        }

2. двойная сортировка в запросе если и получится, то будет нагрузочной для базы

Нужна будет дополнительная сортировка по level - но средствами php

 

 

 

А кто знает как в Opencart 3 это сделать можно? там нет в getlist сортировки вообще

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


34 минуты назад, stanr сказал:

А кто знает как в Opencart 3 это сделать можно? там нет в getlist сортировки вообще

Есть. Точно там же, где и в ОС2. 
admin\controller\catalog\category.php

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


33 минуты назад, Shureg сказал:

Что "вот это"? Зачем вы прислали скрин куска getList()  ?

это весь код функции     protected function getList() {

далее там идет protected function getForm() {

 

вот и думаю, где в getlist меняется

 

if (isset($this->request->get['sort'])
Надіслати
Поділитися на інших сайтах


5 минут назад, stanr сказал:

это весь код функции     protected function getList()

Значит, у вас ранняя версия OC. Скачайте последнюю и смотрите, что там добавлено.

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


10 минут назад, Shureg сказал:

Значит, у вас ранняя версия OC. Скачайте последнюю и смотрите, что там добавлено.

так мне именно под мою Ocstore 3.0.2 нужно

да и к тому же в последней ocstore есть этот рекомендованный код https://disk.yandex.com/i/EyRw7d1VQ6a4iQ но при этом все равно не работает сортировка https://disk.yandex.com/i/4utCcWcuI_HRnw

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


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

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

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

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

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

Вхід

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

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

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

Important Information

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