如何将PHP变量注入我的XML电子邮件模板?
我的模板结构如下:
<Template id="1" name="Registration">
<![CDATA[
<p>Dear $FullName,</p>
<p>We would like to welcome you to oursite. Please find your activation link below, <br />
if you cannot click the link, please copy and paste the link into your browser.</p>
<ul>
<li><strong>Activation Link:</strong> <a href="http://example.com/activate/$actCode/$UserName">http://example.com/activate/$actCode/$UserName</a></li>
</ul>
<p> </p>
<p>Thank you,<br />
~Kevin - our site</p>
]]>
</Template>
我正在使用的代码是:
public function PullEmailTemplate($which, $id){
$file = $which . '.config';
$xml = simplexml_load_file($_SERVER['DOCUMENT_ROOT'] . '/assets/templates/' . $file, NULL, LIBXML_NOCDATA);
$res = $xml->xpath("//Template[@id='" . $id . "']");
return (string)$res[0];
}
并使用它:
$msg = PullEmailTemplate('user', 1);
现在,电子邮件已成功发送,但我得到$FullName
,$ActCode
和$UserName
完全相同......换句话说,它们没有输出他们应该输出的内容是...例如他们应该(按顺序):Kevin
,12345
,myuser@name.com
我该怎么做?
答案 0 :(得分:1)
你这里有一个俄罗斯套娃。外层是XML文档。您已经拥有从中读取内部元素的源代码。内部元素(在CDATA内部)是一个带有$name
占位符的HTML代码段。您现在需要一些替换占位符的源代码而不会破坏HTML。
如果$name
是该模板系统的扩展,您可以使用preg_replace_callback()
来匹配它们。模式(\$[\w\d]+)
应该这样做。