Podivné chování šablony emailu

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

Momentálně ladím svou aplikaci na hostingu od Forpsi a setkal jsem se se zajímavým problémem. Sem tam potřebuji odeslat nějaký ten email, takže jsem si udělal pomocnou třídu pro zkrácení zápisu. Třída se jmenuje DMail a je potomkem NMail, má metodu pro přiřazení šablony a proměnných šablony a umístěna je v /libs/Nette.Extras/DD/.

<?php
public function init($template, $vars)
{
	if (!is_array($vars))
	{
		throw new InvalidArgumentException('Array expected as method argument.');
	}

	$template = new NTemplate($template);
	foreach ($vars as $key => $value)
	{
		$template->$key = $value;
	}

	// Assign template to the NMail as HTML body
	$this->setHtmlBody($template);

	// While testing we will use SMTP service but on Production server
	// mail function is configured properly
	if (NEnvironment::isProduction())
	{
		$mailer = new NSendmailMailer();
	}
	else
	{
		$config = NEnvironment::getConfig('mail');
		$mailer = new NSmtpMailer($config['host'], $config['port'], $config['transport'], $config['username'], $config['password']);
	}

	// Set mailer
	$this->setMailer($mailer);
}
?>

V aplikaci, kde je třeba odeslat email pak vytvořím nový email, nastavím parametry a odešlu jej:

<?php
$vars = array(
	'title'		=> 'Obnovení hesla účtu',
	'username'	=> $user['username'],
	'password'	=> $password,
);

$mail = new DMail;
$mail->init(MAIL_DIR . '/lostpassword.phtml', $vars); // MAIL_DIR je cesta k šablonám emailových zpráv
$mail->addTo($user['user_email'], $user['username']);
$mail->setFrom('noreply@...', '...');
$mail->setSubject('Obnovení hesla');
$mail->send();
?>

Na localhostu mi vše bezvadně funguje, načte se šablona, přiřadí se jí proměnné z pole $vars, nastaví se Mailer a email se odešle. Na ostrém serveru se email odešle také, ale v šabloně nejsou nahrazeny proměnné:

Předmět: Obnovení hesla

Text:

Vážený uživateli {$username}

V metodě init třídy DMail jsem zkusil dumpnout $vars, na testovacím stroji jsem dostal pole s příslušnými prvky, na ostrém serveru žádný výstup. Dokonce i když v init zavolám die(), tak se na ostrém serveru vůbec nic nestane.

Editoval RiZe (23. 8. 2010 10:09)

Aurielle
Člen | 1281
+
0
-

Zaregistruj Latte filter ručně, tzn:

$template = new NTemplate;
$template->registerFilter(new NLatteFilter);
$template->setFile($template);
RiZe
Člen | 13
+
0
-

Tak problém vyřešen. Ohledně die() a dump() byla chyba na mé straně, přepisoval jsem na serveru špatný soubor. Kde ovšem byla chyba co se týče proměnných šablony opravdu netuším, nahrál jsem znovu všechny soubory a už je to v pořádku.

gmvasek: Ačkoliv jsem to nakonec vyřešil, děkuji za reakci

Editoval RiZe (23. 8. 2010 10:14)