49.邮件模板的传值与调用

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

http://blog.csdn.net/shangxiaoxue/article/details/7835895

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值