【问题标题】:HTML E-Mail Template with str_replace带有 str_replace 的 HTML 电子邮件模板
【发布时间】:2015-06-22 11:39:11
【问题描述】:

我有一个表单,我用 AngularJs 编写了它。当用户提交 形成一个 php 脚本(用 Slim 制作)被执行,它将表单数据插入数据库并生成一个电子邮件(PHPmailer)。

现在问题来了:

我使用模板中的 file_get_contents 从电子邮件中获取结构,并用 str_replace 替换占位符。

模板:

<h2>User Information</h2>

<table>
  <tbody>
    <tr><th>Firstname:</th><td>%firstname%</td></tr>
    <tr><th>Lastname:</th><td>%lastname%</td></tr>
  </tbody>
</table>
<br>

<h2>Other Information</h2>

<table>
  <tbody>
    <tr><th>Phone:</th><td>%phone%</td></tr>
    <tr><th>E-Mail:</th><td>%email%</td></tr>
    <tr><th>Organisation:</th><td>%organisation%</td></tr>
  </tbody>
</table>

我的问题是并非所有这些字段都是必需的,我想删除 如果没有这些变量(电话、电子邮件、 组织)已设置。

【问题讨论】:

    标签: php html templates phpmailer str-replace


    【解决方案1】:

    您可以“隐藏”表格,而不是删除。

    设置参数,如:

    <table style="display: %display-other-information%">
    

    如果你的属性为空,你必须设置“无”,如果不是,设置“正常”。

    更好的解决方案是创建其他模板,但是,如果您不想要,您可以这样做,就像我说的那样。

    【讨论】:

      【解决方案2】:

      最好创建 2 个不同的模板,带和不带该表,并根据电话、电子邮件和组织的存在呈现其中一个。

      类似:

      function render($firstname, $lastname, $phone = null, $email = null, $organisation = null)
      {
          $templatePath = (is_null($phone) && is_null($email) && is_null($organisation)) ?
          '/path/to/your/template/withought/the/contact/table.html':
          '/path/to/your/template/with/the/contact/table.html';
      
          $templateContent = file_get_contents($templatePath);
      
          $placeHolders = [
             '%firstname%',
              '%lastname%',
              '%phone%',
              '%email%',
              '%organisation%',
          ];
      
          $values = [
              $firstname,
              $lastname,
              $phone,
              $email,
              $organisation,
          ];
      
          $rendered = str_replace($placeHolders, $values, $templateContent);
          return $rendered;
      }
      

      【讨论】:

      • 有更简单的解决方案吗?我不想使用它,因为我必须为这封电子邮件制作大约 8 个模板。 (显示的示例不是我的真实模板:)
      • 我认为这是您三个选项中最简单的一个(我在想)。 1. 有两个模板(建议)。 2.如果需要,有一个模板和电话、电子邮件和组织的部分注入模板(这是另一个巧妙的解决方案) 3.根据电话、电子邮件和组织状态操作单个模板的内容(即不好)。 :)
      • 对于这样的小例子不适用,但是如果您的项目要使用更多模板,您可能需要考虑一些模板引擎,例如TWIG
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-16
      • 1970-01-01
      相关资源
      最近更新 更多