Vykreslení funkce s html do Latte
- aha009
- Člen | 50
Ahoj,
mám funkci pro vykreslení menu, ale netuším jak ji dostat do šablony.
Tohle nefunguje
$this->template->menu = $this->displayMenu();
Ve funkci je rekurze. Bez ní bych to rovnou vykreslil do šablony, ale takhle
jsem v koncích a nevím jak na to.
public function displayMenu($parent = 0)
{
$query = $this->menuManager->getPublicMenus()->where('parent = ?', $parent);
if ($this->menuManager->getPublicMenus()->count() > 0) {
print '<ul>';
foreach ($query as $row) {
print '<li>' . $row->title;
$this->displayMenu($row->id);
print '</li>';
}
print '</ul>';
}
}
- Kamil Valenta
- Člen | 822
Místo print (fíha, print jsem vážně dlouho neviděl) si to skládej do proměnné a na konci funkce dej return.
- F.Vesely
- Člen | 369
V latte lze taky docilit rekurze pres vkladani bloku do sebe. Viz dokumentace https://latte.nette.org/cs/tags#…
- aha009
- Člen | 50
Děkuji za rady. Tak jsem to pár hodin zkoušel namontovat do Latte a
neúspěšně. Jen původní kód se od té doby trochu změnil.
Jak tam dostanu $parent = null
?
public function displayMenu($parent = null)
{
if ($parent == null) {
$query = $this->menuManager->getPublicMenus()->where('parent', null)->order('sort_order');
} else {
$query = $this->menuManager->getPublicMenus()->where('parent = ?', $parent)->order('sort_order');
}
if ($this->menuManager->getPublicMenus()->count() > 0) {
$menu = '<ul>';
foreach ($query as $row) {
$menu .= '<li>' . $row->title;
$menu .= $this->displayMenu($row->id);
$menu .= '</li>';
}
$menu .= '</ul>';
$menu = str_replace("<ul></ul>","",$menu);
return $menu;
}
}
Zkoušel jsem to dostat do toho vzoru, ale neúspěšně
{block menu}
<ul>
{foreach $menu as $item}
<li>{if is_array($item)}
{include menu, menu => $item}
{else}
{$item}
{/if}</li>
{/foreach}
</ul>
{/block}