Wielopoziomowe menu w PHP


Wielopoziomowe menu w PHP
Autor: Dawid Panfil
©2010 http://www.free.xaa.pl
Wielopoziomowe menu w PHP
Od dawna ten temat do mnie powraca, ale tym razem już go tak łatwo nie odrzuciłem. Problem w
całości polegał na tym, aby wykonad menu w taki sposób, aby było nieskooczenie wiele zagnieżdżeo
w tym menu.
Wyjątkowo nie pokażę całego rozwiązania skryptu, gdyż nadal jest on rozwijany (a raczej dopiero jest
on zaczęty). Musiałem go wykonad na potrzeby przetestowania parsera, który w koocu wykonałem.
Wszystko oparłem na tablicy wielowymiarowej, gdyż szybciej można edytowad wszystkie wartości.
Równie dobrze, można umieścid to w bazie danych zyskując tym mniejszą ilośd kodu do
przetworzenia tablicy.
Tablica wygląda w ten sposób:
[php]
$menu [$id]['nazwa']='nazwa';
$menu [$id]['sub']=0;
$menu[$id]['po']=0;
[/php]
Szybie wytłumaczenie
1. $id - ta zmienna odpowiada za identyfikator tablicy, ten id musi byd większy od 0 (czyli zasada
działania auto increment w Bazach danych)
2. Nazwa odpowiada za wyświetlaną nazwę, nie bawiłem się w linki itp, bo to tylko dla testów
3. Sub oznacza 'gęstośd' zagnieżdżenia, najlepiej dawad id strony do której ma byd zagnieżdżony
4. Po oznacza tylko po ;) a dokładniej 'Po elemencie"
Najważniejsze z tego wszystkiego jest właśnie to po, układamy zawsze wg tej wartości. Nie zależnie
od zagnieżdżenia, bo o tym kiedy element będzie zagnieżdżony świadczy tylko te moje SUB. Więc aby
uzyskad taki efekt:

Nazwy w nawiasach oznaczajÄ…
1 liczba - "po"
2 liczba - "sub"
A tablica (specjalnie troszkÄ™ wymieszana) wyglÄ…da tak:
[php]
$menu [1]['nazwa']='Start';
$menu [1]['sub']=0;
$menu [1] ['po']=0;
$menu *2+*'nazwa'+='Aktualności';
$menu [2]['sub']='0';
$menu [2]['po']=1;
$menu [3]['nazwa']='Archiwum';
$menu [3]['sub']=2;
$menu [3]['po']=2;
$menu [4]['nazwa']='RSS';
$menu [4]['sub']='0';
$menu [4]['po']=5;
$menu[5]['nazwa']='TEST';
Wielopoziomowe menu w PHP
Autor: Dawid Panfil
©2010 http://www.free.xaa.pl
$menu [5]['sub']='0';
$menu [5]['po']=4;
[/php]
Aby kod zadziałał w takiej tablicy poprawnie, należy go posortowad, niestety ręcznie, a w bazie
danych jest odpowiednia funkcja do tego.
[php]
foreach ($menu as $klucz => $wartosc){
$id [$klucz]=$wartosc['po'];
}
asort($id);
[/php]
Funkcja asort sortuje zawartośd, pozostawiając taki sam klucz, natomiast pętla sortuje id, w ten
sposób abyśmy mieli jak odczytad w poprawnej kolejności elementy menu.
Teraz najważniejsza funkcja wyświetlająca to drzewo, jeżeli pomylimy się z liczeniem elementów to
może wyjśd niezły bajzel, dlatego warto dopisad sobie jakąś funkcję obsługującą to menu ;)
Więc wyświetlanie:
[php]
$ul=0;
echo '
    ';
    foreach ($id as $wartosc => $klucz){
    if ($menu[$wartosc]['sub']>$ul) echo '
      ';
      if ($menu[$wartosc]['sub']<$ul) echo '
    ';
    Wielopoziomowe menu w PHP
    Autor: Dawid Panfil
    ©2010 http://www.free.xaa.pl
    echo '
  • '.$menu[$wartosc]['nazwa'].'
  • ';
    $ul= $menu[$wartosc]['sub'];
    }
    echo '
';
[/php]
Najpierw dajemy zmienną ul do której przekazywany jest element sub z menu. Pózniej w pętli
pobierającej z posortowanej tablicy $id wyświetlamy odpowiednie elementy tablicy menu, lecz przed
tym sprawdzamy czy wartośd SUB danego elementu jest niższa bądz wyższa od ul i wyświetla
odpowiednio < ul> lub .
Następnie wyświetla w li odpowiednią nazwę i przypisuje zmiennej ul swoją wartośd SUB.
I tyle. Kod aktualnie wygląda co najmniej strasznie, ale jeżeli przeniesiemy to do bazy danych oraz
zmniejszymy nasze liczby z "po" o wartośd "sub" to kod będzie prezentowad się bardzo ładnie ;)
Jeszcze tak na szybko dodam, że kod xHTML nie jest w 100% poprawny, bo jeżeli sub jest wyższe to
te li na koocu z poprzedniego elementu musi byd usunięte i dodane jak sub będzie niższe, więc trzeba
operowad na zmiennych i funkcji str_replace ;)


Wyszukiwarka

Podobne podstrony:
Wielopoziomowe menu w C
pu srvc menu nl
menu cwiczenia14
menu
php 2
Biblioteka PHP Wysyłanie pliku na serwer
k php
menu
menu
l menu
Delphi i PHP
php 2
php 3

więcej podobnych podstron