Rozdílné chování Texy napřímo a přes callback (Helper)
- maarlin
- Člen | 207
Ahoj,
řeším tady už několik hodin, proč nijak nenastavená Texy se chová jinak
při přímém volání – přes preview pro Texylu:
class TexylaPresenter extends BasePresenter
{
/**
* Texyla preview
*/
public function actionPreview()
{
$texy = new Texy;
$html = $texy->process(NEnvironment::getHttpRequest()->getPost("texy"));
$this->terminate(new NRenderResponse($html));
}
}
.. vše funguje jak má.
Ovšem při volání přes callback, jako Helper:
abstract class BasePresenter extends NPresenter
{
public function beforeRender()
{
$texy = new Texy();
$this->template->registerHelper('texy', callback($texy, 'process'));
}
{block |texy}
{$content}
{/block}
to funguje tak nějak polovičně…
Z tohoto:
Lorem ipsum
***********
"Google":http://google.com
rutrum dui
==========
vznikne toto:
<p>Lorem ipsum</p>
<hr>
<p>„Google“:<a href="http://google.com">http://google.com</a></p>
<h1>rutrum dui</h1>
Přičemž očekávaný výstup je:
<h2>Lorem ipsum</h2>
<p><a href="http://google.com">Google</a></p>
<h3>rutrum dui</h3>
- kravčo
- Člen | 721
Problém robí medzera (alebo tabulátor, to je jedno) na začiatku bloku
(nie v premennej $content
, ale priamo v šablóne v obsahu
bloku).
Okrem toho myslím, že jednoduchšie by bolo napísať:
{$content |texy}
pričom tu odsadenie zlobu nenarobí. Alebo, ak to súrne potrebuješ mať uzavreté v anonymnom bloku, skús pridať výkričník (pričom si si vedomý, čo to znamená):
{block |texy}
{!$content}
{/block}
totiž, na zložitejších príkladoch by ti to mohlo hádzať ešte rozdielnejšie výsledky…
Alebo skúsiť niečo takéto (čo ale nemusí byť úplne ekvivalentné):
abstract class BasePresenter extends NPresenter
{
public function beforeRender()
{
$this->template->registerHelper('trim', callback('trim'));
$this->template->registerHelper('texy', callback(new Texy, 'process'));
}
}
{block |trim|texy}
{!$content}
{/block}
Editoval kravčo (4. 10. 2010 13:00)