如何像在PHP中一样在Smarty中调试变量var_dump()


163

我在模板中有一些变量,但我不知道在哪里分配它们。我需要知道特定变量中的内容。例如,假设我在smarty中有一个名为的变量member。我尝试过,{debug}但是没有用,并且没有显示弹出窗口。

如何使用var_dump()模板内部的内容输出/调试smarty变量?

Answers:


328

您可以使用{php}标签

方法1(在Smarty 3.1或更高版本中不起作用):

{php}

$var =
$this->get_template_vars('var');
var_dump($var);

{/php}

方法2:

{$var|@print_r}

方法3:

{$var|@var_dump}

求助于php标签不是一个好习惯,理想情况下,出于安全原因,应该禁用它们。@debug_print_var(请参阅克里斯的答案)是一个更好的解决方案。
thelem

1
通过最新版本的Smarty禁用{php}...{/php}标签,方法2或3是更好的选择。
卢克·史蒂文森

1
如果用<pre>标签将其包围,则输出看起来会更好。上面的方法是最好的。
亚历山大·克鲁德

2
向print_r()添加一个附加参数,以使其返回到smarty输出,以避免在结尾处产生额外的回声:{$ var | @print_r:true}
ivanhoe 2014年

120

这应该工作:

{$var|@print_r}

要么

{$var|@var_dump}

数组需要@才能使修改器针对整个对象运行,否则它将对每个元素执行。


8
比选择的答案好得多。
达米安

比选择的答案好吗?不好意思 选择的答案中也包含这些解决方案,但仅包含较旧的smarty版本中的一个,因此我无法真正
得知

24

对于它的价值,您可以为变量{$varname|@debug_print_var}获取var_dump()-esque输出。


有时候,你是不知道的变量是,很多时候@print_r@var_dump没有工作(在X车为例),但@debug_print_var产量在那里。
skobaljic

非常感谢!您的答案是唯一对我有用的答案。
塔娜

10

只需在.tpl中使用{debug}并查看您的源代码


3
真好 这实际上为我创建了一个弹出窗口,因此我不必查看源代码。不得不禁用我的弹出窗口阻止程序。
Hobo 2012年


5

试用Smarty会话:

{$smarty.session|@debug_print_var}

要么

{$smarty.session|@print_r}

要美化您的输出,请在<pre> </pre>标签之间使用它


2

如果您想要更漂亮的东西,我会建议

{"<?php\n\$data =\n"|@cat:{$yourvariable|@var_export:true|@cat:";\n?>"}|@highlight_string:true}

只需更换yourvariable通过您的变量



1

要在prestashop 1.6.x中进行smarty调试:

{ddd($variable)} -> debug and die

{ppp($variable)} -> debug only

另一个有用的调试标记:

{debug}



0

我更喜欢使用<script>console.log({$varname|@json_encode})</script>登录到控制台。


0

{$variable|@debug_print_var nofilter}而且您不需要添加“ <pre>”标签

{$variable|var_dump}向您显示更多(但格式更糟),因为debug_print_var未在对象中显示私有变量!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.