magento后台静态页面如何扩展引用{{}}指令

在定义cms page/block 或者邮件模板时,可以使用{{…}}这样的语句动态执行一些php代码,返回一些内容,代替{{…}}.

指令名 指令参数 作用
media url 得到app/media下的资源。如{{media url=”banner/focus/shopping-cart.jpg”}}将返回http://yourdomain/media/banner/focus
/shopping-cart.jpg
skin url 得到您配置的theme下的资源。如{{skin url=”images/banner/focus/shopping-cart.jpg”}}将返回http://yourdomain/skin/
frontend/default/yourtheme/images/banner/focus/
shopping-cart.jpg
store url 得到url全路经。如{{store url=’about-us’}}将返回http://yourdomain/about-us
var 参数名称 在使用cms/email模板时,可以向它传一些参数,var用在取这些参数值。请参考下面的扩展实例
block type,id 得到我们已定义的好的block里的html内容如:{{block type=”customer/form_login”
name=”customer_form_login” template=”customer/form/login.phtml”}}输出此block的html内容,一般为内容block,不是容器block.
{{block id=”global_footer_links”}}输出静态cms block标示符为global_footer_links的html
layout area,handle block指令只能输出内容block,不能输出容器block,此指令用来输出容器block,使用实例参考下面分析
htmlescape var,allowed_tags 您试一下:{{htmlescape var=”<b>fgfdgfdg</b>”
allowed_tags=’b'}}就知道此指令的作用了

layout 指令的使用

在page.xml中定义如下handle:

01
02
03
04
05
06
07
08
09
10
<layout_test>
<block type=”core/text_list” name=”content” output=”toHtml”>
<block type=”cms/block” name=”cms_test_1″>
<action method=”setBlockId”><block_id>global_footer_links</block_id></action>
</block>
<block type=”cms/block” name=”cms_test_2″>
<action method=”setBlockId”><block_id>global_footer_links</block_id></action>
</block>
</block>
</layout_test>

然后使用:{{layout handle=”layout_test” }}输出block content中的html内容。注意要定义好最顶层的output方法。area默认值为:frontend.

怎么向cms/email模板中传入参数,供var使用

1、向cms page/block中传入参数
输出cms page html内容的是:Mage_Cms_Block_Page
输出cms page html内容的是:Mage_Cms_Block_Block
要向cms page/block中传入参数,必段重写出这两个类,怎样重写block,
重写新的Page Block:

01
02
03
04
05
06
07
08
09
10
11
class Youthor_Cms_Block_Page extends Mage_Cms_Block_Page
{
protected function _toHtml()
{
$processor = Mage::getModel(‘core/email_template_filter’);
$processor ->setVariables( array (‘store’ => Mage::app()->getStore(), ‘test’ => ‘test_value’));
$html = $processor ->filter( $this ->getPage()->getContent());
$html = $this ->getMessagesBlock()->getGroupedHtml() . $html ;
return $html ;
}
}

重新写的Block 的Block代码类似。那么这样就可以在cms page/block中的内容中使用{{var test}}和{{var store.getConfig(‘web/secure/base_link_url’)}} ,相当执行Mage::app()->getStore()->getConfig(‘web/secure /base_link_url’)这样就可以调用到系统配置中的任何配置参数了。

2、向email模板中传入参数
在Mage_Customer_Model_Customer 类中的sendNewAccountEmail方法中有如下一段代码,用于发送email:

1
2
3
4
5
6
7
8
Mage::getModel(‘core/email_template’)
->setDesignConfig( array (‘area’=>’frontend’, ‘store’=> $storeId ))
->sendTransactional(
Mage::getStoreConfig( $types [ $type ]),
Mage::getStoreConfig(self::XML_PATH_REGISTER_EMAIL_IDENTITY),
$this ->getEmail(),
$this ->getName(),
array (‘customer’ => $this , ‘back_url’ => $backUrl ));

第4行代码说明使用那一个邮件模板,第5行说明发送都,6行要发到那个email中,7接收者的姓名。

第8行中就是向模板中传递参数了。那么在邮件模板html中就可以使用{{var customer.name}} 相当执行$customer->getName().
3、向两者共同传入参数
有时一些参数在邮件模板/cms page/block内容中都要使用。那么我们可以重写:Mage_Core_Model_Email_Template_Filter.重写代码如下:

1
2
3
4
5
6
7
class Youthor_Core_Model_Email_Template_Filter extends Mage_Core_Model_Email_Template_Filter
public function __construct()
{
parent::__construct();
$this ->setVariables( array (‘store’ => Mage::app()->getStore(), ‘test’ => ‘test_value’));
}
}

我们在构造方法中加入变量,那么只要实例化的任何对象都可以使用。

扩展自己的指令:
假设需求:在cms page/block都需求这样的指令{{pn id=’6′}} pn(product name)根据产品的id得到产品的名称,重写Mage_Core_Model_Email_Template_Filter

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
class Youthor_Core_Model_Email_Template_Filter extends Mage_Core_Model_Email_Template_Filter
public function __construct()
{
parent::__construct();
$this ->setVariables( array (‘store’ => Mage::app()->getStore(), ‘test’ => ‘test_value’));
}
public function pnDirective( $construction )
{
$params = $this ->_getIncludeParameters( $construction [2]);
$id = $params [ 'id' ];
$product = Mage::Model(‘catalog/product’);
$product ->load( $id );
return $product ->getName();
}
}

 

 

 

转自乱乱的外贸

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章