Použití template vícekrát
- Honza Kuchař
- Člen | 1662
Pokušel jsem se rozesílat hromadnou korespondenci. (šabloně vždy předám jiné data) A narazil jsem na následující problém. Když si vytvořím template dám do něho data a vyrendruji, tak je vše v pořádku. Když to ovšem udělám znovu a vyrendruji ho, tak na mě vyletí chyba. (nastane pouze pokud požívám dědičnost šablon, tzn. prozatím jsem do toho templatu nacpal opravdu celý e-mail i s doctype atd.)
V presenter
u:
/* ... */
foreach($prijemci AS $prijemce){
$template = $this->createTemplate();
$template->data = $prijemce; /* Pole */
$template->odhlasitLink = $this->link("//bulletin:vypovedet",$prijemce->EmailHash);
$template->domuLink = $this->link("//Uvod:");
$template->setFile($dir."index.phtml"); /* $dir - definuje se někde dřív */
// Odešleme informační email
$mailer = new MyMailer;
$mailer->body = $template->__toString();
/* ... */
unset($mailer,$template);
/* ... */
}
Tato hláška se objeví u každé definice block-u. (je zde pouze jeden)
Ale jak je zmíněno výše, první cyklus je v proběhne v pořádku, druhý
a každá další vyhodí toho a na výstupu __toString()
je
prázdno.
Warning: reset() [function.reset]: Passed variable is not an array or object in D:\01Data\htdocs\01Vyvoj\claudie_rev81\www\app\temp\cache-Nette.Template%002a680e2ce5dde15d3b413e5eda0050471.%40mail-doctype.phtml.php on line 31
Warning: call_user_func() [function.call-user-func]: First argument is expected to be a valid callback in D:\01Data\htdocs\01Vyvoj\claudie_rev81\www\app\temp\cache-Nette.Template%002a680e2ce5dde15d3b413e5eda0050471.%40mail-doctype.phtml.php on line 31
Řádek 31 v temp
ech:
<?php call_user_func(reset($_cb->blks['title']), $template->getParams()) ?>
V šabloně:
{extends ../@mail-doctype.phtml}
{block #body}
Obsah
{/block}
@mail-doctype.phtml
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>{block #title}{/block}</title>
{block #head}{/block}
</head>
<body>
{block #body}
<!-- Content of the page -->
{/block}
</body>
</html>
//EDIT: /sloučeno s dalším příspěvkem/
Je to bug nebo feature? (popřípadě, pokud je to feature, jak vykonat výše popsanou věc)
P.S.: Já osobně na tuhle věc nespěchám, ale dozvěděl jsem se tady na fóru, že David připravuje nový Template (resp. prý dokonce jen čeká na commit), tak jenom by to chtělo zkontrolovat, jestli ten nový Template také dělá tuhle věc. ;)
Požito poslední nette (rev. 334 ze dne 5. 6. 2009); PHP 5.2.9
Editoval honzakuchar (8. 6. 2009 19:38)
- Honza Kuchař
- Člen | 1662
Ahoj, četl to někdo? Prosím vyzkoušejete a prosím řekněte mi, jestli
je chyba někde u mě nebo je to tedy chyba v Template
.
Popřípadě nevíte o nějakém triku, jak tuhle chybu obejít? Díky
- Honza Kuchař
- Člen | 1662
Mam. Ale to by nemelo mit vliv. Protože se mi ta template po prvé vygeneruje v pořádku a po každé další vyhodí warning a vrátí prázdný string.
- Honza Kuchař
- Člen | 1662
Mě už teď taky ne. Zdá se to být v pořádku.
//EDIT: testovací kód: (v šabloně je dovjnásobná dědičnost)
for($i=1;$i<=10;$i++){
$template = $this->createTemplate();
$template->setFile(APP_DIR.'/templates/Homepage/mail.phtml');
$template->test = $i;
$mail = new Mail();
$mail
->addTo("yyy@xxx")
->setFrom("yyy@xxx")
->setBody($template)
->send();
$this->flashMessage($i.". mail byl odeslán!");
}
Editoval honzakuchar (21. 9. 2009 23:50)