Problema cu care m-am confruntat azi a fost că am avut nevoie de randarea template-urilor handlebars în clar (neparsate).
Adică template-ul ăsta:
<input type="text" name="{{ group }}[{{ id }}]" value="{{ value }}" />
Voiam să fie afișat fix așa, fără a fi parsat.
Până acum am mai avut nevoie o singură dată și am preferat să „compilez” template-ul în obiecte JS. Acum e un pic diferit, iar template-urile JS nu se pretează. Prin urmare, facem așa:
Xamin
Xamin are una dintre cele mai bune implementări handlebars pentru PHP, prin urmare o folosesc pe asta. Și pentru ca lucrurile să fie un pic mai ușor de „digerat”, am făcut și un wrapper pentru clasa asta (este pentru WP, dar se pot scoate filtrele și poate fi folosit oriunde):
Se folosește simplu:
echo Tpl::get('tplName', []); // va parsa și va afișa views/tplName.hbs
Boon, acum, cum schimbăm tag-urile?
Tokenizer
După ce am săpat prin sursă, am găsit partea asta ca fiind singurul loc unde sunt definite tag-urile:
Prin urmare, facem câteva lucruri: extindem Tokenizer
și trimitem o instanță la Tpl:
class HandlebarsCustomTokenizer extends \Handlebars\Tokenizer
{
protected function reset()
{
parent::reset();
$this->otag = '<%';
$this->ctag = '%>';
}
}
Acum nu ne rămâne decqt să trimitem instanța:
echo Tpl::get('tplName', [], [], new HandlebarsCustomTokenizer);
Și cam atât