Magento如何将数据从控制器传递到模板?

时间:2014-01-20 06:01:59

标签: php magento templates controller block

我有一个连接到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();

}

2 个答案:

答案 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');