Autor | Zpráva | ||
---|---|---|---|
kironet96 Profil |
Zdravím,
snažím se udělat dynamické menu pomocí seznamu (li). Takže tam bude i submenu(podmenu). Problém je v tom že submenu není u každé položky, takže jsem se zamotal. PHP script mi sice udělá vše jak potřebují, ale taky mi po každé položce uzavře <ul> což ja potřebují aby se uzavřelo až se vypíšou všechny položky. Ukázka html kodu: <nav> <ul id="nav"> <li><a class="hov-menu" href="#">TEST</a> <ul> <li><a class="hov-submenu" href="#">TEST1</a></li> <li><a class="hov-submenu" href="#">TEST1</a></li> </ul> </li> <li><a class="hov-menu" href="#">TEST</a> </li> <li><a class="hov-menu" href="#">TEST</a></li> </ul> <div class="nav-line"></div> </nav> Tady je můj php script: <?php mb_internal_encoding("UTF-8"); require('Db.php'); require('define.php'); $menus = Db::queryAll('SELECT * FROM '.MENU.''); $sub_menus = Db::queryAll('SELECT * FROM '.SUBMENU.''); ?> <nav> <ul id="nav"> <?php foreach($menus as $menu) { $menu_name = $menu['menu_name']; $menu_url = $menu['menu_url']; $id = $menu['id']; echo('<li><a class="hov-menu" href="'.$menu_url.'">'.$menu_name.'</a>'); foreach($sub_menus as $sub_menu) { $submenu_name = $sub_menu['submenu_name']; $submenu_url = $sub_menu['submenu_url']; $menu_id = $sub_menu['menu_id']; if($id == $menu_id) { echo('<ul><li><a class="hov-submenu" href="'.$submenu_url.'">'.$submenu_name.'</a></li></ul>'); } } echo("</li>"); } ?> </ul> <div class="nav-line"></div> </nav> Použivám 2 tabulky. 1) Menu 2) Submenu Struktura: CREATE TABLE `isoeucom_menu` ( `id` int(11) NOT NULL AUTO_INCREMENT, `menu_name` varchar(255) DEFAULT NULL, `menu_url` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8; CREATE TABLE `isoeucom_submenu` ( `id` int(11) NOT NULL AUTO_INCREMENT, `menu_id` int(11) DEFAULT NULL, `submenu_name` varchar(255) DEFAULT NULL, `submenu_url` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8; Budu vděčný za každou radu |
||
Martin02 Profil |
kironet96:
Ta databáze není úplně ideální... Většinou se to dělá tak, že vytvoříš jen jednu tabulku, kde vnořené položky (submenu) mají ve sloupci např. "parent" id rodiče, tedy té položky, ve které jsou vnořené. Pokud to ale necháš takhle, tak vidím nejjednodušší řešení toto: (jestli ti teda nevadí, že tam bude trochu více dotazů do mysql) <?php mb_internal_encoding("UTF-8"); require('Db.php'); require('define.php'); $menus = Db::queryAll('SELECT * FROM '.MENU); echo ' <nav> <ul id="nav">'; foreach ($menus as $menu) { echo '<li><a class="hov-menu" href="'.$menu['menu_url'].'">'.$menu['menu_name'].'</a>'; // Položky konkrétního submenu $sub_menus = Db::queryAll('SELECT * FROM '.SUBMENU.' WHERE menu_id = '.$menu['id']); // Jen pokud nějaké existují, tak píšu <ul> atd. if (count($sub_menus) > 0) { echo '<ul>'; foreach ($sub_menus as $sub_menu) echo '<li><a class="hov-submenu" href="'.$sub_menu['submenu_url'].'">'.$sub_menu['submenu_name'].'</a></li>'; echo '</ul>'; } echo '</li>'; } echo ' </ul> <div class="nav-line"></div> </nav>'; |
||
Časová prodleva: 9 let
|
0