Vlastní bloková Latté makra

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

Ahoj,

chtěl jsem si nadefinovat vlastní blokové makro do Latté filtru. To by samozřejmě nebyl až takový problém, ale napadlo mě, že by bylo fajn vyřešit křížení maker. Nette to řeší pomocí pole LatteMacros::$blocks, které je ale (světe div se) private.

Chtěl bych tedy aby tato a další proměnné třídy LatteMacros byly protected a současně nějakou možnost, jak říct Latté filtru aby použila mou poděděnou třídu (možná nějak přes Context?).

Jan Tvrdík
Nette guru | 2595
+
0
-

Co myslíš křížením maker?

jtousek
Člen | 951
+
0
-
{block}
{capture}
{/block}
{/capture}

Nette na podobný kód hodí výjimku, ale nemohu přidat vlastní blokové makro, které by to zohledňovalo také.

Editoval jtousek (9. 10. 2010 19:12)

redhead
Člen | 1313
+
0
-

A je problém si to ohlídat při kódování? V životě se mi takovou výjimku při práci s nette makry vyhodit nepodařilo

jtousek
Člen | 951
+
0
-

Ani mě ne, ale když už něco dělám tak se snažím dělat to pořádně.

Filip Procházka
Moderator | 4668
+
0
-

zbytečnost, spíš bych podal feature request na jednoduchou kontrolu křížení

David Grudl
Nette Core | 8229
+
0
-

Přemýšlím, jestli jsou situace, kdy má smysl křížit makra. Napadá vás něco?

jtousek
Člen | 951
+
0
-

@DG: Mě tedy žádný případ nenapadá. Všechna bloková makra představují typicky určitý blok HTML kódu, přičemž je samostatný a všechny tagy uvnitř jsou ukončené. Bloková makra se občas používají jako n:block a tedy jsou v tomto ohledu stejné jako HTML – nemá smysl je křížit.

Mimochodem, jak vlastně fungují ty makra v atributech n:if="$podminka"?
Chtěl bych si udělat nějaká vlastní makra, která by takto fungovala, ale nedokázal jsem to ze zdrojáků moc pochopit ani jsem nenašel nic na fóru.

Jo a někde jsem zahlédl také notaci <n:if cond="$podminka">, k čemu je to dobré a jak se to používá? Examply na to nikde nejsou, ale vypadá to taky zajímavě.

Patrik Votoček
Člen | 2221
+
0
-

@DG ne

Foowie
Člen | 269
+
0
-

@jtousek: Pokud si nadefinuješ makro řekněme xyz (a /xyz) tak automaticky krom zápisu {xyz}{/xyz} můžeš psát i <div n:xyz>text</div> ;)

PJK
Člen | 70
+
0
-

Křížená makra je něco jako v programování cykly nebo podmíněné bloky s prohozenými konci :D připadá mi to nesmyslné…

a pokud slouží makro k výpisu html, nemůže to z podstaty jazyka jít…

Jeden nápad bych ale měl, v praxi nahraditelný a zbytečný, zato ale dost implementačně náročný a docela zajímavý… Jak jsem na to koukal, vynořil se mi v hlavě koncept „metaprogramování“:

{block content}

bla bla bla

	{if $kratkyblok}
		{/block}
	{/if}

ble ble ble

	{if $stredniblok}
		{/block}
	{/if}

blo blo blo!!!

{if !($kratkyblok || $stredniblok)}
	{/block}
{/if}

To jen tak pro rozšíření obzorů a pobavení :)

Btw, docela dobrý paradox na téma vyhodnocení variable scope (teď už mi to nepřipadá těžce implementovatelné, ale nedělatelné :p)

Honza Kuchař
Člen | 1662
+
0
-

Já bych to křížení nepodporoval, ale zakazoval.