Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
PHP
Hiearchické menu
6. srpna 2000, 00.00 | Krátký PHP skript pro hezké rozbalovací menu na vaše stránky. Pokud nedůvěřujete javascriptu je toto ta správná volba!
Menu na www stránkách lze vytvořit různě. Nejběžnější je statická forma, která obsahuje pouze pod sebou sepsané nabídky.
Další možností je využití javascriptu. Výhodou je relativní nenáročnost na výpočet, nevýhodou pak co dělat když klient javascript nemá..
Dále lze využít různá meníčka jako java applety, se stejnou nevýhodou.
Cílem tohoto článku je ukázat jednoduchý způsob jak vytvořit hiearchické menu pomocí PHP skriptu. Odstraníme tím závislost na javascriptu. Ovšem na druhou stranu začnou naše stránky více zatěžovat server. (a uživatel se při pomalejším spojení více načeká. Úplným řešením je kombinace php a javascriptu v závislosti na možnosti/nemožnosti použití javascriptu)
Základem skriptu je datová struktura která reprezentuje zobrazovaná data. Tu lze volit různě, my budeme používat pole. Prvkem pole je vždy další pole, s pevnou délkou. A to dvě. Prvním prvkem je jméno položky, druhým pak url či další pole nabídek.
Na první pohled to možná vypadá složitě, ale malá ukázka vše vyjasní:
$menu=array(
array("Nabidka1","http://www.nic.cz"),
array("Nabidka2", $menu22),
array("Nabidka3", $menu33),
array("Nabidka4", "http://www.neco.cz")
);
Pole pro další vnoření (např. u Nabídky2) lze definovat přímo v proměnné $menu, nebo jak jsme to volili my, mimo. Zde je důležité nezapomenout a proměnné definovat od největší hloubky. Tj. neprve položky které jsou nejhlouběji ve stromu a poté ty výš s výš a "hlavní" úroveň až naposledy. (viz. celý skript na konci článku).
Máme-li naplněnou strukturu, již potřebujeme pouze něco co se bude starat o její správné vypisování. Již filosofie návrhu datové struktury dává tušit že funkce pro výpis se bude chovat rekurzivně. To nám ušetří spoustu práce.
Při výpisu je třeba si držet informace v jaké úrovni vnoření se má co expandovat - pole $x (jaká větev se má zobrazit; která podnabídka po kliknutí na odkaz). Dále pak v jaké úrovni se zrovna nacházíme (proměnná $level). A zda se nemá zobrazená nabídka zavřít - $close (po kliknutí na již otevřenou nabídku se tato nabídka zavře).
Pro efekt ještě u aktuálně otevřené nabídky zobrazíme obrázek před každou položkou.
Vlastní skript:
";
/****** funkce *******/
// v jake jsme urovni vnoreni a co tisknout
function pMenu($level, $m, $tmp)
{
global $x,$close,$PHP_SELF, $img;
$im="";
if((isset($close)&&$close==$level)
|| $level==count($x)) $im=$img;
echo "\n";
for($i=0; $i".$m[$i][0]."\n";
if($explode) pMenu($level+1,&$m[$i][1],$foo);
else echo "
\n";
}
echo "\n";
}
/*********************/
echo "
Hmenu
BODY {
font-family: Helvetica;
font-size: 10pt;
}
Hmenu
";
pMenu(0,&$menu,"");
?>
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007