我完全不知道聪明的模板系统。我想要做的是包含一个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文件都在同一个目录中,如果这有帮助的话。
答案 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}