2

我正在我的应用程序中创建一个邮件服务,该服务在将电子邮件发送给收件人之前将其正文存储在数据库中。

每个邮件正文都是一个部分视图脚本,通过 Zend_View 将必要的参数注入其中。

我想要做的是创建一个“邮件”布局,可以围绕这些部分中的每一个,但我似乎只能获得布局内容或视图内容;不是同时。

我有什么

$scriptPath = 'test_mail';

$view = Zend_Controller_Front::getInstance()->getParam('bootstrap')->getResource('view');
$view->setScriptPath(APPLICATION_PATH . '/modules/mail/views/scripts/partials/');
$view->layout()->setLayout('mail');

var_dump($view->layout()->render($scriptPath));

但是,我收到的只是视图脚本内容。

我的布局看起来像这样:

<table class="mail">
    <!-- Snip -->
    <?php echo $this->layout()->content; ?>
    <!-- Snip -->
</table>

我知道这是可能的。我不想这样做:

$layout->content = $view->render($scriptPath);

我想我在这件事上走错路了。是我需要/没有注册布局控制器插件并且需要以某种方式触发它以获取输出吗?

我想我可以创建一个自定义布局类并自己处理渲染,但想先看看别人怎么说。

有小费吗?谢谢!

4

2 回答 2

1

我正在使用电子邮件布局、用于不同类型电子邮件的多个视图模板以及用于设置所需正文的扩展 Zend_Mail 类:

class MyMail extends Zend_Mail
{    
    public function setBodyView($script, $params = array())
    {
        $layout = new Zend_Layout(array('layoutPath' => APPLICATION_PATH . '/layouts/scripts'));
        $layout->setLayout('email'); // Your email layout
        $view = new Zend_View();
        $view->setScriptPath(APPLICATION_PATH . PATH_TO_MAIL_TEMPLATES);
        foreach ($params as $key => $value) {    
           $view->assign($key, $value);
        }

        $layout->content = $view->render($script . '.phtml');
        $html = $layout->render();
        $this->setBodyHtml($html);
    }
}
于 2013-05-08T15:11:21.787 回答
0

我在我的邮件模板中使用 %mail_body% 模式。

$layout = Zend_Layout::getMvcInstance();
$view = $layout->getView();
$mail_template = $view->render('template.phtml');
$returnYourReadyTemplate = str_replace('%mail_body%', $mail_body, $mail_template);

在 template.phtml 中:

<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body >
<div style="margin:30px 20px 10px 20px">
%mail_body%
</div>
</body>
</html>

希望这对你有帮助!

于 2013-05-08T14:37:07.773 回答