Перейти к содержанию
igorekioo

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

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

Добрый день.

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

Конкретно там где используется функция 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?

Нет

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

 

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


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

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

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

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

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

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

Войти

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

Войти

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

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

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.