Ca solutie ar fi cu functia recursiva multilevelMenu() din pagina data mai sus; dar problema e sa adaugi intai datele link-urilor corect in 2 array, bazate pe id-ul lor.
Un array cu numele si adresa de link associate la fiecare id.
Si un alt array sa contina id-urile parinte asociate (sau cheie index) la un array cu id-urile copil / al link-urilor directe din acea categorie
Sa fie 2 array ca acestea:
Cod: Selectaţi tot
// array cu datele (nume, adresa) pt fiecare link din meniu
$dete_menu= array (
0 => array ('lname' => 'Root', 'lurl' => '#'),
1 => array ('lname' => 'Acasa', 'lurl' => 'link'),
2 => array ('lname' => 'Pantaloni', 'lurl' => '#'),
3 => array ('lname' => 'Bluza', 'lurl' => '#'),
4 => array ('lname' => 'Scurti', 'lurl' => '#'),
5 => array ('lname' => 'Lungi', 'lurl' => '#'),
6 => array ('lname' => 'Marime', 'lurl' => '#'),
7 => array ('lname' => 'SX', 'lurl' => '#'),
8 => array ('lname' => 'S', 'lurl' => '#'),
9 => array ('lname' => 'M', 'lurl' => '#'),
10 => array ('lname' => 'Culoare', 'lurl' => '#')
);
// array cu id-urile parinte si copii lor (categoriile si sub-categorii directe din ele)
$ierarhie_menu = array (
0 => array (1, 2, 3), // in root sunt link-urile cu id: 1, 2, 3
2 => array (4, 5, 6, 10), // link-urile din meniul cu id=2
6 => array (7, 8, 9), // link-urile din meniul cu id=6
);
Daca a fost creat tabelul in baza de date astfel incat sa ai asociate, sau referinta, fiecare id al link-ului in care parinte este (0 fiind Root), incearca asa:
Cod: Selectaţi tot
// recursive function to create multilevel menu list, $parentId 0 is the Root
// From: https://coursesweb.net/php-mysql/
function multilevelMenu($parentId, $ctgLists, $ctgData) {
$html = ''; // stores and returns the html code with Menu lists
// if parent item with child IDs in ctgLists
if(isset($ctgLists[$parentId])) {
$html = '<ul>'; // open UL
// traverses the array with child IDs of current parent, and adds them in LI tags, with their data from $ctgData
foreach ($ctgLists[$parentId] as $childId) {
// define CSS class in anchors, useful to be used in CSS style to design the menu
if($parentId == 0) $clsa = ' class="firsrli"'; // class for anchors in main /first categories
else if(isset($ctgLists[$childId])) $clsa = ' class="litems"'; // class for anchors in lists with childs
else $clsa = '';
// open LI
$html .= '<li><a href="'. $ctgData[$childId]['lurl'] .'" title="'. $ctgData[$childId]['lname'] .'"'. $clsa .'>'. $ctgData[$childId]['lname'] .'</a>';
$html .= multilevelMenu($childId, $ctgLists, $ctgData); // re-calls the function to find parent with child-items recursively
$html .= '</li>'; // close LI
}
$html .= '</ul>'; // close UL
}
return $html;
}
// array cu datele (nume, adresa) pt fiecare link din meniu
$date_menu = array(0 => array('lname' => 'Root', 'lurl' => '#'));
// array cu id-urile parinte si copii lor (categoriile si sub-categorii din ele)
$ierarhie_menu = array ();
/** Aici Conectare la baza de date si efectuare Select **/
// Parcurge datele selectate si le adauga in cele 2 array, pt apelare la functia multilevelMenu()
while ($row = $result->fetch_assoc() ) {
if (count($row) > 0) {
$date_menu[$row['id']] = array('lname'=>$row['menu_name'], 'lurl'=>$row['menu_link']);
if(isset($ierarhie_menu[$row['parent_id']])) $ierarhie_menu[$row['parent_id']][] = $row['id'];
else $ierarhie_menu[$row['parent_id']] = array($row['id']);
}
}
echo '<div id="m_menu">'. multilevelMenu(0, $ierarhie_menu, $date_menu) .'</div>';
- Daca sunt nepotriviri cu ce ai in baza de date, sau cu ce rezulta, mai modifici si testezi separat in browser pana iese cum vrei.