如何将这种PHP语法转换为Smarty语法?

时间:2014-07-10 17:27:11

标签: php 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}

我制作了什么语法错误,如何让它发挥作用?

2 个答案:

答案 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}

您可以使用[..]而不是使用.,但在使用上述其他变量作为索引时,您仍然需要使用[..]语法