Komponenta s vnořeným HTML

dreken
Člen | 36
+
0
-

Jde vytvořit komponentu, kterou v latte zapíšu jako párovou značku s vnořeným HTML, který se ji předá?

Například:

{control myCustomControl, parametr=>$hodnota}
<strong>Toto je vnořený kód, který se předá komponentě. I s {$promennymi}</strong>
{/control}

Případně něco podobného, čím bych toho docílil?

GEpic
Člen | 562
+
0
-

Nemáš nějaký konkrétní příklad, kde bys to chtěl využít?

Gappa
Nette Blogger | 199
+
0
-

GEpic napsal(a):

Nemáš nějaký konkrétní příklad, kde bys to chtěl využít?

Napadá mě třeba obsah pro modální dialog? :)

Phalanx
Člen | 310
+
+1
-

Nemyslím si, že to takhle jde (opravte mě pokud ano). Jako obezličku bych tu použil capture a předal proměnnou přímo do parametrů control.

{capture $dialogContent}<p>text</p>{/capture}

{control myCustomControl, parametr => $hodnota, content => $dialogContent}

Editoval Phalanx (11. 9. 2018 20:01)

h4kuna
Backer | 740
+
+3
-

Celkově předávání parametrů komponentě v šabloně je cesta špatným směrem. Jak z hlediska refaktoringu, tak z hlediska návrhu. Ač jsem to tak dělal, tak jsem zjistil, že to nepotřebuji a jde to vyřešit ve třídě komponenty či továrně komponenty nebo specifickým nastavením komponenty. Pak když tu komponentu máš na deseti místech a po každý k ni musíš vyrobit nějaký parametry. Je celkem otravné v horším případě zjistíš že se parametry opakují.

dreken
Člen | 36
+
0
-

GEpic napsal(a):

Nemáš nějaký konkrétní příklad, kde bys to chtěl využít?

Zrovna bych to chtěl využít v šabloně na emaily, kterou generuji přes latte a kde je pro každou sekci kopec opakovaného HTML kódu s vnořenými tabulkami. Chtěl jsem si to tedy zjednodušit tak, že bych zapsal jen obsah a komponenta by to obalila sama. Dialog okno je obdobný příklad.

Editoval dreken (12. 9. 2018 8:29)

Phalanx
Člen | 310
+
0
-

Pro tvůj případ by bylo úplně nejlepší si napsat hlavní @layout a pak do toho vkládat blok #content.

Editoval Phalanx (12. 9. 2018 8:37)

dreken
Člen | 36
+
0
-

Phalanx napsal(a):

Pro tvůj případ by bylo úplně nejlepší si napsat hlavní @layout a pak do toho vkládat blok #content.

Layout využívám taky, ale ten můžu vložit jen na jedné úrovni, ne? Nemůžu ale už do jednoho layoutu vložit další layout, ve kterém bude obsah.

Editoval dreken (12. 9. 2018 8:41)

Phalanx
Člen | 310
+
0
-

@dreken Ano, jen jedna úroveň. Myslel jsem tím použít pro e-maily jeden hlavní layout a pak už jen rozšířit přes content a title bloky. Části kódu můžeš vložit i přes include. Ale zajímalo by mě, co všechno tam vkládáš? Můžeš ukázat kód?

dreken
Člen | 36
+
0
-

Phalanx napsal(a):

@dreken Ano, jen jedna úroveň. Myslel jsem tím použít pro e-maily jeden hlavní layout a pak už jen rozšířit přes content a title bloky. Části kódu můžeš vložit i přes include. Ale zajímalo by mě, co všechno tam vkládáš? Můžeš ukázat kód?

Radši ne, je to teď hrozná špageta z HTML tabulek a inline stylů. :D Musíme to ještě nějak optimalizovat, ale žádný krásný kód z toho ve výsledku asi nevznikne, ty prasárny tam jsou nutné, aby to pochopili i starší mail klienti.

Nicméně dá se to logicky dělit na středové sekce, tlačítka, boxy, nadpisy atd. pomocí kterých bych to rozdělil do těch „komponent“. Další věc, nad kterou uvažuji je, že bych to jen jednoduše includnul takhle:

{include '_box_start.latte'}
content
{include '_box_end.latte'}