我有一个连接到XML Feed的控制器操作,并从第三方应用程序中提取一些数据。 现在我希望这些数据能够在我的Magento产品页面中显示。控制器操作被父模板文件调用为ajax调用,并且数据必须呈现到其中一个子模板中。
我知道如果我有一个可以与Block交谈的模型,那么数据可以在模板级别获得。但不确定如何通过控制器操作完成此操作。到目前为止,我设法将数据转储到子模板,而不是完全呈现的HTML。 (我不想在控制器中构建HTML并将其转储到模板中,因为我认为这是不好的做法)
以下是我的控制器操作和getProduct
public function getFeedbackAction()
{
$url = 'http://3rd-party-domain/some-module/xmlfeed.php';
$xml_feed = simplexml_load_file($url);
foreach ($xml_feed as $key=>$feedback){
if ($key == "PRODUCT") {
$this->feedbacks[] = $feedback;
}
}
if ($this->getRequest()->getParam('type') == 'product'){
$sku = $this->getRequest()->getParam('sku');
if ( $sku != ""){
$this->getProductReviews($sku);
}
}
}
private function getProductReviews($sku){
foreach ($this->feedbacks as $feedback){
if ($feedback->PRODUCTCODE == $sku){
$productreviews[] = $feedback;
}
}
Zend_Debug::dump($productreviews);
//echo $this->getLayout()->createBlock('mymodule/reviews')->setTemplate('mymodule/reviews.phtml')->toHtml();
}
答案 0 :(得分:13)
除了asif的回答,我们也可以这样做:
在控制器中:
$layout = $this->getLayout();
$block = $layout->getBlock('block_name');
$block->setFeedback($feedback); //magic method
然后在phtml文件中:
$feedback = $this->getFeedback();
答案 1 :(得分:4)
你可以使用
Mage::register('feedback', $feedback);
这些数据将可用于该操作范围内的模板,您可以将该数据作为模板获取...
Mage::registry('feedback');