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

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介:

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

 

目录
相关文章
|
7月前
|
PHP 数据安全/隐私保护
PHP页面如何实现设置独立访问密码
PHP网页如果需要查看信息必须输入密码,验证后才可显示出内容的代码如何实现? 对某些php页面设置单独的访问密码,如果密码不正确则无法查看内容,相当于对页面进行了一个加密
53 2
PHP页面如何实现设置独立访问密码
移除MagenTo自动发送邮件中网址的多余部分?___store=id
移除MagenTo自动发送邮件中网址的多余部分?___store=id
|
前端开发
前端工作总结208-page值不能修改
前端工作总结208-page值不能修改
69 0
前端工作总结208-page值不能修改
|
前端开发
PageAdmin Cms建站系统如何修改后台登录目录
pageadmin修改后台登录目录的解决办法
644 0
PageAdmin Cms建站系统如何修改后台登录目录
|
前端开发 JavaScript
PageAdmin Cms如何为文章浏览数增加一个基数?
PageAdmin CMS作为一个很有名的网站内容管理系统,在国内拥有庞大的用户群,其中很多时候发新闻时候想给新发布的新闻多加点点击数,有两种方式 1、通过信息发布界面修改,如下图: 如果新闻少这个方法到时可行,但是如果文章很多,会经常忘记修改,下面就说一种最省事的方式,直接修改内容页面模板。
835 0
|
Web App开发 监控 JavaScript
Fundebug支付宝小程序BUG监控插件更新至0.2.0,新增test()方法,报错增加Page数据
摘要: 0.2.0新增fundebug.test()方法,同时报错增加了Page数据。 Fundebug提供专业支付宝小程序BUG监控服务,可以第一时间为您捕获生存环境中小程序的异常、错误或者BUG,及时给开发者发送报警,帮助您快速修复BUG。
1292 0
pageadmin CMS网站制作教程:附属表数据列表调用语法
pageadmin CMS网站建设教程:附属表数据列表调用语法 列表调用语法 Html.SubDataList(参数1,参数2,参数3,参数4)参数说明:注:第一个参数对象中必须定义Table或ParentTable/ParentField属性。
1154 0
PageAdmin CMS网站制作教程:自定义字段如何关联栏目表
PageAdmin CMS网站建设教程:自定义字段如何关联栏目表1、新建自定义字段时候,字段类型选择下拉列表,如下图: 如果是一对一关联,数据类型建议用int,如果是关联多个栏目,下拉表单类型选择多选下拉表单。 2、在设置界面启用数据源,如下图: 这样自定义字段就关联了栏目表。
1379 0