将PHP变量注入XML电子邮件模板

时间:2014-04-24 22:03:23

标签: php xml templates

如何将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>&nbsp;</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完全相同......换句话说,它们没有输出他们应该输出的内容是...例如他们应该(按顺序):Kevin12345myuser@name.com

我该怎么做?

1 个答案:

答案 0 :(得分:1)

你这里有一个俄罗斯套娃。外层是XML文档。您已经拥有从中读取内部元素的源代码。内部元素(在CDATA内部)是一个带有$name占位符的HTML代码段。您现在需要一些替换占位符的源代码而不会破坏HTML。

如果$name是该模板系统的扩展,您可以使用preg_replace_callback()来匹配它们。模式(\$[\w\d]+)应该这样做。