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.
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
.\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
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.
'; 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;