Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Menu wielopoziomowe w tablicach wielowymiarowych
piotr485
post 10.10.2016, 17:31:18
Post #1





Grupa: Zarejestrowani
Postów: 292
Pomógł: 0
Dołączył: 10.07.2009

Ostrzeżenie: (0%)
-----


Witam.

Wymyśliłem sobie, że zaciągnę dane z bazy i zapiszę do tablicy o takiej strukturze:

  1. $tab_menu_top[1][0][145] = 'O Firmie';
  2. $tab_menu_top[2][145][542] = 'podkategoria firmy1';
  3. $tab_menu_top[2][145][415] = 'podkategoria firmy2';
  4. $tab_menu_top[3][415][987] = 'podkategoria podkategorii firmy2';
  5. $tab_menu_top[2][145][478] = 'podkategoria firmy3';
  6.  
  7. $tab_menu_top[1][0][45] = 'Oferta';
  8. $tab_menu_top[1][0][451] = 'Kontakt';


Czyli [poziom][id rodzica][unikalne id]

Wyświetlam menu w taki oto sposób:

  1. foreach($tab_menu_top[1][0] AS $key => $val) {
  2.  
  3. echo '<br><b>'.$key.' - '.$val.'</b><br>'; //!WYŚMIETLAM
  4.  
  5. if($levels >= 2) {
  6. for($i=2;$i<=$levels;$i++) {
  7.  
  8. $tab_next_level_2 = $tab_menu_top[$i][$key];
  9.  
  10. if(!empty($tab_next_level_2)) {
  11. foreach($tab_next_level_2 AS $key2 => $val2) {
  12.  
  13. echo $key2.' - '.$val2.'<br>'; //!WYŚMIETLAM
  14.  
  15.  
  16.  
  17. $tab_next_level_3 = $tab_menu_top[3][$key2];
  18. if(!empty($tab_next_level_3)) {
  19.  
  20. $tab_next_level_3 = $tab_menu_top[3][$key2];
  21. foreach($tab_next_level_3 AS $key3 => $val3) {
  22.  
  23. echo $key3.' - '.$val3.'<br>'; //!WYŚMIETLAM
  24.  
  25. }
  26.  
  27. }
  28.  
  29.  
  30. }
  31. }
  32.  
  33. }
  34. }
  35. }


Wynik powyższego kodu:
  1. 145 - O Firmie
  2. 542 - podkategoria firmy1
  3. 415 - podkategoria firmy2
  4. 987 - podkategoria podkategorii firmy2
  5. 478 - podkategoria firmy3
  6.  
  7. 45 - Oferta
  8.  
  9. 451 - Kontakt


Problem w tym, że chciałbym to zrobić jakoś bardziej uniwersalnie, żeby nie musiał każdego poziomu dodawać z palca ponieważ może być nawet 20 poziomów,
czy ktoś mnie naprowadzi co robię źle ? może struktura tablicy jest zła ?





Go to the top of the page
+Quote Post
rad11
post 10.10.2016, 18:52:41
Post #2





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


https://www.google.pl/search?q=php+menu+mul...le&ie=UTF-8 generalnie szukaj pod hasłem "recursive"
Go to the top of the page
+Quote Post
szydlak
post 11.10.2016, 19:21:55
Post #3





Grupa: Zarejestrowani
Postów: 20
Pomógł: 4
Dołączył: 23.09.2016

Ostrzeżenie: (0%)
-----


Ja ostatnio też sobie pisałem taki kod menu wielopoziomowego.
W bazie danych tabela menu z kolumnami:
id, nazwa, parent_id

gdzie parent_id to id elementu rodzica. Dla pozycji głównych parent_id ustawiam na 0.

i funkcja rekurencyjna. Ile byś poziomów nie dał zawsze wyświetli.
  1. <?php
  2. include 'login.php';
  3. $query = "SELECT * FROM menu";
  4. $result = $conn->query($query);
  5. if (!$result) die($conn->error);
  6. function menu($result, $parent_id)
  7. {
  8. $rows = $result->num_rows;
  9.  
  10. echo '<ul>';
  11. for ($j = 0 ; $j < $rows ; ++$j)
  12. {
  13. $result->data_seek($j);
  14. $row = $result->fetch_array(MYSQLI_ASSOC);
  15. if ($parent_id==$row['parent_id'])
  16. {
  17.  
  18. echo '<li>' . $row['nazwa'] . '</li>';
  19. menu($result, $row['id']);
  20. }
  21.  
  22. }
  23. echo '</ul>';
  24. }
  25.  
  26. menu($result,0);
  27.  
  28.  
  29. ?>


Ten post edytował szydlak 11.10.2016, 19:36:26
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.04.2024 - 21:14