开发者

How to use a layout for emails in Zend Framework

开发者 https://www.devze.com 2023-01-07 22:57 出处:网络
I would like to use a layout for the emails I\'m sending out. I\'m currently usine Zend Layout for the web pages, but would like to theme my emails as well.

I would like to use a layout for the emails I'm sending out. I'm currently usine Zend Layout for the web pages, but would like to theme my emails as well.

Here is what I've tried.

This is my function that sends the email

    $layout = Zend_Layout::get开发者_开发百科MvcInstance();
    $this->_view->render($template);
    $html = $layout->render('email');
    $this->setBodyHtml($html,$this->getCharset(), $encoding);
    $this->send();

The email layout is simply

    The email content
    <?php echo $this->layout()->content; ?>

When it comes through as an email it just has...

    The email content


You're pretty close in your original method; however, you have to perform a couple extra steps on Zend_Layout to get what you want:

$layout = Zend_Layout::getMvcInstance();
$layout->setLayout('email')
    ->disableLayout();
$layout->content = $this->_view->render($template);
$html = $layout->render();

$this->setBodyHtml($html, $this->getCharSet(), $encoding)->send();

The call to Zend_Layout::disableLayout() prevents direct output of the layout rendering and allows you instead to store the rendered layout in the $html variable. Then, you have to manually store the rendering of the Zend_View template in into the Zend_Layout::content variable. After that, you're set.

You can also use Zend_Layout::setView to set an instance of Zend_View within the layout so that when you render the layout, you can get access to view variables. You could probably also write a view helper to take care of this.


Have you considered just using Zend_View to generate your email template?

0

精彩评论

暂无评论...
验证码 换一张
取 消