scary.png Happy Halloween! Лови жутко страшный список шаблонов и модулей со скидками.
Jump to content
Sign in to follow this  
tolkodelo

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

Share this post


Link to post
Share on other sites

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

 

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

get_category_children

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

  • +1 1

Share this post


Link to post
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;

Заработало

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

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.