Magento在CMS Page中增加用户信息变量_PHP_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > PHP > Magento在CMS Page中增加用户信息变量

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

 2010/12/8 10:18:26  cgzhang  http://magentosh.javaeye.com  我要评论(0)
  • 摘要:Magento的cms页面和staticblock页面中可以用一些指示符来得到相应的信息,如{{skinurl=".."}}{{mediaurl="..."}}等。在Mage_Cms_Block_Page类的_toHtml方法中可以找到下面的代码:$helper=Mage::helper('cms');$processor=$helper->getPageTemplateProcessor();$html=$processor->filter($this->getPage()
  • 标签:Magento 用户
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页面时,会把上面的指示符替换为当前用户的相应属性。
发表评论
用户名: 匿名