我正在使用symfony 1.4,smarty和LAMP 我想知道在我的情况下什么是最佳的优化方式。
我的电子邮件模板分为三个部分:
邮件模板代码
~$commonheader
~$body
~footer
我正在使用页眉作为标题页脚和正文,这意味着对于所有这些都将被解析。
我该怎么办不应该一次又一次地解析静态部分
答案 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()