Magento 提供了很多语句(directive)可以把动态信息(dynamic information)传到邮件模板中, 现在我们来逐条解析
所有和语句相关的代码都写在 Mage_Core_Model_Email_Template_Filter 类里
放在model里,然后用 controller 调用
<?phpclass 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

49.邮件模板的传值与调用相关推荐

  1. magento2 邮件模板中直接调用 block文件

    magento2 邮件模板中直接调用 block文件 有些邮件模板我们想直接写在phtml里面 好想法 示例 {{block class="Magento\Framework\View\El ...

  2. php传值到模板,laravel 实现向公共模板中传值 (view composer)

    view composers 与视图有关,用在一个service provider 的boot()函数里,就是让一个view加载的时候,由于view composer的作用,去调用某个函数传个参啊啥的 ...

  3. 使用XSLT制作HTML邮件模板并发送

    之前有写过能发送邮件的小工具,基本做法就是先在代码中写死一封HTML邮件的格式,然后用适当的方法取得外部的几个值填到预设的参数里,最后把合体后的string类型邮件发出去.简单的邮件还好,当内容稍微多 ...

  4. java 邮件模板_Spring Boot 优雅地发送邮件

    最近在项目开发中有向使用者发送报警通知的功能,其中报警媒介就包括邮件,这篇文章就简单介绍了 Spring Boot 如何快速集成实现邮件发送. 通常在实际项目中,也有其他很多地方会用到邮件发送,比如通 ...

  5. java velocity 邮件_邮件集成java mail + 读取邮件模板

    项目做异地登录提醒功能,通过java mail发送邮件.读取邮件模板sendMail.vm文件. 1.邮件发送 import java.io.StringWriter; import java.uti ...

  6. EDM系统看板多邮件模板邮箱配置地址簿​EDM营销推送邮件系统开发

    多用途市场调查推广销售活动EDM营销推送邮件系统开发 EDM营销(Email营销),帮助企业向目标客户发送EDM邮件,建立同目标顾客的沟通渠道,向其直接传达相关信息,是促进销售的一种营销方式. EDM ...

  7. ASP.Net邮件模板编辑与发送邮件的完美实现

    首先明确要求: 1.数据库里存储的是带有标签的,例如:(之所以存储带标签的,是因为可以直接copy出来用html打开进行查看) 2.邮件模板页面编辑展示:(页面富文本编辑器编辑的格式) 3.发送邮件接 ...

  8. 邮件集成java mail + 读取邮件模板

    项目做异地登录提醒功能,通过java mail发送邮件.读取邮件模板sendMail.vm文件. 1.邮件发送 import java.io.StringWriter; import java.uti ...

  9. magento邮件使用php,如何修改Magento后台邮件模板

    今天有个客户问,我的外贸网站准备开始上线运营,发现注册用户,测试下单收到的邮件里面的信息都还是Magento自带的,想要改掉,Magento其实后台提供了非常方便的邮件模板修改: 邮箱设置在Syste ...

  10. EDM邮件模板制作规范小结

    最近在搞EDM,这种页面做起来比较搞,给大家分享下吧 1,模板编码语言选择 模板编码设定与使用的发送软件有关,一般来说,utf-8为较常用的选择,错误的编码会造成用户浏览的时候出现乱码: 2,不要使用 ...

最新文章

  1. 去除菜单项的加速键--‘’符号
  2. ASP.NET命名规范
  3. 【017】◀▶ C#学习(九) - ADO.NET
  4. 基于用户击键特征的身份鉴别系统
  5. python编写学生选课系统程序_python面向对象编程小程序- 选课系统
  6. 在SQL Server中设置最大并行度的不同方法
  7. nagios   IO监控 Error executing iostat command
  8. learning opencv3: 一:overview 打开自己的视频文件加上暂停快进按钮
  9. 2020最新版《神经网络与深度学习》中文版更新完毕,pdf开放下载
  10. 2023厦门大学计算机考研信息汇总
  11. tp无线路由器设置打印服务器,tplink路由器wdr7500怎么设置usb打印服务器
  12. Type mismatch in key from map: expected org.apache.hadoop.io.Text, received org.apache.hadoop.io.Lon
  13. 【数值预报】按时间维度合并/重新生成nc、grib网格数据(按天、小时组织的文件合并成按月组织文件)
  14. 白岩松:不平静,就不会幸福
  15. dos下用move命令移动文件夹
  16. 计算机创建只读用户,如何把电脑的文件夹在局域网共享成只读,别人不能删除和修改?...
  17. 【持续更新】SDN Software Defined Networks(Thomas D.Nadeau Ken Gray)翻译
  18. 程序员远程斗代码!网页版Skype推出内置实时代码编辑器
  19. Centos 7安装Squid代理服务及构建传统代理
  20. android项目管理工具箱,monday可视化项目管理工具

热门文章

  1. AIX查看某个端口被哪个进程占用
  2. C++ 引用计数技术及智能指针的简单实现
  3. Java期末设计(十三周)
  4. 怎样获取用户的真实需求
  5. Java游戏开发框架LGame-0.2.6发布(含PC及Android版)
  6. python学习笔记之hashlib
  7. WannaCry深度详细分析报告 转
  8. 用request.getParameterMap()获得jsp页面元素的集合出现[Ljava.lang.String;@的问题解决
  9. [原]android解析pdf文件muPdf
  10. ModelSim SE 6.5破解