Php 忽略一页的Smarty Templates Fetch()

Php 忽略一页的Smarty Templates Fetch(),php,css,templates,smarty,Php,Css,Templates,Smarty,我刚刚收到一个用smarty模板编写的应用程序,所以我不熟悉整个程序的工作原理 因此,我的问题是smarty从应用程序级别的文件中获取模板,因此它会影响站点上的每个页面。我需要一种方法来告诉单个模板忽略应用程序级获取 因此,在应用程序级别是echo$smarty->fetch('layout/main.html.tpl');我只想在一个模板上忽略这一点。有人能帮忙吗?您需要在应用程序中获取模板的任何点添加一些逻辑。问题不在于聪明,而在于应用程序。smarty模板无法干扰呈现它的php,也无法在p

我刚刚收到一个用smarty模板编写的应用程序,所以我不熟悉整个程序的工作原理

因此,我的问题是smarty从应用程序级别的文件中获取模板,因此它会影响站点上的每个页面。我需要一种方法来告诉单个模板忽略应用程序级获取


因此,在应用程序级别是echo$smarty->fetch('layout/main.html.tpl');我只想在一个模板上忽略这一点。有人能帮忙吗?

您需要在应用程序中获取模板的任何点添加一些逻辑。问题不在于聪明,而在于应用程序。smarty模板无法干扰呈现它的php,也无法在php脚本中引入逻辑。

您可以从脚本而不是模板调用$smarty->fetch()。您可以使用逻辑选择不同的模板名称并获取任何合适的模板,因此单个脚本可以轻松调用任何模板

例如

$template = 'error.tpl';
if($conditions =='right')
{
    $template = 'normal.tpl';
}

echo $smarty->fetch("layout/$template");
另外,请注意,您可以使用display()方法,而不是echo with fetch():

这样,您就不需要将模板存储到一个只需输出的变量中

如果是一个简单的例子,一个脚本调用模板“a”,另一个脚本调用模板“B”


在这种情况下,不需要额外的逻辑。

谢谢超现实主义,我能不能在模板上附加一些相关的脚本,有点像rails中的控制器?我在回答的最后加了一个。如果您正在寻找一个更MVC的解决方案,Smarty不会处理这个问题——它是一个模板系统,只是视图。你必须自己提供模型和控制器。有趣的是,我目前正在用rails重写这个网站,我刚刚用这个smarty系统登陆,我不是php开发人员。我不会选择rails系统和smarty模板,那就是。。。古怪的我不是rails开发人员,但它不是内置了自己的模板系统吗?
$smarty->display("layout/$template");
//call in template A
$smarty->display("layout/templateA.tpl");

//call in template B
$smarty->display("layout/templateB.tpl");