Problém s Texy a Nette ⇒ escapovaný výstup
- Mesiah
- Člen | 240
Dobrý den,
snažím se začlenit Texy do projektu. Na základě Přehledu základních
filtrů zaregistruji Texy a z informací z tohoto
vlákna registruji filtr. Jenže při volání v šabloně
{$post->text|texy}
dostávám escapovaný výstup
<p>Tjsdaf skdfj sdjf lsdj jsdlkfj lskdjfl skd.</p>
což se zobrazuje jako
<p>Tjsdaf skdfj sdjf lsdj jsdlkfj lskdjfl skd.</p> <!-- by Texy2! -->
a to jak tušíte není dobře. Můžete mi poradit, kde dělám chybu?
<?php
public function templatePrepareFilters($template)
{
parent::templatePrepareFilters($template);
// inicializace Texy
TemplateFilters::$texy = new Texy();
TemplateFilters::$texy->encoding = 'utf-8';
TemplateFilters::$texy->allowedTags = Texy::NONE;
TemplateFilters::$texy->allowedStyles = Texy::NONE;
TemplateFilters::$texy->allowedClasses = Texy::NONE;
TemplateFilters::$texy->setOutputMode(Texy::XHTML1_TRANSITIONAL);
// registrace filtru texyElements
$template->registerFilter('Nette\Templates\TemplateFilters::texyElements');
}
public function createTemplate()
{
// inicializace
$texy = new Texy();
$texy->encoding = 'utf-8';
$texy->allowedTags = Texy::NONE;
$texy->allowedStyles = Texy::NONE;
$texy->allowedClasses = Texy::NONE;
$texy->setOutputMode(Texy::XHTML1_TRANSITIONAL);
$texy->allowed['emoticon'] = TRUE;
$texy->emoticonModule->fileRoot = WWW_DIR . '/images';
// zavolám původní createTemplate
$template = parent::createTemplate();
// zaregistruji texy helper
$template->registerHelper('texy', callback($texy, 'process'));
return $template;
}
?>
Editoval Mesiah (16. 8. 2010 0:41)
- Patrik Votoček
- Člen | 2221
Za prvé {!$texy|texy}
není filter ale helper. A za duhé
u controlu se používá texy úplně stejně jako u presenteru. (Preseneter
je totiž sám speciálním případem controlu)
- Mesiah
- Člen | 240
Ach ta terminologie… Každopádně, Presenter je ve stromu hierarchie objektů v Nette pod Control a když texy registruji v BasePresenteru, tak jej nemůžu použít v libovolném svém Controlu. Zajímalo by mě, je-li cesta, jak je možné provést jen jednu registraci texy, tak aby ji bylo možné použít v Controlu i v Presenteru.
- Ondřej Mirtes
- Člen | 1536
Vytvoř si na Texy instanci továrničku (singleton) a holt budeš mít dvakrát v BaseControl a v BasePresenter řádek s registerHelper, který ovšem bude využívat tutéž instanci Texy.