Problem s rozjetim texy, pravdepodobne problem mezi klavesnici a zidli

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

Zdravicko. Nejak se mi nedari rozjet texy v templatech.

<texy>**ahoj**</texy>

mi funguje krasne, nicmene

<texy>{$nejakapromenna->neco}</texy>

se mi prelozi na @php:p5@, nezavisle na obsahu dane promenne.

{$nejakapromenna->neco |texy}

vyvola vyjimku „Call to undefined method Template::texy().“

Pouzivam knihovny z NetteFramework-0.9.4-PHP5.2.zip a texy-2.1.zip. Dle dokumentace jsem rpidal do BasePresenteru metodu

<?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->setOutputMode(Texy::HTML5);

		// registrace filtru texyElements
		$template->registerFilter('Nette\Templates\TemplateFilters::texyElements');
	}
?>

Napada nekoho, kde delam chybu?

redhead
Člen | 1313
+
0
-

Není to náhodou helper??

$template->registerHelper('Nette\Templates\TemplateFilters::texyElements');
Glubo
Člen | 12
+
0
-

redhead napsal(a):

Není to náhodou helper??

$template->registerHelper('Nette\Templates\TemplateFilters::texyElements');

Neni, texyElements je opravdu filtr, ktery se stara o <texy>…</texy>. Radek tvou napsany vede na vyjimku Invalid callback.

despiq
Člen | 320
+
0
-

Ja myslim ze chybu nedelas nikde jen to takhle nemuzes pouzit.
Ciste od oka bych rekl ze aplikace filtru probiha pred vypsanim promennych

Glubo
Člen | 12
+
0
-

Tak jsem nakonec vyresil vlastnim helperem texy, ktery je zatim dost neoptimalizovany (pokazde si vytvari novy objekt texy), ale az bude potreba, nebude tak tezke jej optimalizovat nejakym sigletonem…
vytvoril jsem si tridu GTexyHelpers

<?php
final class GTexyHelpers
{
	/**
	 * Static class - cannot be instantiated.
	 */
	final public function __construct()
	{
		throw new LogicException("Cannot instantiate static class " . get_class($this));
	}

	public static function texy ($s) {
		$texy = new Texy();
		return $texy->process($s);
	}
}
?>

a do BasePresenteru jsem pretizil metodu createTemplate

<?php
	protected function createTemplate() {
		$template = parent::createTemplate ();
		$template->registerHelper('texy','GTexyHelpers::texy');
		return $template;
	}
?>

a nyni mi, sice ponekud neciste, ale funguje zapis v template

{!$neco|texy}