用于发送电子邮件的Smarty优化

时间:2013-07-03 08:13:11

标签: php symfony1 symfony-1.4 smarty

我正在使用symfony 1.4,smarty和LAMP 我想知道在我的情况下什么是最佳的优化方式。

我的电子邮件模板分为三个部分:

  1. 标题(静态)
  2. 正文(可以是静态的或可变的)
  3. 页脚(非静态,因为它有一个取消订阅链接,我知道传递一个唯一的ID)
  4. 邮件模板代码

    ~$commonheader
    ~$body
    ~footer
    

    我正在使用页眉作为标题页脚和正文,这意味着对于所有这些都将被解析。

    我该怎么办不应该一次又一次地解析静态部分

1 个答案:

答案 0 :(得分:2)

您应该启用智能缓存(请参阅http://www.smarty.net/docsv2/en/caching)并使用insert而不是include。聪明的文档说:

  

可以不缓存模板的某些部分。如果您启用了缓存,则不会缓存{insert}标记。它们将在每次创建页面时动态运行,即使在缓存页面中也是如此。这适用于横幅,民意调查,实时天气,搜索结果,用户反馈区等等。

因此,示例代码将是:

<强> test.php的

<?
require_once("lib/smarty/Smarty.class.php");
$smarty = new Smarty();
$smarty->setTemplateDir( 'templates' );
$smarty->setCompileDir( 'templates_c' );
$smarty->setCacheDir( 'templates_cache' );
$smarty->setConfigDir( 'templates_config' );
$smarty->caching = 1;
$smarty->compile_check = true;

function insert_Body() 
{
    global $smarty;
    ob_start();
    $smarty->display("search.tpl");
    $ret =  ob_get_contents();
    ob_end_clean();
    return $ret;
}

$smarty->display("test.tpl");

<强> test.tpl

<h1>Smarty test</h1>
{insert name="body"}
<hr>

插入标记将查找一个名为“insert_”的函数的php文件,后跟传递的名称。在这个例子中,它是insert_Body();

您还可以将变量传递给函数,例如,要包含的文件名。来自Smarty文档(http://www.smarty.net/docsv2/en/language.function.insert.tpl

{insert name="getBanner" lid=#banner_location_id# sid=#site_id#}
  

Smarty将调用此函数:insert_getBanner(array(“lid”=&gt;   “12345”,“sid”=&gt; “67890”));并显示返回的结果   {insert}标签。

请注意,该值应由函数返回,但不会回显。这就是我使用ob_start()&amp;的原因。 ob_end_clean()with ob_get_contents()