Domanda

Ho un azione che sta rendendo alcuni contenuti tramite un layout.

Io in realtà voglio inviare questa uscita in una e-mail. Qual è il modo migliore per raggiungere questo obiettivo in Zend Framework?

Lo so che ho bisogno di utilizzare il componente Zend_Mail per inviare l'e-mail, ma sono chiare su come collegare l'uscita della mia azione a Zend_Mail.

Ho fatto qualche lettura sul aiutante azione ContextSwitch, e penso che potrebbe essere opportuno, ma non sono ancora convinto.

Sono ancora nuovo Zend Framework. Sono abituato ad usare tecniche come il buffer di uscita per acquisire l'output, che non credo che sia il modo corretto di fare questo in Zend.

È stato utile?

Soluzione

Da controller:

// do this if you're not using the default layout
$this->_helper->layout()->disableLayout();

$this->view->data = $items;

$htmlString = $this->view->render('foo/bar.phtml');

Se stai facendo questo da una classe che non è un'istanza di Zend_Controller_Action, potrebbe essere necessario creare un'istanza di uno Zend_View prima, per fare questo:

$view = new Zend_view();

// you have to explicitly define the path to the template you're using
$view->setScriptPath(array($pathToTemplate)); 

$view->data = $data;

$htmlString = $view->render('foo/bar.phtml');

Altri suggerimenti

public static function sendMail($data = array(), $template = ''){
    $html = new Zend_View();
    $html->setScriptPath(APPLICATION_PATH . '/modules/default/views');

    // assign valeues
    if(count($data['Assigni'])){
        foreach($data['Assigni'] as $assign){
            $html->assign($assign['key'], $assign['value']);
        }
    }        
    // create mail object
    $mail = new Zend_Mail('utf-8');

    // render view //'scripts/newsletter/emailtemplate.phtml'
    $bodyText = $html->render($template);

    $mail->addTo($data['To']);
    $mail->setSubject($data['Subject']);
    $mail->setFrom($data['From'], $data['FromName']);
    $mail->setBodyHtml($bodyText);
    $mail->send();
}

Quando la spedizione l'azione, si può prendere l'evento in postDispatch () di plug-in, che è possibile aggiungere dinamicamente alla pila da azione desiderata. In che si riceve il contenuto della risposta da

//in action
//...some php code
Zend_Controller_Front::getInstance()->registerPlugin(new My_Plugin());
//in plugin
$htmlCode = $this->_response->getBody();

Non posso dare una risposta super-dettagliata, ma se si vuole la piena potenza (incluso il layout), penso che si desidera scrivere la funzione di posta elettronica come un aiutante d'azione, e inserirlo al gancio di PostDispatch lo Zend_Controller_Action-> dispatch () loop.

http://nethands.de/download/zenddispatch_en.pdf per la piena Zend Framework spedizione Panoramica del processo.

Se non è necessario il layout incluso nel suo sito web e-mail, allora si potrebbe fare questo in molti punti, anche attraverso l'uso di un cambio di contesto, come lei ha ricordato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top