J'ai besoin de créer un menu arborescent de sous-catégories "nième". Je me suis contenté d'utiliser le modèle de liste d'adjacence pour ma structure de table, parce que je ne mettrais pas beaucoup à jour cette table et cela semblait la plus facile à mettre en œuvre pour mon utilisation. Je veux styliser la sortie en utilisant les balises "ul" et "li" ... J'ai déjà une solution css et jquery pour faire le style. Mon problème vient d'extraire les données de la base de données et d'utiliser une fonction récursive via PHP pour construire la liste ... la liste est une chaîne concaténée qui est analysée pour construire l'arbre. J'ai vraiment du mal à faire en sorte que les étiquettes de fermeture «ul» et «li» soient alignées là où elles doivent être.Créer un menu arborescent non ordonné à partir de données stockées dans une table avec le modèle de liste d'adjacence ... php
Est-ce la meilleure façon de procéder? Existe-t-il d'autres façons d'utiliser des tableaux ou quelque chose comme ça pour le faire? Tous les exemples que vous pouvez me montrer des «meilleures pratiques» pour construire une liste comme celle-ci seront appréciés. Merci.
Voilà ma structure de table:
portfolio_id (int), p_name (varchar), parent_portfolio_id (int) Voici ce que je veux que les données à ressembler lorsqu'ils sont présentés:
<ul>
<li>Portfolio Name
<ul>
<li>Sub portfolio A
<ul>
<li>Sub portfolio A - 1</li>
<li>Sub portfolio A - 2</li>
<li>Sub portfolio A - 3</li>
</ul>
</li>
<li>Sub portfolio B</li>
<li>Sub portfolio C</li>
</ul>
</li>
</ul>
est ici le courant fonction récursive:
function portf($ndb, $portfolio_id, $space=1, $x="", $level=1) // cat id, space to add "_" degree of categoreis times, list of categories
{
$sql = "SELECT portfolio_id, p_name, parent_portfolio_id FROM portfolio WHERE parent_portfolio_id = $portfolio_id ORDER BY p_name ASC;";
$select = $ndb->get_results($sql, 0, ARRAY_A);
if(!is_null($select))
{
foreach($select as $data)
{
$x = $x . $data->portfolio_id . '_' . $data->parent_portfolio_id . '_' . $level . str_repeat('_', $space) . $data->p_name . '-';
$x = $this->portf($ndb, $data->portfolio_id, ($space+1), $x, ($level+1));
}
return $x;
}
else
{
return $x;
}
}
Il serait utile que vous montriez un code ... – GrumpyCanuck
ajouté quelques exemples de code ... Thanx – Ronedog