| 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: 10 let
|
|||
0
