@it_pear_yurec

Как вывести подкатегории категорий?

Имеется база данных с категориями (id, name, paren_id ...)

выбираю все поля с базы
public static function getCategoriesList(){
		$db = Db::getConnection();
		$categoryList = array();

		$result = $db->query('SELECT id, name, sort_order, status, parent_id FROM category '. 'ORDER BY sort_order ASC');

		$i = 0;
		while ($row = $result->fetch()) {
			$categoryList[$i]['id'] = $row['id'];
			$categoryList[$i]['name'] = $row['name'];
			$categoryList[$i]['sort_order'] = $row['sort_order'];
			$categoryList[$i]['status'] = $row['status'];
      $categoryList[$i]['parent_id'] = $row['parent_id'];
      $categoryList[$i]['parent_id'] = $row['parent_id'];
			$i++;
		}

		return $categoryList;
	}


передаю их в контроллер
class SiteController
{

    public function actionIndex()
    {
        $categories = array();
        $categories = Category::getCategoriesList();

        $latestProducts = array();
        $latestProducts = Product::getLatestProducts(8);
        
        require_once(ROOT . '/views/site/index.php');

        return true;
    }

}


и вывожу
<?php foreach ($categories as $categoryItem): ?>
								<li>
									<p class="aside__title"><?php echo $categoryItem['name'];?></p>
									<div class="aside__plus">
										<span></span><span></span>
									</div>
									<ul>
										<li><a href="">Вариант</a></li>
										<li><a href="">Вариант</a></li>
										<li><a href="">Вариант</a></li>
									</ul>
								</li>
							<?php endforeach; ?>


Как теперь вывести подкатегории каждой категории ?
  • Вопрос задан
  • 80 просмотров
Пригласить эксперта
Ответы на вопрос 2
AleksandrB
@AleksandrB
<?php foreach ($categories as $categoryItem): ?>
                <li>
                  <p class="aside__title"><?php echo $categoryItem['name'];?></p>
                  <div class="aside__plus">
                    <span></span><span></span>
                  </div>
                  <?php if ($categoryItem['podcategory_data']): ?>
                  <ul>
                   <?php foreach ($categoryItem['podcategory_data'] as $podCategoryItem): ?>
                    <li><a href=""><?= $podCategoryItem ?></a></li>
                    <?php endforeach; ?>
                  </ul>

                    <?php endif; ?>
                </li>
              <?php endforeach; ?>

Для начала, конечно, нужно получить podcategory_data из бд (inner join sql запросом или в отдельной функции).
Ответ написан
anton_reut
@anton_reut
Начинающий веб-разработчик
Абстрагируясь от твоего вордпресс-кода, если у тебя например только 2 уровня вложенности, я бы сделал так:

1. Выбираем из базы только те категории которые не имеют родителя (parent = null) то есть Корневые Категории, помещаем их в массив $mainCategories.
2. Выбираем из базы все категории которые имеют родителя (parent = некий id родителя) то есть Дочерние Категории, помещаем их в массив $subCategories.
3. Циклом foreach перебираем Корневые Категории, при этом внутрь этого цикла помещаем условие - Если у нас есть (проверяем массив $subCategories) Дочерняя Категория у которой parent = текущей Корневой Директории то делаем еще один вложенный foreach и выводим все дочерние категории этой корневой категории.

Таким образом у тебя может получиться список вида:

- категория 1
- - под категория 1.1
- - под категория 1.2
- - под категория 1.3
- категория 2
- - под категория 2.1
- - под категория 2.2
- - под категория 2.3

И так далее.
Я всегда при решении задачи мыслю именно так - без привязки к коду, просто сами принципы, как говорят инженеры "принципиальная схема", а уже потом пишешь код когда готова схема.

ПРИМЕР:
<?php

$mainCat = array(
	0=>array("id"=>"1", "parent"=>"", "name"=>"Первая категория"),
	1=>array("id"=>"2", "parent"=>"", "name"=>"Вторая категория")
	);

$subCat = array(
	0=>["id"=>"3", "parent"=>"2", "name"=>"Подкатегория первая"],
	1=>["id"=>"4", "parent"=>"2", "name"=>"Подкатегория вторая"]
	);

echo "<pre>";
print_r($mainCat);
echo "</pre>";

echo "<pre>";
print_r($subCat);
echo "</pre>";

function searchForId($id, $array) {
   foreach ($array as $val) {
       if ($val['parent'] === $id) {
           $a[] = $val['id'];
       }
   }
   return $a;
}

$id = searchForId('2', $subCat);
echo 'У категории найдены следующие подкатегории: '; print_r($id);
?>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы