Получить список категорий с полным путем - PullRequest
0 голосов
/ 10 апреля 2019

В настоящее время я получил код, который отображает список категорий.Мне удалось создать одну подкатегорию, но я хочу, чтобы она была бесконечной, например, категория / подкатегория / подкатегория / etc / article.Структура базы данных категорий: id, title, slug parent_id, который по умолчанию равен 0.

Я пытался зациклить запрос, но вроде не знаю, как это сделать правильно, он просто не сделал 'т работал.

Функция выглядит как:

    public static function getCategoryList()
    {

        $db = Db::getConnection();

        $lang = self::Language();

        $categoryList = [];

        $result = $db->query("SELECT content.id, content.title$lang,content.slug$lang, content.sub_category_id, category.slug$lang FROM blog_category AS content LEFT JOIN blog_category AS category ON content.sub_category_id = category.id WHERE content.status='1' ORDER BY content.sort_order ASC");

        foreach($result as $row){
            $categoryList[] = [
                'id' => $row[0],
                'title' => $row[1],
                'slug' => $row[2],
                'sub_category' => $row[4],
            ];
        }
        return $categoryList;

    }

И в HTML:

    <?php foreach ($category as $categoryItem): ?>
        <h4><a href="/blog/<?php if ($categoryItem['sub_category']) echo $categoryItem['sub_category'] . '/'; ?><?php echo $categoryItem['slug']; ?>"><?php echo $categoryItem['title']; ?></a></h4>
        <p><?php echo $categoryItem['id']; ?></p>
    <?php endforeach; ?>

1 Ответ

0 голосов
/ 10 апреля 2019

Есть много разных способов сделать это, но я думаю, что лучше всего было бы сначала загрузить все категории в PHP из базы данных, если нет тысяч и тысяч категорий.

$result = $db->query("SELECT category.id, category.parent_id, category.slug$lang FROM category");

Populate $categories as an array of id => (slug, id, parent_id) items.

Затем используйте рекурсивную функцию php для создания крошки категорий.

function getBreadcrumb($categories, $categoryId) {

    $thisCat = $categories[$categoryId];

    if ($thisCat['parent_id'] != 0)
    {
       return array_merge(getBreatcrumb($thisCat['parent_id']), array($thisCat['slug']));
    }   
    else
    {
       return array($thisCat['slug']);
    }
}
...