2010-07-16 17 views
9

Me gustaría crear una clase personalizada que genere un correo electrónico HTML. Quiero que el contenido del correo electrónico provenga de un directorio de "scripts de vista de correo electrónico". Entonces, el concepto será que puedo crear un script de vista de correo electrónico HTML de la misma manera que crearía un script de vista normal (pudiendo especificar variables de clase, etc.), y el script de vista se representaría como el cuerpo HTML del correo electrónico.¿Cómo usar el asistente de vista parcial de Zend Framework fuera de un controlador o vista?

Por ejemplo, en el controlador:

$email = My_Email::specialWelcomeMessage($toEmail, $firstName, $lastName); 
$email->send(); 

La función My_Email::specialWelcomeMessage() haría algo como esto:

public static function specialWelcomeMessage($toEmail, $firstName, $lastName) { 
    $mail = new Zend_Mail(); 
    $mail->setTo($toEmail); 
    $mail->setFrom($this->defaultFrom); 
    $mail->setTextBody($this->view->renderPartial('special-welcome-message.text.phtml', array('firstName'=>$firstName, 'lastName'=>$lastName)); 
} 

Idealmente, sería mejor si pudiera encontrar una manera de hacer que el specialWelcomeMessage() función actuar tan fácil como esto:

public static function specialWelcomeMessage($toEmail, $firstName, $lastName) { 
    $this->firstName = $firstName; 
    $this->lastName = $lastName; 
    //the text body and HTML body would be rendered automatically by being named $functionName.text.phtml and $functionName.html.phtml just like how controller actions/views happen 
} 

Wh ich entonces hacer que el welcome-message.text.phtml especial y las secuencias de comandos especiales-bienvenida-message.html.phtml:

<p>Thank you <?php echo $this->firstName; ?> <?php echo $this->lastName; ?>.</p> 

¿Cómo voy a llamar al ayudante de vista parcial desde fuera de un script de vista o controlador ? ¿Me estoy acercando a esto de la manera correcta? ¿O hay una mejor solución para este problema?

Respuesta

11

¿Qué hay de:

public static function specialWelcomeMessage($toEmail, $firstName, $lastName) { 
    $view = new Zend_View; 
    $view->setScriptPath('pathtoyourview'); 
    $view->firstName = $firstName; 
    $view->lastName = $lastName; 
    $content = $view->render('nameofyourview.phtml'); 
    $mail = new Zend_Mail(); 
    $mail->setTo($toEmail); 
    $mail->setFrom($this->defaultFrom); 
    $mail->setTextBody($content); 
} 

Si usted quiere cambiar dinámicamente la ruta del script con los nombres de acción como usted ha dicho, por qué no utilizar obtener el nombre de la acción o el controlador que está llamando y enviarlo como una variable , o mejor aún, un parámetro predeterminado. Esto ayudará:

http://framework.zend.com/manual/en/zend.controller.request.html

Cuestiones relacionadas