Апну тему.
Недавно вернулся к этой ошибке вывода категорий.
Решение для себя нашел в 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";
}
Выводить категории стало по алфавиту, и с учетом структуры "категорий-подкатегорий-и глубже". Мне этого достаточно, как думаю и большинству.
Для удобства личных ocmod'ов:
Сделать идеальную сортировку через c1.sort_order у меня не вышло. Чтобы учитывало выставленную сортировку и корректную структуру вложения категорий. Пробовал варианты:
$sql .= " GROUP BY cp.category_id ORDER BY c1.sort_order, c1.parent_id";
Но не сработало. Дальше копать было лень.
Может кто более компетентный подскажет?