Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

Сортировка в функции 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?

Нет

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

 

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

  • 4 года спустя...
В 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

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


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

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

 

у меня только вот это https://disk.yandex.com/i/SAAF3RJId2M3bQ

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


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

у меня только вот это

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

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


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 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

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

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