Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Neaktivní uživatel:29.11.2014 14:38

Hoj,
potřeboval bych poradit s dynamickým menu.
Jde o to že mám menu pomoci seznamu, a u některých položek po najeti mi vyjede nabídka a u některých nevyjede nic.

HTML navigace:

<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>

PHP:

<?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>

mám na to 2 tabulky, jedná pro menu a druha pro submenu.

Menu:

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;

Submenu"

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;

Už jsem se v tom zamotal.
Jde mi o to aby se ul v li uzavřelo až po vypsání všech položek a ne jen 1.
A tam kde není podmenu aby se ul nevypsalo vůbec.

Budu vděčný za radu.

Editováno 29.11.2014 14:40
Odpovědět
29.11.2014 14:38
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Martin Konečný (pavelco1998):29.11.2014 14:56

Pokud se dívám správně, tak špatně vypisuješ to submenu - procházíš jednotlivé položky hlavního menu a ke všem vypisuješ všechny položky submenu.
Je více možností, jak to udělat. Jednoduchý příklad:

$menus = Db::queryAll('SELECT * FROM '.MENU.'');

echo "<ul>";
foreach ($menus as $menu) {
  $submenus = Db::queryAll("SELECT * FROM " . SUBMENU . " WHERE menu_id = ?", $menu["id"]);

  echo "<li>";

  if (!empty($submenus)) {  // pokud se nějaké řádky našly
    echo "<ul>";
    foreach ($submenus as $submenu) {
      echo "<li>" ... "</li>";
    }
    echo "</ul>";
  }

  echo "</li>";
}
echo "</ul>";

Druhá možnost, která mě teď napadla, je ta, že bys to submenu nenacházel jednotlivě v tom foreach, ale nalezl všechny řádky a uložil si je pod klíčem ID menu.
Tzn. že by to vypadalo nějak takhle

$submenus = array(
  3 => array(
     ...
  ),

  5 => array(
     ...
  )
)

// klíče = ID menu

pak bys v tom foreach jen napsal

if (isset($submenus[$menu["id"]])) {
  // menu obsahuje submenu
}
Editováno 29.11.2014 14:58
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
29.11.2014 14:56
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Neaktivní uživatel:29.11.2014 15:18

Ono to jde tak jednoduše a já se s tím patlal pár hodin :D
Díky zkusil jsem první řešení a pomohlo .

Nahoru Odpovědět
29.11.2014 15:18
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Martin Konečný (pavelco1998):29.11.2014 16:58

To jsi na tom ještě v poho, já se dokážu patlat pár hodin s věcí, ve který nakonec ani chyba není.

Nahoru Odpovědět
29.11.2014 16:58
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 4 zpráv z 4.