Vlastní bloková Latté makra
- jtousek
- Člen | 951
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?).
- Filip Procházka
- Moderator | 4668
zbytečnost, spíš bych podal feature request na jednoduchou kontrolu křížení
- David Grudl
- Nette Core | 8218
Přemýšlím, jestli jsou situace, kdy má smysl křížit makra. Napadá vás něco?
- jtousek
- Člen | 951
@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ě.
- PJK
- Člen | 70
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)