Vlastni makro a zpracování makra

TheNEoo
Člen | 75
+
0
-

Ahoj,
snažím se vytvořit makro, které přijme id položky a předá id dál ke zpracování a následně obdrží výsledek zpracovaný komponentou.

Nejlepší je příklad. Třeba na fotogalerii. Ovšem začneme článkem, který je uložen v DB.

Vytáhneme si článek

$this->repository->getArticle($idArticle);

Tak, teď dostaneme obsah článku, kde se nachází i makro.

Lorem ipsum dolor sit amet consectetuer Aliquam {photo 4} Phasellus habitant sed habitant.

Makro photo obsahuje id fotky, aktuálně 4.

Takže založil jsem nové makro, postupoval jsem tímto způsobem Dokumentace
a zde ovšem celkově zde končím, protože zde nemohu použít něco jako:

$set->addMacro('photo', function ($node, $writer) {
    return $this->image($node->args);
});

private function image($id){
  return $this->photo->create($id);
}

Je možné použít tento zápis, nebo musím použit Phpwriter ? Při použití writeru se ovšem nedostanu ke komponentám a tak podobně, ne ?

Je vůbec toto správné řešení, takto postupovat ?

David Matějka
Moderator | 6445
+
0
-

Ahoj,

  • makra se nehodí na data uložená v db, ale na latte šablony. pokud bys obsah db nechal vypisovat přes latte, tak tam snadno uděláš bezpečnostní díru
  • makra nemohou rovnou vykonávat tu funkcionalitu, ale musejí vygenerovat php kód, který se vloží do zkompilované šablony a vykoná to, takže musíš použít phpwriter (respektive nějak zformátovat php kód)
  • dostaneš se tam ke všemu, k čemu se dostaneš v běžném latte souboru. takže si můžeš třeba do šablony poslat jako parametr (nebo přes provider) službu, se kterou bude ten vygenerovaný kód pracovat
  • a zpět k tvému problému, nejsnazší je to prohnat přes nějaký replace
TheNEoo
Člen | 75
+
0
-

David Matějka napsal(a):

Pokud správně chápu tak nejlépe to proženu v šabloně filtrem a dál spracuju.