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

ORDER BY sort_order работает в модели, но расставляет по ID в шаблоне

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

Написал свой файл модели, который берет из базы 4 уровня категорий для вставки в меню.

В model у меня такая строка запроса:
 

'SELECT category_id FROM oc_category WHERE parent_id="' . (переменная) . '" AND status="1" ORDER BY sort_order ASC';

Если поставить в модели print_r([переменная, которую возвращает функция]), выдает найденный массив в порядке, установленном sort_order:

 

Array (
  [0] => Array ( 
              [category_id] => 222,
              [sort_order] => 10 
              ),

  [1] => Array ( 
              [category_id] => 111,
              [sort_order] => 20 
              )
)



В контроллере код такого вида:

foreach ((массив id родительских категорий) as $parent_category) {
			$menu_children = $this->model_additional_categories->get_category_children($parent_category['id']);
			$data['menu_children'][] = (!empty($menu_children))?  array('parent_category' => $parent_category['id'], 'children' => $menu_children) : 'void';
		}

После того, как данные проходят через контроллер хедера, сортировка меняется на сортировку по id категории...

 

Array (
  [0] => Array ( 
                [category_id] => 111,
                [sort_order] => 20 
                ),  

  [1] => Array ( 
                [category_id] => 222,
                [sort_order] => 10 
                )
  )

 

Не понимаю, как с этим побороться. Как OC меняет сортировку, и что бы с этим сделать? Нужна сортировка по sort_order в этом месте

Изменено пользователем tolkodelo

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


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

хм, зачем еще раз сортировать?

 

4 часа назад, tolkodelo сказал:

get_category_children

Покажите запрос?

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


Ссылка на сообщение
Поделиться на другие сайты
9 hours ago, chukcha said:

хм, зачем еще раз сортировать?

 

Покажите запрос?


Все, понял. Я в первом месте получал нужные ID (с сортировкой по sort_order), потом искал в category_description их имена, там видимо сортировка и терялась. Сделал вот так:
 

		//Есть массив категорий верхнего уровня - $ancestor
		
		$children = $third_children = array(); 
			
		//Получаем категории второго уровния: ID и NAME 
		$sql = 'SELECT oc_category.category_id, name
                FROM oc_category, oc_category_description
                WHERE oc_category.parent_id=' . $ancestor . '
                AND oc_category_description.category_id= oc_category.category_id
                AND status=1 ORDER BY sort_order ASC ';
 
		//Обрабатываем категории второго уровня 
		foreach ($this->db->query($sql)->rows as $second_level_item) {
					
					$second_level_data = $second_level_item; //Имя и ID категории для меню второго уровня
 
					//Данные для третьего уровня
					$sql = 'SELECT oc_category.category_id, name
                            FROM oc_category, oc_category_description
                            WHERE oc_category.parent_id=' . $second_level_item['category_id'] . '
                            AND oc_category_description.category_id= oc_category.category_id
                            AND status=1 ORDER BY sort_order ASC ';

						//Обрабатываем категории третьего уровня: ID, NAME и массив дочерних
						foreach ($this->db->query($sql)->rows as $value) {
							
							$sql = 'SELECT oc_category.category_id, name FROM oc_category, oc_category_description
									WHERE oc_category.parent_id=' . $value['category_id'] . '
									AND oc_category_description.category_id= oc_category.category_id
									AND status=1 ORDER BY sort_order ASC ';

							$third_children[] = array(
								'name' =>  $value['name'],
								'id' =>  $value['category_id'],
								'children' => $this->db->query($sql)->rows);
			 
							}; 
			
			//пишем массив
			$children[] = array(
                            'id' => $second_level_item['category_id'],
                            'name' => $second_level_item['name'],
                            'children' => $third_children
							);
			};

		return $children;

Заработало

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


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

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

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

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

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

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

Войти

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

Войти

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

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

×