Magento как передать данные с контроллера в шаблон?

У меня есть действие контроллера, которое подключается к XML-каналу и приносит некоторые данные из стороннего приложения. Теперь я хочу, чтобы эти данные были представлены на моей странице продукта в Magento. Действие контроллера вызывается как вызов ajax родительским файлом шаблона, и данные должны отображаться в одном из дочерних шаблонов.

Я знаю, если бы у меня была модель, которая может разговаривать с блоком, а затем данные могут быть доступны на уровне шаблона. Но не уверен, как это можно сделать через контроллер действие. До сих пор мне удалось сбросить данные в дочерний шаблон, но не полностью отображаемый 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 ответов


в дополнение к ответу asif, мы также можем сделать:

в контроллере:

$layout = $this->getLayout();
$block = $layout->getBlock('block_name');
$block->setFeedback($feedback); //magic method

а затем в файле phtml:

$feedback = $this->getFeedback();

можно использовать

Mage::register('feedback', $feedback);

эти данные будут доступны шаблону, который входит в область действия, и вы можете получить эти данные в шаблоне как ...

Mage::registry('feedback');