Autor | Zpráva | ||
---|---|---|---|
maestorm Profil |
Zdravím,
nevíte náhodou někdo jak správně vypisovat nekonečné menu v nette? {block #menu} {foreach $menu as $item} <ul class="tree" n:if="$item != end()"> <li>{if is_array($item)} {include #menu, 'menu' => $item} {else}{$item}{/if}</li> </ul> {/foreach} {/block} <?php namespace App\Presenters; use Nette; use App\Model; class HomepagePresenter extends BasePresenter { public function renderDefault() { $this->template->menu = [ [ 'title' => 'Level 1', 'node' => [ [ 'title' => 'Level 1.1', 'node' => [ [ 'title' => 'Level 1.1.1', 'node' => [] ], [ 'title' => 'Level 1.1.2', 'node' => [] ] ] ], [ 'title' => 'Level 1.2', 'node' => [] ], [ 'title' => 'Level 1.3', 'node' => [] ] ] ], [ 'title' => 'Level 2', 'node' => [ 'title' => 'Level 2.1', 'node' => [ [ 'title' => 'Level 2.1.1', 'node' => [] ], [ 'title' => 'Level 2.1.2', 'node' => [] ] ] ] ], [ 'title' => 'Level 3', 'node' => [ [ 'title' => 'Level 3.1', 'node' => [] ], [ 'title' => 'Level 3.2', 'node' => [] ], ] ] ]; // \Tracy\Debugger::$maxDepth = 6; // dump($this->template->menu);exit; } } Nette mi totiž vypisuje warning: end() expects exactly 1 parameter, 0 given |
||
abc Profil |
#2 · Zasláno: 29. 3. 2016, 15:53:27
maestorm:
Nebude stačit smazat ten n:if? |
||
maestorm Profil |
abc:
To bohužel nepomůže, jde mi o to, aby nebyly v kódu menu navíc. viz. <div class="col-lg-12"> <ul class="tree"> <li> <ul class="tree"> <li>Level 1</li> </ul> <ul class="tree"> <li> <ul class="tree"> <li> <ul class="tree"> <li>Level 1.1</li> </ul> <ul class="tree"> <li> <ul class="tree"> <li> <ul class="tree"> <li>Level 1.1.1</li> </ul> <ul class="tree"> <li> </li> </ul> </li> </ul> <ul class="tree"> <li> <ul class="tree"> <li>Level 1.1.2</li> </ul> <ul class="tree"> <li> </li> </ul> </li> </ul> </li> </ul> </li> </ul> <ul class="tree"> <li> <ul class="tree"> <li>Level 1.2</li> </ul> <ul class="tree"> <li> </li> </ul> </li> </ul> <ul class="tree"> <li> <ul class="tree"> <li>Level 1.3</li> </ul> <ul class="tree"> <li> </li> </ul> </li> </ul> </li> </ul> </li> </ul> <ul class="tree"> <li> <ul class="tree"> <li>Level 2</li> </ul> <ul class="tree"> <li> <ul class="tree"> <li>Level 2.1</li> </ul> <ul class="tree"> <li> <ul class="tree"> <li> <ul class="tree"> <li>Level 2.1.1</li> </ul> <ul class="tree"> <li> </li> </ul> </li> </ul> <ul class="tree"> <li> <ul class="tree"> <li>Level 2.1.2</li> </ul> <ul class="tree"> <li> </li> </ul> </li> </ul> </li> </ul> </li> </ul> </li> </ul> <ul class="tree"> <li> <ul class="tree"> <li>Level 3</li> </ul> <ul class="tree"> <li> <ul class="tree"> <li> <ul class="tree"> <li>Level 3.1</li> </ul> <ul class="tree"> <li> </li> </ul> </li> </ul> <ul class="tree"> <li> <ul class="tree"> <li>Level 3.2</li> </ul> <ul class="tree"> <li> </li> </ul> </li> </ul> </li> </ul> </li> </ul> </div> |
||
abc Profil |
#4 · Zasláno: 29. 3. 2016, 20:25:41
maestorm:
To menu "navíc" se tam určitě nedostalo kvůli té podmínce. Spíš máš v tu chvíli v $item prázdný string - takže by mohlo stačit n:if="$item != '' "
|
||
Jan Tvrdík Profil |
#5 · Zasláno: 29. 3. 2016, 22:30:18
maestorm:
Začal bych bez nesmyslné n:if podmínky a se správně umístěným <ul>
{block #menu} <ul class="tree"> {foreach $menu as $item} <li>{if is_array($item)} {include #menu, 'menu' => $item} {else}{$item}{/if}</li> {/foreach} </ul> {/block} |
||
maestorm Profil |
Bohužel ani jedna odpověď mi nezafungovala, ale děkuji vám za snahu, také děkuji za to upozornění ohledně hierarchie, ale opravdu nevíte o nějakém konkrétním řešení?
|
||
Kcko Profil |
#7 · Zasláno: 30. 3. 2016, 14:49:11
maestorm:
Odpověď Jana Tvrdíka je v pořádku. Je to koneckonců to samé co je ukázkou na nette.org (latte.nette.org/cs/macros#toc-vkladani-bloku) Zkusil jsem si to, protože mi přišlo divné, že by to nefungovalo (už z letmého pohledu je to v pořádku) a je to skutečně v pořádku. Viz: ![]() Někde děláš něco špatně, ale nevím co, protože na tomhle se nedá nic zkazit. |
||
maestorm Profil |
#8 · Zasláno: 30. 3. 2016, 14:51:50
Kcko:
Jo přesně takhle to mám. Jenže tam nechci ty koncové odrážky, které v tomto vašem případě znamenají <li></li> navíc. Proto jsem sem na diskusi napsal, protože se mi je nedaří odstranit. Omlouvám se, pokud jsem byl špatně pochopen. S poděkováním Tomáš. |
||
Kcko Profil |
#9 · Zasláno: 30. 3. 2016, 14:58:34
maestorm:
Tak si odstraň ty prázdná pole, tam kde víš, že děti nejsou tj např. 'title' => 'Level 3', 'node' => [ [ 'title' => 'Level 3.1', 'node' => [] ], [ 'title' => 'Level 3.2', 'node' => [] ], => 'title' => 'Level 3', 'node' => [ [ 'title' => 'Level 3.1' ], [ 'title' => 'Level 3.2' ], |
||
maestorm Profil |
#10 · Zasláno: 30. 3. 2016, 15:28:38
Jinak to skutečně nejde, než ty děti odstranit takto?
|
||
Kcko Profil |
#11 · Zasláno: 30. 3. 2016, 15:39:23
maestorm:
A proč tam držíš informaci o prázdném poli? Nějak si do téhle podoby skládáš (z DB nebo nevím odkud) tak není problém to zohlednit. Já to mám trošku jinak: $products = array( 1 => array('parent' => 0, 'name' => 'Televize', 'url' => 'televize'), 2 => array('parent' => 1, 'name' => 'LED', 'url' => 'led'), 3 => array('parent' => 2, 'name' => '101 palcu', 'url' => '101-palcu'), 4 => array('parent' => 3, 'name' => 'Samsung', 'url' => 'samsung'), 5 => array('parent' => 0, 'name' => 'Videa', 'url' => 'videa'), 6 => array('parent' => 5, 'name' => 'Samsung', 'url' => 'samsung'), 7 => array('parent' => 6, 'name' => 'DO 10 tisic', 'url' => 'do-10-tisic'), 8 => array('parent' => 1, 'name' => 'Televize - sub', 'url' => 'televize'), 9 => array('parent' => 8, 'name' => 'Vyrazene teleize', 'url' => 'vyrazene-televize'), ); foreach ($products as $id => $row) { $arr[$row["parent"]][$id] = $row; } $this->template->data = $arr; {var $parent = 0} {var $level = 0} {block menu} <ul> {foreach $data[$parent] as $id => $row} <li>{$id} - {$row['name']} </li> {ifset $data[$id]} {include this, parent => $id, level => $level + 1 } {/ifset} {/foreach} </ul> {/block} |
||
maestorm Profil |
#12 · Zasláno: 30. 3. 2016, 22:18:06
Nakonec mi pomohl kamarád:
{block #menu} <ul class="tree"> <li n:foreach="$menu as $item"> {$item['title']} {if isset($item['node']['title'])} {include #menu, 'menu' => array($item['node'])} {elseif count($item['node'])} {include #menu, 'menu' => $item['node']} {/if} </li> </ul> {/block} |
||
Časová prodleva: 9 let
|
0