Autor | Zpráva | ||
---|---|---|---|
casy Profil * |
#1 · Zasláno: 23. 4. 2010, 14:02:21
Ahoj, potřeboval bych poradit jak vytvořit interaktivní menu v php pomocí podmínky while.
Jde mi prakticky o rozevírací menu kde by se na index rozevřel seznam "uvod" a podnim podstranky. dalsi polozka by byla design a pri kliknuti by se uvod zavrel a rozevrel "design". Takhle jednoduše, ale nemůžu nic vygooglit, tak vás prosím o pomoc. Menu můžu načítat z databáze nebo staticky v php. podobné řešení zde Děkuju Dan |
||
fajzen Profil |
#2 · Zasláno: 23. 4. 2010, 22:42:06
casy:
ahoj, na začiatok si nemôžem odpustiť trochu rýpnuť :) „pomocí podmínky while“ while je cyklus, nie podmienka mohlo by to byť nejak takto: // statická definícia štruktúry $menu = array( array( // prvá kategória 'href' => 'kat1', // identifikátor kategórie 'text' => 'Kategória 1', // text odkazu 'items' => array( // stránky kategórie array('subkat1', 'Položka menu 1.1'), // identifikátor stránky a text odkazu array('subkat2', 'Položka menu 1.2') ) ), array( 'href' => 'kat2', 'text' => 'Kategória 2', 'items' => array( array('subkat1', 'Položka menu 2.1'), array('subkat2', 'Položka menu 2.2') ) ), array( // kategória bez podstránok 'href' => 'kat3', 'text' => 'Kategória 3', 'items' => array() ) ); // zistenie aktuálne otvorenej kategórie $actual = (isset($_GET['kat']) ? $_GET['kat'] : 'kat2'); // druhá kategória je predvolená // výpis menu echo '<ul>'; foreach($menu as $cathegory) { echo '<li><a href="?kat=' . $cathegory['href'] . '">' . $cathegory['text'] . '</a></li>'; if(!empty($cathegory['items'])) { echo '<ul style="' . ($actual == $cathegory['href'] ? '' : 'display:none;') . '">'; foreach($cathegory['items'] as $page) echo '<li><a href="?kat=' . $cathegory['href'] . '&page=' . $page[0] . '">' . $page[1] . '</a></li>'; echo '</ul>'; } } echo '</ul>'; |
||
Časová prodleva: 4 dny
|
|||
casy Profil * |
#3 · Zasláno: 27. 4. 2010, 17:12:24
Ahoj výborně to funguje, děkuju moc. Za tu podmínku se omlouvám, učím se za chodu.
Chci se ještě zeptat, dal by se sem nějak vložit styl ? Potřebuji aby v té aktivní kategorii překrýval obrázek text. Totožně s tím příkladem co uvádím. $actual = (isset($_GET['kat']) ? $_GET['kat'] : 'kat2'); // druhá kategória je predvolená další věc je, když kliknu na kategorii bez podkategorií tak aby se nezobrazovala defauletně nastavená stránka "kat1" a ještě jednu věc jsem nerozlousknul a to je samotný odkaz kategorie - když kliknu na kategorii 2 tak chci aby první strana v danné kategorii byla aktivní strana, zatím se mi načítá chyba stím že sem si nastavil neexistující(404) stranu na index.php Díky moc |
||
fajzen Profil |
#4 · Zasláno: 28. 4. 2010, 11:45:42 · Upravil/a: fajzen
casy:
od riadku 26 môjho kódu zmeň: // zistenie aktuálne otvorenej kategórie $actual = (isset($_GET['kat']) ? $_GET['kat'] : 'kat2'); // druhá kategória je predvolená // zistenie aktuálnej stránky $actual_page = (isset($_GET['page']) ? $_GET['page'] : null); // ak nie je zadaná stránka, použije sa ako otvorená stránka identifikátor nadradenej kategórie // výpis menu echo '<ul class="menu">'; foreach($menu as $cathegory) { echo '<li' . ($actual == $cathegory['href'] ? ' class="menu_active"' : '') . '><a href="?kat=' . $cathegory['href'] . '&page=' . (empty($cathegory['items']) ? $cathegory['href'] : $cathegory['items'][0][0]) . '">' . $cathegory['text'] . '</a>'; if(!empty($cathegory['items'])) { echo '<ul>'; foreach($cathegory['items'] as $page) { echo '<li><a href="?kat=' . $cathegory['href'] . '&page=' . $page[0] . '">' . $page[1] . '</a></li>'; if($actual == $cathegory['href'] && $page[0] == $actual_page) define('TO_INCLUDE', $actual_page); } // ak bola zadaná existujúca kategória ale neexistujúca stránka, automaticky sa nastaví prvá stránka v kategórií // môžeš zmazať ak by si chcel namiesto toho zobraziť nejakú chybovú stránku if($actual == $cathegory['href'] && !defined('TO_INCLUDE')) define('TO_INCLUDE', $cathegory['items'][0][0]); echo '</ul>'; } else if($cathegory['href'] == $actual) { define('TO_INCLUDE', $actual); } echo '</li>'; } echo '</ul>'; <style> .menu ul { display: none; } .menu_active > ul { display: inherit } </style> v konštante TO_INCLUDE bude uložený identifikátor stránky, ktorá sa má zobraziť, takže ak nastavíš identifikátory tak, aby to boli zároveň názvy stránok, ktoré sa majú includovať (napr. identifikátor novinky pre stránku novinky.php), môžeš použiť: // konštanta nemusí byť nastavená, ak bola zadaná kategória, ktorá nie je v menu, treba to skontrolovať // taktiež sa kontroluje existencia požadovaného súboru if(defined('TO_INCLUDE') && file_exists(TO_INCLUDE . '.php')) include TO_INCLUDE . '.php'; else include 'default.php'; |
||
casy Profil * |
#5 · Zasláno: 28. 4. 2010, 15:26:44
fajzen:
Je to funkční až na ty styly, nastyloval jsem si .menu_active .menu_active { background-image: url('images/leftMenu_item_bg.png'); background-repeat: repeat-y;} a zjistil jsem že takto použitý styl "zaktivuje" kompletně celé menu. U té kategorie není uzavřené </li> ve výstupu to vypadá takto <ul class="menu"> <li class="menu_active"><a href="?kat=&page=uvod">Wellnes technik group</a> <!-- //tady --> <ul> <li><a href="?kat=&page=uvod">Úvod</a></li> <li><a href="?kat=&page=PREDSTAVENI-FIRMY-WELLNESSTECHNIK">Představení firmy</a></li> <li><a href="?kat=&page=originalita-wellnesstechnik">Originalita a jedinečnost</a></li> <li><a href="?kat=&page=profesionalita_wellness">Profesionalita</a></li> <li><a href="?kat=&page=portfolio_wellness">Portfolio</a></li> <li><a href="?kat=&page=wtg_firma">WTG - firma</a></li> <li><a href="?kat=&page=show-room-realizace">SHOW ROOM - realizace</a></li> <li><a href="?kat=&page=show-room-prezentace">SHOW ROOM - prezentace</a></li> </ul> </li> <!-- Tohle li uzavírá celý seznam a když ho uzavřu tak se nerozevře submenu, ale odkazy jsou jinak funkční a správně se zobrazuje i obrázek pod ním --> styl jsem ponechal na místě zde echo '<li' . ($actual == $cathegory['href'] ? ' class="menu_active"' : '') . '><a href="?kat=' . $cathegory['href'] . '&page=' . (empty($cathegory['items']) ? $cathegory['href'] : $cathegory['items'][0][0]) . '">' . $cathegory['text'] . '</a>'; Mockrát děkuji že mi pomáháš! |
||
casy Profil * |
#6 · Zasláno: 28. 4. 2010, 16:05:14
fajzen:
ještě to nemůžu říct jistě, ale je to asi nefunkční pro IE |
||
casy Profil * |
#7 · Zasláno: 28. 4. 2010, 16:35:32
tak je to tak, nefunguje IE coz je neprijemna chyba nejspis na strane css ne ?
|
||
casy Profil * |
#8 · Zasláno: 29. 4. 2010, 18:31:15
Tak se mi povedlo to vyřešit.
Do stylu jsem napsal .menu ul { visibility: hidden; display: none; padding: 0px; margin: 0px; text-align: left; } .menu_active ul { visibility: visible; display: block; padding: 0px; margin: 0px; } a zobrazuje to i IE |
||
fajzen Profil |
#9 · Zasláno: 30. 4. 2010, 08:15:47
casy:
super, takže je to už OK všetko? |
||
casy Profil * |
#10 · Zasláno: 1. 5. 2010, 12:34:29
fajzen:
vyřešil jsem pouze IE, respektive to zobrazení samotného menu, teď mi ještě chybí samotný aktivní odkaz s tím stylem |
||
casy Profil * |
#11 · Zasláno: 3. 5. 2010, 04:48:23
Ahoj, tak se na výsledek můžeš podívat na http://www.wellnesstechnik.cz/ dělal jsem kopii pro česko a nedaly mi přístupy k ftp, tak proto jsem sháněl pomoc. Asi trochu nepochopitelne jsem udelal portfolio z url poznas o cem mluvim.
Použil jsem zajímavý kód, if(defined('TO_INCLUDE') && file_exists(TO_INCLUDE . '.php')) include TO_INCLUDE . '.php'; else if (IsSet($_GET['p'])){ $soubor=$_GET['p']; $soubor2= dirname($_SERVER['SCRIPT_FILENAME'])."/".$soubor.".php"; if(file_exists($soubor2)){ //pokud soubor existuje, nacteme ho do stredu include $soubor2; }else{ //pokud soubor neexistuje, zavolame error404.php include "inc/error404.php"; } }else{ include "uvod.php"; } kupodivu to funguje, uz jenom casem doresim ty aktivni kategorie coz bude asi orisek, ten styl by se musel napsat do '<a' zatim nevim jak na to, ale poradim si stim :) Dekuju za pomoc a rady Mej se fajn Dan |
||
Časová prodleva: 14 let
|
0