magento 消息机制和错误信息传递

一个最直接的需求来源是:页面A抛出错误或者提示信息,当转向页面B时能够将其显示。


一般来说有两种方案可以处理此问题:


1. b.php?error_message=xxxxx 或者b.php?err_no=121,对于后者,系统制作一个错误号列表对应的信息,然后对应显示


2. 使用session:将页面A出错或者提示信息放到session某个约定的变量中,然后在目标页面检索并输出。


Magento是采用后者的处理方式。Magento将session分成几组,便于分类管理。如:
Mage::getSingleton('core/session');
Mage::getSingleton('catalog/session');
等等


如要在页面A抛出信息,代码如下:

Mage::getSingleton('catalog/session')->addError($this->__('Please input the valid verify code.'));  

在目标页面的Block(最好是页面公共部分的Block)的phtml中使用

<?php echo $this->getMessagesBlock()->getGroupedHtml() ?> 

即可接收显示,然后自动将错误清除。

不过,这里的问题在于$this->getMessagesBlock()->getGroupedHtml()默认只输出core/session抛出的错误信息。如果想输出catalog/session和customer/session抛出的信息,必须在目标网页的controller文件的方法中使用_initLayoutMessages方法,如

$this->loadLayout();  
$this->_initLayoutMessages('catalog/session');  
$this->_initLayoutMessages('customer/session');  
$this->renderLayout();

注意:$this->_initLayoutMessages('xxx/session');必须在loadLayout方法调用之后才能调用,否则不生效


有的时候我们发现<?php echo $this->getMessagesBlock()->getGroupedHtml() ?>  会不起作用即使使用了$this->_initLayoutMessages(),这时候就考虑多试几个session,如

Mage::getSingleton(“customer/session”)->addError($this->__('Please input the valid verify code.'));  

Mage::getSingleton(“core/session”)->addError($this->__('Please input the valid verify code.'));  

Mage::getSingleton(“checkout/session”)->addError($this->__('Please input the valid verify code.'));  


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值