Problém s Texy a Nette ⇒ escapovaný výstup

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Mesiah
Člen | 240
+
0
-

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)

Michalek
Člen | 206
+
0
-

{!$post->text|texy}

https://latte.nette.org/cs/tags#…

Editoval Michalek (16. 8. 2010 0:49)

Mesiah
Člen | 240
+
0
-

jejda, děkuji.

A můžu ještě dotaz, lze nějak registrovat Texy pro Control? Mám vytvořit abstraktní třídu, která bude provádět registraci?

Patrik Votoček
Člen | 2221
+
0
-

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
+
0
-

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
+
0
-

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.