Как сделать сайд - категорию системы - PullRequest
0 голосов
/ 23 марта 2020

Так, мне нужно создать систему боковых категорий, но я немного запутался в этом. Кто-нибудь может мне помочь?

Вот мой PHP

<?php 
// Conncetion to database
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "shop";

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
mysqli_set_charset($conn,"utf8");

// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}

// SQL Query
$sql = "SELECT category_id, category_name, category_link, parent_id, sort_order FROM category2 ORDER BY parent_id, sort_order, category_name";
$result = mysqli_query($conn, $sql);


//Create a multidimensional array to hold a list of category and parent category
$category = array(
    'categories' => array(),
    'parent_cats' => array()
);

//Build the array lists with data from the category table
while ($row = mysqli_fetch_assoc($result)) {
    //creates entry into categories array with current category id ie. $categories['categories'][1]
    $category['categories'][$row['category_id']] = $row;
    //creates entry into parent_cats array. parent_cats array contains a list of all categories with children
    $category['parent_cats'][$row['parent_id']][] = $row['category_id'];    
}

function buildCategory($parent, $category) {
    //Code HERE...
}

echo buildCategory(0, $category);

Су, когда вы находитесь на домашней странице, тогда мне просто нужны все родительские элементы с "category_id = 0", тогда если кто-то, щелкнув по любой родительской категории, должен показать своих детей, но у этих детей есть другие дети и т. д. c. и др c. но он должен всегда показывать родительские элементы с "category_id = 0".

Я нашел живой пример здесь: https://papiernictvotriomat.sk

Также разместил здесь изображение моей базы данных: enter image description here

1 Ответ

0 голосов
/ 23 марта 2020

Вы можете немного изменить свою базу данных и добавить поле вплоть до категории root, разделенной запятой, но это не «хороший вариант» в реляционном мире.

Проще всего просто получить все имеющиеся у вас категории - как вы делаете - и создать иерархию с рекурсивной функцией:

<?php

$conn = mysqli_connect('localhost', 'root', 'l2mago666', 'stack');

# This ensure the root one come first
$res = mysqli_query($conn, 'SELECT * FROM categories ORDER BY parent');

$categories = [];
while($rs = mysqli_fetch_assoc($res)) {
    if (!$rs['parent'])
        $categories[$rs['id']] = $rs;
    else
        $rows[] = $rs;
}

function lookup(&$set, $r) {
    foreach($set as &$s) {
        if ($s['id'] == $r['parent']) {
            if(!isset($s['childs']))
                $s['childs'] = [];
            $s['childs'][$r['id']] = $r;
        } else {
            if(isset($s['childs']))
                lookup($s['childs'], $r);
        }
    }
}

foreach($rows as $r)
    lookup($categories, $r);

print_r($categories);

Это должно помочь вам создать HTML, конечно же, с другой рекурсивной функция.

...