我很擅长为我的项目使用智能模板。我很难让这个工作起来。此代码适用于我的" .php"文件:
echo $categories[$topics[9]['category_id']]['category_id'];
但是这些(以及其他变体)在我的" .tpl"文件:
{$categories[$topics[9].category_id]['category_id']}
{$categories[$topics[9].category_id].category_id}
我制作了什么语法错误,如何让它发挥作用?
答案 0 :(得分:1)
Smarty使用与PHP不同的语法。请参阅this page on Smarty variable syntax。
但是,正如您所看到的,Smarty还允许PHP样式语法。因此,您的PHP代码应该按原样运行,只需删除echo
和末尾的分号,并用大括号替换。
当我有多维和嵌套数组时,有时我喜欢为每个元素分配一个变量,以便于阅读。所以我可能会重写你的变量:
{$categories[$topics[9]['category_id']]['category_id']}
成为:
{assign var="topic" value=$topics[9].category_id}
{$categories.$topic.category_id}
这将有助于减少重复次数并提高可读性。随后,它将更容易调试。
答案 1 :(得分:0)
Smarty几乎所有模板引擎都有自己的语法。
据我记得(如果我错了,有人可以纠正我),在Smarty 2中使用某些语法是不可能的,而且从PHP编写一些明显的东西更难。但现在我们有了Smarty 3.1
在你的问题中,你可能还没有为Smarty分配这两个类别和主题,所以它无法运作。简单的规则是您需要使用$smarty->assign
构造从PHP分配要在Smarty中使用的每个变量。
在您的情况下,您可以使用PHP进行简单的操作:
$topics = [];
$topics[9]['category_id'] = 'something';
$categories = [];
$categories['something']['category_id'] = 798897;
$smarty->assign('topics', $topics);
$smarty->assign('categories', $categories);
将PHP中的两个数组分配给Smarty,在Smarty中你可以简单地做到:
{$categories[$topics[9]['category_id']]['category_id']}
如您所见,您显示的这个值几乎与PHP中的相同(而不是回声,您可以在开头简单地使用{
,在结尾使用}
)。' s。 / p>
然而,您可以在Smarty中使用更简单的语法:
{$categories[$topics.9.category_id].category_id}
您可以使用[..]
而不是使用.
,但在使用上述其他变量作为索引时,您仍然需要使用[..]
语法