Dropdown menu v šabloně z databáze
- Blaueminence
- Člen | 31
Dobrý den,
snažím se vytvořit dropdown menu o více úrovních (zatím alespoň dvou),
které mám uložené v databázi – jedna položka je jeden řádek a
případně odkazuje cizím klíčem na svého předka.
Kód vypadá následovně:
<div class="menu" id="menu">
<div id="nav">
<ul>
{var $basemenu=$menu->where('id_parent', NULL)}
<li n:foreach="$basemenu as $item">
<a href="{$item->link}">
<div n:if="$item->icon" class="icon">{$item->icon}</div>
{$item->label_cz}
</a>
{var $children=$menu->where('id_parent = ?', $item->id_menu_item)}
<ul n:if="$children">
<li n:foreach="$children as $child">
child
</li>
</ul>
</li>
</ul>
</div>
</div>
Základní menu funguje v pořádku, pokud odstraním vložený cyklus foreach za druhou úroveň. Pokud ho tam ale nechám, vypíše se pouze první položka základního menu (která podpoložky nemá) a dál základní cyklus nepokračuje. Navíc se mi generuje nesmyslný SQL dotaz za vnořený cyklus
SELECT `id_menu_item
, link
, label_cz
,
icon
FROM menu
WHERE (id_parent
IS NULL) AND (id_parent
= 1)`
Tušíte někdo, co s tím? Děkuji.
- Jan Tvrdík
- Nette guru | 2595
Tohle je problém týkající se Nette Database, přesouvám. Pravděpodobně
tam bude potřeba přidat clone
nebo tak něco.
- David Matějka
- Moderator | 6445
Selection si vsechny „where“ pamatuje a spoji je ANDem. Proto vetsinou jedno Selection==jeden dotaz.
Pouzij related
- Blaueminence
- Člen | 31
Výborně, díky moc. Dal jsem
$children=$item->related('menu.id_parent')
a funguje to.
Nechápu, proč mě to nenapadlo hned:-)