немного не то правите
для сортировки "по алфавиту" следует заменить
$categories = $this->model_catalog_category->getAllCategories();
$data['categories'] = $this->model_catalog_category->getCategories($categories);
на
$filter_data = array(
'sort' => 'name',
);
$data['categories'] = $this->model_catalog_category->getCategories($filter_data);
а строка
$categories = $this->model_catalog_category->getAllCategories();
не нужна, т.к. ее данные не соответствуют принимаемым методом модели getCategories, а далее переменная $categories все равно переопределяется
и в нагрузку:
если хочется, чтобы было как в списке категорий, тогда правим еще и метод getCategories модели ModelCatalogCategory
меняем
$sql = "SELECT cp.category_id AS category_id, GROUP_CONCAT(cd1.name ORDER BY cp.level SEPARATOR ' > ') AS name, c1.parent_id, c1.sort_order, c1.noindex FROM " . DB_PREFIX . "category_path cp LEFT JOIN " . DB_PREFIX . "category c1 ON (cp.category_id = c1.category_id) LEFT JOIN " . DB_PREFIX . "category c2 ON (cp.path_id = c2.category_id) LEFT JOIN " . DB_PREFIX . "category_description cd1 ON (cp.path_id = cd1.category_id) LEFT JOIN " . DB_PREFIX . "category_description cd2 ON (cp.category_id = cd2.category_id) WHERE cd1.language_id = '" . (int)$this->config->get('config_language_id') . "' AND cd2.language_id = '" . (int)$this->config->get('config_language_id') . "'";
на
$sql = "SELECT cp.category_id AS category_id, GROUP_CONCAT(cd1.name ORDER BY cp.level SEPARATOR ' > ') AS name, REPLACE(RPAD(GROUP_CONCAT(c2.sort_order ORDER BY cp.level SEPARATOR '-'),10,'-0'),'-','')+0 AS basesort, c1.parent_id, c1.sort_order, c1.noindex FROM " . DB_PREFIX . "category_path cp LEFT JOIN " . DB_PREFIX . "category c1 ON (cp.category_id = c1.category_id) LEFT JOIN " . DB_PREFIX . "category c2 ON (cp.path_id = c2.category_id) LEFT JOIN " . DB_PREFIX . "category_description cd1 ON (cp.path_id = cd1.category_id) LEFT JOIN " . DB_PREFIX . "category_description cd2 ON (cp.category_id = cd2.category_id) WHERE cd1.language_id = '" . (int)$this->config->get('config_language_id') . "' AND cd2.language_id = '" . (int)$this->config->get('config_language_id') . "'";
и
$sort_data = array(
'name',
'sort_order',
'noindex'
);
if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
$sql .= " ORDER BY " . $data['sort'];
} else {
$sql .= " ORDER BY sort_order";
}
на
$sort_data = array(
'name',
'sort_order',
'noindex',
'basesort'
);
if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
if ($data['sort'] == 'basesort') {
$sql .= " ORDER BY basesort " . ((isset($data['order']) && ($data['order'] == 'DESC'))?'DESC':'') . ", " . $data['sort'];
} else {
$sql .= " ORDER BY " . $data['sort'];
}
} else {
$sql .= " ORDER BY sort_order";
}
и в контроллере вместо 'sort' => 'name' пишем 'sort' => 'basesort'
но тут следует иметь в виду, что порядок сортировки должен быть явно задан для категорий, иначе в выборке будет бардак