Vlastní makra v Latte Filteru

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

Hezký den všem,

Pustil jsem se do praktické zkoušky, jestli už dokážu v Nette něco vytvořit. Vybral jsem si jeden jednoduchý web, který chci do Nette překlopit. Většina stránek je statických, ale některé obsahují více sekcí, jež si na straně klienta uživatel pomocí Javascriptu může rozklikávat.

napsal jsem si třídu, která pomůže takový dokument s více sekcemi otagovat tak, aby Javascript si s obsahem poradil a přivěsil na příslušná místa obslužné události a která pro klienty bez podpory Javascriptu na začátku stránky vygeneruje obsah s odkazy na kotvy.

Skript vypadal pak asi následovně:

<?php
...
$s=new SectionSwitcher('multidocument');
$s->open('První sekce');?>
<p>Toto je obsah první sekce.</p>
<?php $s->open('Druhá sekce');?>
<p>Toto je obsah druhé sekce.</p>
...
<?php $s->printDocument();?>

Když už jsem se pustil do používání šablon v Nette, řekl jsem si, že by bylo dobré, aby generování dokumentů s více sekcemi bylo sladěné s ostatními makry v Latte Filteru a já mohl v šabloně použít nějaký takovýto elegantní zápis:

{sections multidocument}
{section 'První sekce'}
<p>Toto je obsah první sekce.</p>
{section 'Druhá sekce'}
<p>Toto je obsah druhé sekce.</p>
{/sections}

Otázkou teď zústává, jaká je nejšikovnější cesta přidání této funkcionality do LatteMacros. Vypátral jsem už následující věci:

  1. Musím doplnit příslušné položky odpovídající otevíracím a uzavíracím značkám pro {sections} a {section} do pole LatteMacros::$defaultMacros.
  2. V hodnotě přidávané položky uvedu kód, na který se má makro přeložit. Mezi znaky % můžu uvést callback, který se má volat.
  3. Nechci-li použít callbacky (jde nejspíše použít jen volání statických metod) mohu pracovat přímo v šabloně a ukládat si něco dle potřeby do objektu $_cb jako třeba nový objekt pro makro {sections}.

Tak nějak tuším, že než jít vlastní cestou, je dobré využít pro zachytávání obsahu jednotlivých sekcí dokumentů makro capture, což by se nejspíš neobešlo i bez dalšího zásahu z venčí do třídy LatteMacros v podobě přidání několika metod.

Protože dokumentace na rozšiřování Latte Filteru prakticky neexistuje, chtěl bych poprosit, zda-li by někdo nevěděl, kudy bych se měl vydat, abych dosáhl efektivní implementace výše zmíněných maker pro generování dokumentů s více sekcemi. Stačí mě jen nasměrovat, jak šikovně propojit LatteMacros se třídou, která bude dostávat signály o nalezení příslušných značek {sections} a {section} a při nalezení značky {/sections}sesumíruje vše mezi {sections} a {/sections}a vrátí příslušný výstup.

Děkuji moc předem za odezvu – Neti