Magento 提供了很多语句(directive)可以把动态信息(dynamic information)传到邮件模板中, 现在我们来逐条解析
所有和语句相关的代码都写在 Mage_Core_Model_Email_Template_Filter 类里
放在model里,然后用 controller 调用
<?php
class Www_Email_Model_Email extends Mage_Core_Model_Abstract
{
const XML_PATH_TEST_EMAIL = 'customer/account_share/customer_template';
const XML_PATH_TEST_EMAIL_IDENTITY = 'customer/account_share/customer_identity';
public function sendTestEmail()
{
//die(__FILE__);
$to = array('184200157@qq.com');
$name = 'wjh';
$translate = Mage::getSingleton('core/translate');
$template = Mage::getStoreConfig(self::XML_PATH_TEST_EMAIL);
//var_dump($template);die;
$sender = Array('name' => 'Customer Service',
'email' => 'burtgai@163.com');
/* @var $translate Mage_Core_Model_Translate */
$translate->setTranslateInline(false);
$storeId = Mage::app()->getStore()->getId();
Mage::getModel('core/email_template')
->setDesignConfig(array('area' => 'frontend', 'store' => $storeId))
->sendTransactional(
$template,
$sender,
$to,
$name,
// array('object'=>new Varien_Object($_ENV))
//array('variable1'=>'Shawn','object' => $this,'html'=>'Shawn<b>test</b>')
array('variable1'=>'Shawn','object' => 'wjh','html'=>'Shawn<b>test</b>')
);
$translate->setTranslateInline(true);
}
public function gethelloText()
{
return 'This is my text';
}
public function getName($show,$name)
{
if ($show) {
return 'My Name is '.$name;
}
return 'My Name is Shawn';
}
public function shouldShow()
{
return true;
}
public function shouldShow2()
{
return false;
}
}
系统会根据StoreId的值调用locale下的不同邮件模板。默认调用app/locale/en_US/template/email下的邮件模板
var 语句
这是用来使用接收到的变量值, 语法如下:
类型一 变量
{{var variable1}}
用来接收到在 sendTransactional() 方法中的 array(‘variable1′=>’Shawn’)
这样就可以将 Shawn 输出到邮件模板中
类型二 对象
{{var object.object_text}} //下划线代表大写
通过传过来的 object 对象来调用 getObjectText() 方法, object 对象已经被如下数组传递到模板中
array('variable1'=>'Shawn','object' => $this)
在调用 sendTransactional() 方法的类中, 创建一个新的方法 getObjectText()
该方法所返回的值会显示在邮件中, 如下:
public function getObjectText()
{
return 'This is my text';
}
关于上述代码的一个扩展, 假设我们有许多变量需要传到邮件模板中, 例如通过 $_POST 传递, 语法如下:
array('object'=>new Varien_Object($_POST))
在我们的邮件模板中可以以如下方式接收
{{var object.post_var1}}
类型三 方法 对象.方法名(参数)
{{var object.getName(true,'test')}}
通过这个我们可以访问到 getName() 方法, 当然 object 对象已经通过 Array() 接收到
同样的, 在同一个类中创建方法 getName() , 其值将会显示在邮件中
public function getName($show,$name)
{
if ($show) {
return 'My Name is '.$name;
}
return 'My Name is Shawn';
}
depends 语句
depends 基本上就是半个 if 语句,没有 else, 语法如下:
{{depend object.shouldShow()}}
Is Showing
{{/depend}}
shouldShow() 是在同一个类文件中的方法。 在 depend 后面, 可以调用方法或变量, 就像上面的类型三
例: {{depend object.can_display}} , {{depend display}}
if 语句
If 语句就是 depends 的升级, 带有原来自身的 else, 语法如下:
{{if object.shouldShow2()}}
Is Inside true
{{else}}
Is Inside false
{{/if}}
block 语句
它用来在邮件模板里直接引入整个 block, 语法如下:
{{block type='email/mail' object=$object}}
在这里我们调用了 block 中的类 ’email/mail’, 并且传给 block 一个变量 $object
layout 语句
layout 语句用来在邮件模板里加载整个 layout 结构。 在 block 里, 我们只可以直接加载单个 block, 但如果你想加载多个 block 和 child blocks 时, 你需要使用 layout 语句
{{layout handle="email_test_layout" object=$object area='frontend'}}
在我们的 layout 文件里加入如下代码:
<email_test_layout>
<block type='core/template' name='parent' template='email/testblock.phtml'>
<block type='core/template' template='email/testblock2.phtml' name='child' ></block>
</block>
</email_test_layout>
然后在我们的 email/testblock.phtml 文件里写入:
echo 'Test BLock 1';
echo $this->getChildHtml('child');
echo $this->getObject()->getName();
email/testblock2.phtml 文件里写入:
echo 'Test Block 2';
这样你就可以看出, 我们通过 layout 语句加载了复杂的 blocks
skin 语句
skin 语句用来获取在 skin 文件下的图片或文件路径
{{skin url='images/logo_email.gif'}}
输出内容: http://127.0.0.1/magento/skin/frontend/default/default/images/logo_email.gif
media 语句
media 语句用来获取在 media 文件下的文件路径
{{media url=’Untitled.png’}}
输出内容: http://127.0.0.1/magento/media/Untitled.png
store 语句
store 语句用来获取一个 store 内 controller 的路径
{{store url='email' _query='k=1' test=213}}
输出内容: http://127.0.0.1/magento/index.php/email/index/index/test/213/?k=1
htmlescape 语句
顾名思义, 用来规避 html 代码
{{htmlescape var=$html}}
config 语句
用来获取 System -> Configuration 中的信息
{{config path='trans_email/ident_support/email'}}
custom variable 语句
用来获取任何自定义变量(如果你有创建的话), 你也可以在 System -> Custom Variables 里创建自己的变量, 这是在 magento 1.4 之后才新增的功能
{{customvar code="test123"}}
这个将返回 code 为 “test123” 的 html 或 纯文本(plain text)格式的内容, 纯文本还是 html 取决于你的邮件类型
protocol 语句
{{protocol}}
这个将根据当然站点的 URL 来显示 http 或者 https
设置邮件主题
你可以在邮件模板的头部写入如下:
<!--@subject 欢迎, {{var customer.name}}! @-->
设置邮件的 css 样式
你可以写在 subject 下面:
PHP
<!--@styles
body,td { color:#2f2f2f;}
@-->
<!--@styles
body,td { color:#2f2f2f;}
@-->
http://www.sunzhenghua.com/magento-advanced-email-template-with-params