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

 

目录
相关文章
|
Java 容器
【面试题精讲】Java什么是方法的返回值?方法有哪几种类型?
【面试题精讲】Java什么是方法的返回值?方法有哪几种类型?
|
自然语言处理 算法 大数据
Python大数据:jieba分词,词频统计
实验目的 学习如何读取一个文件 学习如何使用DataFrame 学习jieba中文分词组件及停用词处理原理 了解Jupyter Notebook 概念 中文分词 在自然语言处理过程中,为了能更好地处理句子,往往需要把句子拆开分成一个一个的词语,这样能更好的分析句子的特性,这个过程叫就叫做分词。
9555 0
|
人工智能 搜索推荐 算法
智能时代下的伦理困境:AI技术与人类价值的博弈
随着人工智能技术的飞速发展,其在医疗、金融、教育等众多领域的应用日益广泛。然而,伴随技术进步而来的是一系列伦理问题,如隐私泄露、算法偏见和责任归属等。本文将探讨AI技术带来的伦理挑战,分析其背后的原因,并提出相应的解决策略,旨在促进AI技术的健康发展,同时保护人类社会的基本伦理价值。
254 3
|
11月前
|
机器学习/深度学习 Python
机器学习中评估模型性能的重要工具——混淆矩阵和ROC曲线。混淆矩阵通过真正例、假正例等指标展示模型预测情况
本文介绍了机器学习中评估模型性能的重要工具——混淆矩阵和ROC曲线。混淆矩阵通过真正例、假正例等指标展示模型预测情况,而ROC曲线则通过假正率和真正率评估二分类模型性能。文章还提供了Python中的具体实现示例,展示了如何计算和使用这两种工具来评估模型。
424 8
|
12月前
|
NoSQL 关系型数据库 分布式数据库
凭安征信携手阿里云PolarDB和MongoDB,挖掘信用背后的数据金矿
PolarDB和MongoDB共同支撑凭安征信的全量数据需求
|
资源调度 监控 API
资源调度-HPA:基于负载指标自动水平扩容缩容Pod
资源调度-HPA:基于负载指标自动水平扩容缩容Pod
254 0
|
机器学习/深度学习 人工智能 自然语言处理
探索未来:量子计算与人工智能的融合之路
【8月更文挑战第8天】在科技的浪潮中,量子计算和人工智能作为两颗耀眼的星辰,各自拥有改变世界的力量。然而,当这两股力量汇聚时,它们将如何共同塑造未来?本文将带你走进量子计算与人工智能交汇的世界,探讨它们如何相互促进,共同开启技术革新的新篇章。
|
域名解析 监控 安全
【服务器】宝塔面板的使用手册
【服务器】宝塔面板的使用手册
785 0
|
关系型数据库 MySQL Shell
pandas读取mysql并导出为excel
pandas读取mysql并导出为excel
198 0
|
数据可视化 Linux Shell
配置SSH远程登录和免密登录
配置SSH远程登录和免密登录