2013-05-08 65 views
2

我在应用程序中创建了邮件服务,该邮件服务在发送给收件人之前已将电子邮件正文存储在数据库中。在启用布局的情况下手动呈现Zend_View

每个邮件正文都是一个局部视图脚本,它具有通过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)); 

然而,所有我得到的是视图脚本。

我的布局看起来像这样:

​​

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

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

我假设我对这件事做错了。是否我需要/没有注册布局控制器插件,并以某种方式需要触发它来获得输出?

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

任何提示?谢谢!

回答

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> 

希望这可以帮助你!

+0

我想你可以只是$视图获得通过=新的Zend_View();这里?基于你给我的上下文我的意思是(所以我可能会错过一些东西)。感谢您的回答! – James 2013-05-09 17:02:26

+0

为什么不呢? :)'$ mail_template'包含模板中的所有html,所以你可以用它来操作。我不确定,但你可以尝试'$ view-> partial('template.phtml',$ your_data_array);'在循环中添加一些参数。 – GeorgeMore 2013-05-15 15:46:03

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); 
    } 
} 
+0

嗯我想看看我是否可以使用布局控制器插件,所以它可以为我设置$ layout->内容(而不是像postDispatch)。这可能是最好的解决方法,否则我猜。感谢您的回答! – James 2013-05-09 17:02:05

相关问题