在定义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();
}
}
|
转自乱乱的外贸