V šabloně emailu nefungují helpery

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

Ahoj,

v modelu

	COrderManager :: create ( \CBasket $basket );

potřebuji odeslat email. Aktuálně tam mám:

$template = new Nette\Templating\FileTemplate;
$template -> registerFilter ( new Nette\Latte\Engine );
$template ->setFile( TEMPLATES_DIR . '/email-order.latte' );

a v šabloně

 ...
<td>{$item -> getPrice()|number:2:',',' '}&nbsp;{_}Kč{/_}</td>
 ...

Tento zápis ale vyhodí chybu: Call to undefined method Nette\Templating\FileTemplate::number()

Jak to mám udělat, aby helepry začali fungovat? Nebo nechat odesílat mail model je špatně, mám raději vrátit true a v presenteru při správně uložené objednávce do DB odeslat email? Protože v dokumentaci https://doc.nette.org/cs/mail dole v komentářích je
… nefungují standardní helpery. Napravit se to dá tím, že se místo toho použije:

$template = parent::createTemplate();
$template->setFile('email.latte');

Díky za radu

Edit: Ale raději bych ponechal odesíláni v modelu, kde nemusím řešit z jakého presenteru přišla žádost o změnu stavu objednávky. Některé dělá admin, některé může dělat zákazník. Je lepší mít to na jednom místě v jedné funkci (při nejhoríšm si helepr number zaregistruji ručně..)

Editoval SvvimX (20. 8. 2012 23:39)

Vojtěch Dobeš
Gold Partner | 1316
+
0
-

Lattečko zprovozňuje makra, helpery jsou něco jiného. Doplň si:

$template->registerHelperLoader('Nette\Templating\Helpers::loader');

Důvod, proč to funguje přes to parent volání, je metoda Nette\Application\UI\Control::createTemplate(), kde se tohle volá. Takže získávat instanci šablony tímto způsobem je spíš hack.

SvvimX
Člen | 65
+
0
-

Supr díky moc, nechtělo by to napsat do dokumentace? Přeci nejsem první, kdo styluje maily.. (nebo jsem jen první, kdo si to nenašel sám :-))