Latte – stromové menu přes funkci
- Duch.Veliky
- Člen | 68
Zdravím,
mám dotaz. Potřeboval bych v latte vypisovat „neomezený strom“, což obvykle dělám následovně. Vytvořím si strom kategorií do promměných ve tvaru
<?php
$kategorie[ $patri_pod ][ $id ] = $nazev;
?>
A potom to vypisuji tak, že neustále volám funkci, která ověří jestli existuje podkategorie a když jo, tak se zavolá znova:
<?php
function vypsat_strom($patri_pod) {
global $kategorie, $config;
$strom = $kategorie->strom;
if (isset($strom[$patri_pod])) {
echo '<ul>';
foreach ($strom[$patri_pod] as $odkaz) {
?>
<li data-jstree='{ "<?php echo ($kategorie->detail["id "] == $odkaz["id"] ? 'selected' : 'opened');?>" : true }'>
<a href="/<?php echo $config->stranka; ?>/<?php echo $config->stranka2; ?>/upravit/<?php echo $odkaz["id"]; ?>">
<?php echo $odkaz["nazev"]; ?>
</a>
<?php
vypsat_strom($odkaz["id"]);
?>
</li>
<?php
}
echo '</ul>';
}
}
vypsat_strom(0);
?>
No ale jak to přenést do Nette. Jedno řešení by bylo vygenerovat ten HTML kód v Presenteru, ale to neni úplně ok, když kód by měla vypisovat šablona, ne? :) Ale jak volat tento princip v Latte?
- Duch.Veliky
- Člen | 68
Respektivě v tomto příkladu co jsem zaslal jsem měl kategorie ve tvaru
<?php
$kategorie[ $patri_pod ][ $id ] = array(
"nazev" => $nazev,
"id" => $id
);
?>
ale to je nepodstatné :)
- David Kudera
- Člen | 455
Udělal bych si na to komponentu, která si ta data nějak šikovně načte (ne global) a v její latte šabloně můžeš použít bloky, jako je popsáno tady
- Duch.Veliky
- Člen | 68
Jo to vypadá, že vyřeší můj problém, protože blok může volat i sám sebe :) díky
- Duch.Veliky
- Člen | 68
no data (tj html tagy) si nechci připravovat v presenteru, protože to pak nedává smysl když html kódy patří do šablony
- David Kudera
- Člen | 455
no v presenteru určitě ne a určitě je dobře, že chceš html v šabloně. Já bych dodal, že jen data (to jak máš po staru ten global) bych si načítal třeba z nějakýho modelu. Prostě odněkud
- Jan Suchánek
- Člen | 404
@Duch.Veliky: rozhodně ne v Presenteru ani v komponentě a už vůbec ne modelu, ale přeci si můžeš připravit data, tak abys je v šabloně mohl vklidu vypisovat.
- David Kudera
- Člen | 455
Záleží z kama jsou. Měl jsem dodat, že model/service/fasade/whatever jen pokud je to menu z db (proto jsem napsal třeba ;-). Prostě je nutný si to dobře určit a rozhodnout, kam to patří
Editoval David Kudera (15. 9. 2014 18:49)