Latte – stromové menu přes funkci

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Duch.Veliky
Člen | 68
+
0
-

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
+
0
-

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
+
+2
-

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
+
0
-

Jo to vypadá, že vyřeší můj problém, protože blok může volat i sám sebe :) díky

Jan Suchánek
Člen | 404
+
0
-

Ty data si muzes taky pripravit i predem aniz bys musel pouzivat blok.

Duch.Veliky
Člen | 68
+
0
-

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
+
0
-

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
+
0
-

@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
+
0
-

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)