Magento在CMS Page中增加用户信息变量

本文介绍如何在Magento的CMS页面中动态显示当前登录用户的详细信息,例如电子邮件和姓名。通过创建自定义模块并覆盖默认的模板过滤器,可以实现将用户特定的数据嵌入到静态页面内容中。

Magento在CMS Page中增加用户信息变量

Magento的cms页面和static block页面中可以用一些指示符来得到相应的信息,如{{skin url=".."}} {{media url="..."}}等。

在Mage_Cms_Block_Page类的_toHtml方法中可以找到下面的代码:

  1. $helper =Mage::helper( 'cms' );
  2. $processor = $helper ->getPageTemplateProcessor();
  3. $html = $processor ->filter( $this ->getPage()->getContent());
  4. ...
$helper = Mage::helper('cms'); $processor = $helper->getPageTemplateProcessor(); $html = $processor->filter($this->getPage()->getContent()); ...

先获得负责页面解析的processor对象,然后由processor对象负责对页面中的指示符进行解析和替换工作。


查找cms helper类的getPageTemplateProcessor方法,我们得知processor对象是 Mage_Cms_Model_Template_Filter类的实例。Mage_Cms_Model_Template_Filter继承自 Mage_Core_Model_Email_Template_Filter类,在 Mage_Core_Model_Email_Template_Filter类中定义了负责解析相应指示符的一些方法:

  1. public function blockDirective( $construction )
  2. public function layoutDirective( $construction )
  3. public function varDirective( $construction )
public function blockDirective($construction) public function layoutDirective($construction) public function varDirective($construction)

等,可以看到其实cms filter里面已经定义了var指示符,但是我们在cms页面的content里面插入{{var customer.name}}并不能正确被解析,原因是customer变量的值没有设置。



我们只要新建一个模块,继承Mage_Core_Model_Email_Template_Filter类,并设置customer变量的值为当前用户即可。

  1. public function __construct(){
  2. $variables = array ( 'customer' =>Mage::getSingleton( 'customer/session' )->getCustomer());
  3. $this ->setVariables( $variables );
  4. }
public function __construct(){ $variables = array('customer'=>Mage::getSingleton('customer/session')->getCustomer()); $this->setVariables($variables); }

同时需要新建自定义的helper类,并重写getPageTemplateProcessor方法,返回我们自己的Filter类:

  1. public function getPageTemplateProcessor()
  2. {
  3. return Mage::getModel( 'glscms/template_filter' );
  4. }
public function getPageTemplateProcessor() { return Mage::getModel('glscms/template_filter'); }

最后,我们重写Mage_Cms_Block_Page类的_toHtml方法:

在config.xml中加入:

  1. < cms >
  2. < rewrite >
  3. < page > Glamour_GlsCms_Block_Cms_Page </ page >
  4. </ rewrite >
  5. </ cms >
<cms> <rewrite> <page>Glamour_GlsCms_Block_Cms_Page</page> </rewrite> </cms>

  1. class Glamour_GlsCms_Block_Cms_Page extends Mage_Cms_Block_Page
  2. {
  3. protected function _toHtml()
  4. {
  5. $helper =Mage::helper( 'glscms' );
  6. $html =parent::_toHtml();
  7. if ( $helper ->isEnabled()){
  8. $processor = $helper ->getPageTemplateProcessor();
  9. $html = $processor ->filter(parent::_toHtml());
  10. }
  11. return $html ;
  12. }
  13. }
class Glamour_GlsCms_Block_Cms_Page extends Mage_Cms_Block_Page { protected function _toHtml() { $helper = Mage::helper('glscms'); $html = parent::_toHtml(); if($helper->isEnabled()){ $processor = $helper->getPageTemplateProcessor(); $html = $processor->filter(parent::_toHtml()); } return $html; } }

我们就可以直接在cms内容里加入customer的一些信息了。

如:
{{var customer.email}}
{{var customer.firstname}}

Magento在解析cms页面时,会把上面的指示符替换为当前用户的相应属性。

原文链接地址:http://cgzhang.javaeye.com/blog/825197

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值