2013-05-08 58 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

相關問題