По умолчанию в OpenCart доступна сортировка четырёх видов: по умолчанию (по порядку), по наименованию продукта, по цене и по наименованию модели.
Сортировка продуктов (программно) выполняется путём выполнения сформированного SQL-запроса в модели
./catalog/model/catalog/product.php в функциях
getProducts и
getProductSpecials.
Избыточность сортировки заключается в том, что при выборе сортировки по наименованию, сортировка в запросе получится следующая:
ORDER BY LCASE(pd.name) ASC, LCASE(pd.name) ASC.
Чтобы исключить дополнительную, пусть и незначительную, нагрузку на базу, часть кода в перечисленных выше функциях
...
if (isset($data['order']) && ($data['order'] == 'DESC')) {
$sql .= " DESC, LCASE(pd.name) DESC";
} else {
$sql .= " ASC, LCASE(pd.name) ASC";
}
...
необходимо заменить на
if (isset($data['order']) && ($data['order'] == 'DESC')) {
$sql .= " DESC";
if (isset($data['sort']) && $data['sort'] != 'pd.name') $sql .= ", LCASE(pd.name) DESC";
} else {
$sql .= " ASC";
if (isset($data['sort']) && $data['sort'] != 'pd.name') $sql .= ", LCASE(pd.name) ASC";
}
Хотелось бы отметить тот факт, что такие мелочи в купе дают значительную нагрузку на сервер и в конечном итоге успешный продукт становится тяжёлым и неповоротливым.