Latte sablony trochu podrobnejsie
- hizo
- Člen | 48
Zdravim, asi 3 mesiace dozadu som sem pisal na forum nieco o latte sablonach, konkretne tento post. Vidim ze je zase nova verzia Nette tak tam bude pravdepodobne vela veci pomenenych. Potrebujem vytvorit nieco ako Java Server Faces do Nette. Mohol by mi niekto skuseny priblizit ako funguju Latte sablony?
- Zatial som si do nette/application/ui/presenter.php pridal zobrazovanie .xhtml sablon
- ak spravne chapem tak registracia latte filtra prebieha v nette/application/ui/control.php ? konkretne
<?php
public function templatePrepareFilters($template)
{
$template->registerFilter($this->getPresenter()->getContext()->nette->createLatte());
//takze sem by som si pridal nieco ako registerFilter(...->nette->createFaces());
}
?>
nemozem vsak najst metodu createLatte() aby som si pozrel ako vyzera
- dalej studujem zdrojaky Nette/Latte ale viem z toho vycitat velmi malo ked nevidim ako sa tie metody volaju, v akom poradi atd..
- ako to vidim ja: najskor sa asi na cely text sablony zavola Nette/Utils/Tokenizer ktory spracuje text do tokenov. V \Latte\Engine.php sa vytvori novy Parser a Compiler a predpokladam ze dalej sa pole tokenov najskor parsuje(nahradzuju sa makra za dalsi kod) a po parsovani sa cely text este skompiluje(v pripade ze tam je nejaky php kod, ako trebars pri {foreach} atd.. ?
Dik moc za kazdu odpoved!
- Filip Procházka
- Moderator | 4668
Potrebujem vytvorit nieco ako Java Server Faces do Nette.
Schválně jsem si načetl co to je a moc moudrej z toho nejsem. Přijde mi to tak samozřejmé, že nechápu, naco je tam tak šílená onanie s XMLkem, ale možná jsem jenom moc rozmazlenej Lattečkem :)
Zatial som si do nette/application/ui/presenter.php pridal zobrazovanie .xhtml sablon
To by mě zajímalo jak jsi to udělal, protože Nette používá koncovky
.latte
a v šabloně může být jak XML, tak XHTML,
i HTML(5).
ak spravne chapem tak registracia latte filtra prebieha v nette/application/ui/control.php ? konkretne
V UI\Control
je nastavení šablony pro komponentu (takže
i presentery). Takže ano, v UI\Control
se připojuje Latte
Engine.
nemozem vsak najst metodu createLatte() aby som si pozrel ako vyzera
Ta se totiž generuje do zkompilovaného DI Containeru jako továrnička. Více zde.
dalej studujem zdrojaky Nette/Latte ale viem z toho vycitat velmi malo ked nevidim ako sa tie metody volaju, v akom poradi atd..
Nejdříve se načte šablona, předá se do Nette\Latte\Parser
,
který udělá z šablony tokeny. Pole tokenů se následně předá do
Nette\Latte\Compiler
, který celé pole proiteruje a zkouší na
jednotlivé tokeny aplikovat makra (pokud se jedná o makra). Jde o horkou
novinku, dříve tohle celé bylo v jedné třídě.
Na pozadí se samozřejmě využívá stavový automat, protože samotným tokenizerem, který je
v Nette, by to nešlo, jelikož Parser
má různé kontexy a
potřebuje měnit způsob zpracování zbytku šablony, na základě
aktuálního tokenu.
Ale samotný obsah maker ti už na pozadí obstarává
Nette\Utils\Tokenizer
, což je ale celkem detail.
Editoval HosipLan (29. 1. 2012 12:06)
- hizo
- Člen | 48
Diky, na tie odkazy sa hned pozriem. Java Server Faces – v podstate ide o to, ze si v html elemente definujes namespace pre nejaku sadu znaciek, napriklad < html xmlns:h=„http://www.neco.cz/html“ >, v dokumente potom mozes pouzivat znacky z tejto sady, dajme tomu < h:inputText / > co by mi moj filter zmenil vo vyslednom kode na < input type=„text“ >…samozrejme html netreba nahradzat,to bol len priklad. Takze potreboval by som vediet ako pracuje ten stavovy automat a ako sa nahradzaju makra pri zisteni ze ide o nejake makro(tak isto by som nahradzal svoje znacky pri najdeni nejakeho prefixu). Staci mi teda spravit si novy Compiler?
k tej podpore xhtml sablon: viem ze sa to da napchat vsetko do latte, no veduci chcel aby sa sablony dali od seba odlisit(.xhtml je tiez zatial len testovacie, moze tam byt .xml alebo hocico ine), preto v Nette/Application/UI/Presenter.php:
<?php
public function formatTemplateFiles()
{
$name = $this->getName();
$presenter = substr($name, strrpos(':' . $name, ':'));
$dir = dirname(dirname($this->getReflection()->getFileName()));
return array(
"$dir/templates/$presenter/$this->view.latte",
"$dir/templates/$presenter.$this->view.latte",
"$dir/templates/$presenter/$this->view.phtml",
"$dir/templates/$presenter.$this->view.phtml",
"$dir/templates/$presenter/$this->view.xhtml",
"$dir/templates/$presenter.$this->view.xhtml",
);
}
?>
- Filip Procházka
- Moderator | 4668
Java Server Faces
To je hrozny psycho :)
Takze potreboval by som vediet ako pracuje ten stavovy automat a ako sa nahradzaju makra pri zisteni ze ide o nejake makro (tak isto by som nahradzal svoje znacky pri najdeni nejakeho prefixu).
Hromady šílené teorie. Zkus si prostě prostudovat kód Latte ;) Stejně tomu potřebuješ porozumět do hloubky (dej tomu aspoň den, dva)
Staci mi teda spravit si novy Compiler?
Mě pořád nejde do hlavy, že máš znovu-vynalézat kolo jako školní práci… To je prostě na hlavu :)
k tej podpore xhtml sablon…
Takže žádná „podpora“ se nekoná, jenom jsi upravil formatter, aby přijímal i jiné koncovky :)