{mymacro whatever, 1, 2, 3} proc nezna makro $_presenter?

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

zdravim,

pokousim se udelat nove vlastni makro pro generovani statickeho obsahu a zjistuji, ze samotne makro i kdyz je vykonavano urcitym presenterem jako sablona, tj. umisteni sablony je jasne dano k presenteru. tak presenter makro nezna.

pro svou funkcnost potrebuji pri zpracovani makra znat presenter a moc se mi nelibi, ze v sablone budu volat {php} kdyz jej nepotrebuji. jedna se o staticky obsah vuci presenteru.

zhruba takto:
{mymacro filename-generovane_cisla.jpg}

vytvori:
/www/images/filename-generovane_cisla.jpg

mam podchycen stav, ze kdyz se mi zmeni sablona anebo nesedi vysledny obrazek ze zdrojem, tak se provede pregenerovani, tj. maznuni zkompilovane sablony z temp-u a znovu-pregenerovani sablony.

…snad jsem to vysvetlil srozumitelne. pomuze nekdo?
j3.

j3nda
Člen | 12
+
0
-

tak, jak to tak prochazim, tak mozna bude lepsi to udelat pres templateFilters()

public function templatePrepareFilters($template)
{
$template->registerFilter(new Nette\Templating\Filters\Tralala);
$template->registerFilter(new Nette\Latte\Engine);
}

jiri.pudil
Nette Blogger | 1032
+
0
-

$presenter bez podtržítka; registrovat makro v templatePrepareFilters je dobrý nápad, jde to například takto:

public function templatePrepareFilters($template)
{
	$latte = new Nette\Latte\Engine;
	$set = new Nette\Latte\Macros\MacroSet($latte->compiler);
	$set->addMacro('action', 'echo $presenter->action;');
	$template->registerFilter($latte);
}

EDIT: Hodný strýček Google objevil totok.

Editoval jiri.pudil (11. 3. 2013 18:45)

j3nda
Člen | 12
+
0
-

diky.
presne tak jsem to udelal.

a od makra

{img @path/to/my-image.jpg 320x200xMethod 'border:1 solid black' 'filter:watermark=source/to/image.png; arg1=val1; argN=valN' output:jpg=90"}

upustil a vyresil to prave filtrem.

PRESENTER:
public function templatePrepareFilters($template) {
	$template->registerFilter(new \s2\templating\webloader\filters\ImageFilter($this, $this->template->basePath));
	parent::templatePrepareFilters($template);
}

IMAGE-FILTER:
public function __invoke($code) {
	return preg_replace_callback('/'.static::TAG_START.'(.+)'.static::TAG_END.'/', array(&$this, 'handle'), $code, -1, $count);
}

koho by zajimaly podrobnosi, necht tady vznese dotazy – rad mu odpovim. :)

j3

Editoval j3nda (12. 3. 2013 17:47)