Afficher les catégories sous forme d'éléments (ul) et les sous-catégories sous forme d'éléments (li) en php
P粉052724364
P粉052724364 2024-03-31 17:06:59
0
2
359

function showcategory($parentid)
{
     $sql = "select * from categories where parent_id='".$parentid."'";
     $result = mysqli_query($GLOBALS['conn'],$sql);
     $output ="<ul id ='tree1' >\n";
    while($data=mysqli_fetch_array($result))
    {
        $output.="<li>\n".$data['name'];
        $output.=showcategory($data['id']);
        $output.="</li>";
    }
    $output.="</ul>";
    return $output;
}

J'ai une arborescence créée en PHP et la fonction qui extrait l'arborescence extrait correctement les catégories et leurs sous-catégories. Le tableau des catégories dans la base de données comporte une colonne contenant la valeur spécifiée (1/0), où 1 représente la catégorie principale et 0 représente la sous-catégorie. Le problème auquel je suis confronté est que lorsque j'extrait les catégories de la base de données, cela ne fait aucune différence si les catégories sont des catégories principales ou des sous-catégories. Ils sont tous affichés sous forme d'éléments li et j'utilise le formatage CSS sur l'arborescence pour créer les icônes de dossier sur les éléments de la liste. La question est de savoir comment afficher la catégorie principale avec la valeur 1 dans le tableau des catégories en tant qu'élément ul qui contient une icône de dossier qui peut être ouverte pour afficher le contenu à l'intérieur, et la sous-catégorie avec la valeur 0 dans le tableau des catégories doit être affichée comme li élément sans icône de dossier (ce qui signifie que seuls les noms de sous-catégories sont affichés sous forme de texte).

Ma sortie

J'ai besoin d'obtenir le résultat comme indiqué sur l'image.

P粉052724364
P粉052724364

répondre à tous(2)
P粉317679342

Je vous propose de modifier votre code pour prendre en compte si l'article est une catégorie principale ou une sous-catégorie.

"Enregistrez une colonne avec la valeur spécifiée (1/0), où 1 représente la catégorie principale et 0 représente la sous-catégorie" - Disons que la colonne est nommée type.

function showcategory($parentid)
{
    $sql = "select * from categories where parent_id='".$parentid."'";
    $result = mysqli_query($GLOBALS['conn'],$sql);
    $output ="
    \n"; while($data=mysqli_fetch_array($result)) { $output.= '
  • '.$data['name']; if ($data['type']) { $output.=showcategory($data['id']); } $output.="
  • "; } $output.="
"; return $output; }

Vous devriez alors pouvoir utiliser CSS pour styliser le nœud de sous-catégorie afin qu'il corresponde li.type0

P粉513318114

Je vous recommande d'interroger la base de données une seule fois au lieu de placer la requête de base de données dans une fonction récursive.

Vous devez vérifier la position principale de l'élément de menu (en fonction de la valeur de type 0/1). Cela ajoutera class='main' au projet principal et vous pourrez utiliser CSS pour styliser l'icône principale. Essayons cette modification.

function showcategory($data, $parentId = 0) {
$menu = '
    '; foreach ($data as $item) { if ($item['parent_id'] == $parentId) { $menu .= '
  • '; // Recursive call to build sub-menu if it has children $submenu = showcategory($data, $item['id']); if ($submenu) { $menu .= $submenu; } $menu .= '
  • '; } } $menu .= '
'; return $menu; } $sql = "select * from categories where parent_id='".$parentid."'"; $result = mysqli_query($GLOBALS['conn'],$sql); $data=mysqli_fetch_array($result) $menu = showcategory($data); echo $menu;
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal