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