Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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 в этом месте

Змінено користувачем tolkodelo
Надіслати
Поділитися на інших сайтах


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

 

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

get_category_children

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

  • +1 1
Надіслати
Поділитися на інших сайтах

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 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.