我刚开始在项目中使用smarty模板。我现在很难把这东西弄好。这段代码在我的"。php"文件中工作:
echo $categories[$topics[9]['category_id']]['category_id'];
但是这两种(和其他变体)在我的"。tpl文件:
{$categories[$topics[9].category_id]['category_id']}
{$categories[$topics[9].category_id].category_id}
我犯了什么语法错误,如何让这个工作?
Smarty使用与PHP不同的语法。参见Smarty变量语法。
然而,正如你看到的,Smarty也允许PHP风格的语法。因此,您的PHP代码应该按原样工作,只需删除echo
和末尾的分号,并用大括号替换。
当我有多维和嵌套数组时,有时我喜欢为每个元素分配一个变量,以使其更易于阅读。所以我可以重写变量:
{$categories[$topics[9]['category_id']]['category_id']}
:
{assign var="topic" value=$topics[9].category_id}
{$categories.$topic.category_id}
这将帮助您减少重复并提高可读性。这样,调试起来就更容易了。
Smarty和几乎所有模板引擎一样,都有自己的语法。
据我所知(如果我错了,有人可以纠正我),在Smarty 2中使用一些语法是不可能的,从PHP中编写一些明显的东西是比较困难的。但是现在我们有了Smarty 3.1
在你的问题中,你可能没有将类别和主题都分配给Smarty,所以它无法工作。简单的规则是,你需要在PHP中使用$smarty->assign
构造来分配你想在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中的相同(您只需在开头使用{
,在结尾使用}
而不是echo),就是这样。
你也可以在Smarty中使用更简单的语法:
{$categories[$topics.9.category_id].category_id}
代替使用[..]
,你可以使用.
,但当使用上述其他变量作为索引时,你仍然需要使用[..]
语法