php – 使用模板的电子邮件功能.包括via ob_start和global vars
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – 使用模板的电子邮件功能.包括via ob_start和global vars,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1866字,纯文字阅读大概需要3分钟。
内容图文
我有一个简单的Email()类.它用于从我的网站发送电子邮件.
<?
Email::send($to, $subj, $msg, $options);
?>
我还有一堆用简单的HTML编写的电子邮件模板,这些模板被一些PHP变量所刺穿.例如. /inc/email/templates/account_created.php:
<p>Dear <?=$name?>,</p>
<p>Thank you for creating an account at <?=$SITE_NAME?>. To login use the link below:</p>
<p><a href="https://<?=$SITE_URL?>/account" target="_blank"><?=$SITE_NAME?>/account</a></p>
为了让PHP变量呈现,我必须将模板包含在我的函数中.但是因为include不返回内容而是直接将它直接发送到输出,我不得不用缓冲函数包装它:
<?
abstract class Email {
public static function send($to, $subj, $msg, $options = array()) {
/* ... */
ob_start();
include '/inc/email/templates/account_created.php';
$msg = ob_get_clean();
/* ... */
}
}
之后我意识到PHP变量没有呈现,因为它们在函数范围内,所以我不得不将模板内部的变量全局化:
<?
global $SITE_NAME, $SITE_URL, $name;
?>
<p>Dear <?=$name?>,</p>
...
所以问题是这是否有更优雅的解决方案?主要是我关注使用ob_start()和global的变通方法.出于某些原因,我觉得很奇怪.或者这几乎是常见做法?
解决方法:
您可以在this answer找到更优雅的问题解决方案.
请注意PHP extract函数用于实例化模板变量的用法.
换句话说,您应该将模板解析逻辑移到电子邮件发送功能之外.例如:
<?php
class SimpleTemplate {
private $_tpl = "";
private $_vars = array();
function __construct($tpl_name) {
$this->_tpl = $tpl_name;
}
public function __set($name, $value) {
$this->_vars[$name] = $value;
}
public function setVars($values) {
$this->_vars = $values;
}
public function parse() {
ob_start();
extract($this->_vars);
include $this->_tpl;
return ob_get_clean();
}
}
abstract class Email {
public static function send($to, $subj, $msg, $options = array()) {
/* ... */
}
}
$tpl = new SimpleTemplate('/inc/email/templates/account_created.php');
$tpl->name = 'Stack Overflow';
$tpl->SITE_NAME = 'site_name';
$tpl->SITE_URL = 'localhost';
Email::send("me@localhost", "Subject", $tpl->parse());
?>
内容总结
以上是互联网集市为您收集整理的php – 使用模板的电子邮件功能.包括via ob_start和global vars全部内容,希望文章能够帮你解决php – 使用模板的电子邮件功能.包括via ob_start和global vars所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。