Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

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


Recommended Posts

Написал свой файл модели, который берет из базы 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 в этом месте

Edited by tolkodelo
Link to comment
Share on other sites


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;

Заработало

Link to comment
Share on other sites


Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.