我创建了一个名为product selector的简单模块。我使用Magento集合来检索和过滤特定产品。要用作过滤器的数据将来自表单后置操作。到目前为止,这是我到目前为止所做的。
我的控制器
public function indexAction() {
$this->loadLayout();
$data['ta'] = $this->getRequest()->getPost('torque-action');
$data['tr'] = $this->getRequest()->getPost('torque-required');
$data['tm'] = $this->getRequest()->getPost('torque-metric');
$this->renderLayout();
}
我的phtml文件
$attr_name = 'product_classification';
$attr_val = $form_data1; //example data only
$metric = $form_data2; //example data only
$metric_val_max = $form_data3; //example data only
$metric_val_min = 1000;
$collection = Mage::getModel('catalog/product')
->getCollection()
->addFieldTofilter($attr_name, array(
'eq' => Mage::getResourceModel('catalog/product')
->getAttribute($attr_name)
->getSource()
->getOptionId($attr_val)
))
->addFieldTofilter($metric, array('lteq' => $metric_val_max))
->addFieldTofilter($metric, array('gteq' => $metric_val_min))
->addAttributeToSelect('*')
->load();
我的问题是,我无法将数据从控制器传递到phtml模板。
我尝试使用Mage :: getSingleton('core / session')
Mage::getSingleton('core/session')->setSomeSessionVar($data);// In the Controller
$data = Mage::getSingleton('core/session')->getSomeSessionVar(); // In the View;
我使用core / session成功检索数据但是,当我试图将它放在集合上时,它变成空白。 $ form_data1 = echo $ data ['ta'];
我也使用Magento注册表,但没有运气。
Mage::register('some_name', $data); //set on controller
$my_var = Mage::registry('some_name'); //Fetch on View
我成功地将表单数据发送到控制器。我还使用固定值通过Magento集合成功获取特定数据。
问题:
如何将数据从控制器传递到phtml模板? 最好的方法是什么?我要创建一个块类吗?
提前致谢。
这些是我的参考资料 http://alanstorm.com/magento_registry_singleton_tutorial https://magento.stackexchange.com/questions/7493/send-data-from-the-controller-to-phtml
答案 0 :(得分:0)
真棒!
将数据从控制器传递到任何块或phtml的方法之一是使用Magento寄存器。
控制器:使用Mage :: register('任何字符串名称',$ data)
设置或注册数据public function indexAction() {
$this->loadLayout();
$data['ta'] = $this->getRequest()->getPost('torque-action');
$data['tr'] = $this->getRequest()->getPost('torque-required');
$data['tm'] = $this->getRequest()->getPost('torque-metric');
Mage::register('t1', $data['ta']);
Mage::register('t2', $data['tr']);
Mage::register('t3', $data['tm']);
$this->renderLayout();
}
Phtml:使用Mage :: registry('你的字符串名')获取注册数据
$_ta = Mage::registry('t1'); //torque action
$_tr_max = Mage::registry('t2'); //torque required
$_tm = Mage::registry('t3'); //torque metric
注意:这实际上很简单,只要小心你的拼写错误。
谢谢!