如何将PHP语法转换为Smarty语法



我刚开始在项目中使用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}

代替使用[..],你可以使用.,但当使用上述其他变量作为索引时,你仍然需要使用[..]语法

最新更新