在智能模板文件中包含PHP文件

时间:2014-07-25 17:53:22

标签: php include smarty whmcs

我完全不知道聪明的模板系统。我想要做的是包含一个php文件来获取.tpl文件中的一些变量(这是一个WHMCS模板)。

我试过了:

{php} include ('file.php'); {/php} //doesn't work

{include_php file='file.php'}  //doesn't work

我也按照this question的回答。仍然无法使其发挥作用。

如何在WHMCS的code.php内加入header.tpl?有什么帮助吗?

仅供参考:tpl和php文件都在同一个目录中,如果这有帮助的话。

3 个答案:

答案 0 :(得分:4)

我们不建议在Smarty中使用php代码。事实上它现在已经被弃用了,你应该尽可能地避免使用这种解决方案,因为它通常没有意义。

但是如果您真的想在Smarty文件中使用PHP,出于某种原因,您需要使用 SmartyBC (Smarty Backward Compatibility)类而不是 Smarty 类。

例如,而不是:

require_once(_PS_SMARTY_DIR_.'Smarty.class.php');
$smarty = new Smarty();

你应该使用:

require_once('SmartyBC.class.php');
$smarty = new SmartyBC();

然后您就可以在Smarty模板文件中使用PHP

修改

如果您遇到问题可能包含它可能是您的目录问题(但是您没有显示任何错误)。

我假设您的模板目录中有文件,并使用以下方法正确设置:

$smarty->setTemplateDir('templates');

如果您在Smarty中简单地显示index.tpl文件并且您将此PHP文件放在同一目录中(在template目录中),则可以在没有路径的情况下包含它。

但是如果你在这个index.tpl文件中包含另一个tpl文件,当你想要包含php文件时,你需要传递这个PHP文件的完整路径,例如:

{include_php 'templates/file.php''}

答案 1 :(得分:3)

你以错误的方式使用Smarty。 Smarty的全部意义是不在您的演示位中包含任何PHP(视图,a.k.a.good ol' HTML)。

所以,无论你在PHP文件中尝试做什么,只要让它发挥它的魔力,但将实际结果发送给Smarty。例如,您是否要显示从数据库中获取的用户表?执行查询,获取结果并将结果(如结果数组)传递给smarty,如下所示:

<?php
$smarty = new Smarty();
$users = $db->query('SELECT * FROM users');

// Assign query results to template file.
$smarty->assign('users', $users);

// Compile and display the template.
$smarty->display('header.tpl');

现在,在智能模板中,您可以像这样访问该数组:

<html>
    {foreach from=$users item=user}
        Username: {$user->username}<br />
    {/foreach}
</html>

我希望你能看到我要去的地方。将您的应用程序逻辑保留在PHP文件中,让模板只关注外观。保持模板尽可能愚蠢!

答案 2 :(得分:1)

通过分配数据,您可以将数据输入Smarty。不推荐嵌入PHP,并且不推荐使用Smarty 3。

PHP:

$smarty->assign('foo','bar');

smarty的:

{$foo}