Změny a novinky uvnitř Latte

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
David Grudl
Nette Core | 8218
+
0
-

V implementaci Latte došlo v poslední verzi k několika změnám. Týkají se vás pouze pokud Latte rozšiřujete o nová makra; pokud v něm jen píšete šablony, k žádným změnám nedochází.

BC breaky:

  1. Třída Latte\Parser byla rozdělena na Latte\Parser a Latte\Compiler. S makry pracuje compiler, takže se mění typehint u MacroSet::install() nebo případné volání Engine:: nebo MacroSet::getParser() na MacroSet::getCompiler().
  2. čistá n:makra se již neregistrují pomocí $me->addMacro('@class', $callback); ale pomocí $me->addMacro('class', NULL, NULL, $callback);. (Zavináč byl odstraněn).
  3. Přepínání režimu XHTML/HTML už nevychází z hodnoty Nette\Utils\Html::$xhtml. Výchozí zůstává XHTML režim (protože je kompatibilní s HTML5 ale ne naopak) a přepnout jej do HTML lze buď makrem {contentType html} nebo voláním $latte->compiler->defaultContentType = Nette\Latte\Compiler::CONTENT_HTML; nebo v konfiguraci.

A teď novinky:

  • Každé makro reprezentované objektem MacroNode má nyní proměnné $openingCode, $closingCode a $attrCode, ve kterých je uložen otevírací, uzavírací a n:atributový PHP kód makra. (Včetně PHP značek)
  • Otevírací, uzavírací a atributový kód může být vygenerován kdykoliv! Tedy klidně až ve chvíli, kdy se makro uzavírá.
  • Vnitřek makra je v $node->content
  • U maker zapsaných pomocí n:atributů je k dispozici proměnná $node->htmlNode
  • Šablony lze tokenizovat pomocí Latte\Parser, ten vrací pole objektů Latte\Token. Lze tak třeba zkoumat, jaká makra soubor obsahuje.
pekelnik
Člen | 462
+
0
-

Je možné nějak vypnout n:macro syntax? – například bych chtěl vygenerovat šablonu s tímto kódem:

{syntax double}
<div n:class="$a ? $b">{foreach $c as $d}{$d}{/foreach}</div>

a ta n:syntax se nedeaktivuje…

David Grudl
Nette Core | 8218
+
0
-

Ty v Latte generuješ Latte?

nanuqcz
Člen | 822
+
0
-

Taky chystám takovou konzolovou aplikaci na generování latte šablon :-) Ale dá se to obejít takhle, ne?

{syntax double}
<div {{='n:class="$a ? $b"'}}>
David Grudl
Nette Core | 8218
+
0
-
<p n:attr="'n:class' => $class, 'n:href' => $href"> </p>
pekelnik
Člen | 462
+
0
-

Ha! Generovat n:class pomocí n:attr mě nenapadlo :D supr