Magento在CMS Page中增加用户信息变量
Magento的cms页面和static block页面中可以用一些指示符来得到相应的信息,如{{skin url=".."}} {{media url="..."}}等。
在Mage_Cms_Block_Page类的_toHtml方法中可以找到下面的代码:
- $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类中定义了负责解析相应指示符的一些方法:
- 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变量的值为当前用户即可。
- public function __construct(){
- $variables = array ( 'customer' =>Mage::getSingleton( 'customer/session' )->getCustomer());
- $this ->setVariables( $variables );
- }
同时需要新建自定义的helper类,并重写getPageTemplateProcessor方法,返回我们自己的Filter类:
- public function getPageTemplateProcessor()
- {
- return Mage::getModel( 'glscms/template_filter' );
- }
最后,我们重写Mage_Cms_Block_Page类的_toHtml方法:
在config.xml中加入:
- < cms >
- < rewrite >
- < page > Glamour_GlsCms_Block_Cms_Page </ page >
- </ rewrite >
- </ cms >
- 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
本文介绍如何在Magento的CMS页面中动态显示当前登录用户的详细信息,例如电子邮件和姓名。通过创建自定义模块并覆盖默认的模板过滤器,可以实现将用户特定的数据嵌入到静态页面内容中。
1093

被折叠的 条评论
为什么被折叠?



