Как отлаживать переменные в Smarty как в PHP var_dump ()

164

У меня есть некоторые переменные внутри шаблона, и я не знаю, где я их назначил. Мне нужно знать, что находится внутри конкретной переменной; например, скажем, у меня есть переменная в Smarty называется member. Я пытался, {debug}но это не сработало, и всплывающее окно не отображалось.

Как вывести / отладить переменные smarty, используя что-то вроде var_dump()внутри шаблонов?

streetparade
источник

Ответы:

330

Вы можете использовать {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 (см. ответ Криса) - гораздо лучшее решение.
телем
1
В последней версии Smarty, отключающей {php}...{/php}теги, Методы 2 или 3 являются лучшими вариантами.
Люк Стивенсон
1
Вывод будет выглядеть еще лучше, если вы окружите его тегами <pre>. Методы выше являются лучшими.
Александр Клудт,
2
Добавьте дополнительный параметр в print_r (), чтобы он возвращал вывод в smarty, чтобы избежать дополнительного эха в конце: {$ var | @print_r: true}
ivanhoe
120

Это должно работать:

{$var|@print_r}

или

{$var|@var_dump}

Символ @ необходим для массивов, чтобы заставить smarty запускать модификатор против всего, иначе он делает это для каждого элемента.

Том Хей
источник
8
Намного лучше, чем выбранный ответ.
Дэмиен
лучше, чем выбранный ответ? srsly? в выбранном ответе тоже есть эти решения, но он содержит еще одно для более старых умных версий, поэтому я не могу понять, как вы можете сказать, что он лучше, чем выбранный xD
oliiix
24

Что бы это ни стоило, вы можете сделать, {$varname|@debug_print_var}чтобы получить var_dump()вывод -esque для вашей переменной.

Крис
источник
Иногда вы не уверены , что переменное и много раз @print_rи @var_dumpне работают (в й тележке, например), но @debug_print_varвыход был там.
skobaljic
Спасибо! Ваш ответ - единственное, что работает от меня.
Тана
10

просто используйте {debug} в вашем .tpl и посмотрите на ваш исходный код

Дэвид
источник
3
Ницца. Это фактически создало всплывающее окно для меня, поэтому мне не пришлось смотреть на источник. Пришлось отключить мой блокировщик всплывающих окон, хотя.
Хобо
6

В новом Smarty это:

<pre>
{var_dump($variable)}
</pre>
Александр Закусило
источник
5

Попробуйте с Smarty Session:

{$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 вашей переменной

Bastilol
источник
1

попробуйте это .... Установите $debugging в ИСТИНА в Smarty.

RubyDubee
источник
Конечно, я знаю это, но мне нужно сделать это без изменения основных файлов php
streetparade
1

Для отладки в smarty в prestashop 1.6.x:

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

{ppp($variable)} -> debug only

Другой полезный тег отладки:

{debug}
Aurelink
источник
1

в Smarty V3 вы можете использовать это

{var_dump($variable)}

Awais Fiaz
источник
0

В smarty есть встроенный модификатор, который вы можете использовать с помощью |(оператор одиночного конвейера). Как это {$varname|@print_r}будет печатать значение какprint_r($php_variable)

Пранав Бхатт
источник
0

Я предпочитаю использовать <script>console.log({$varname|@json_encode})</script>для входа в консоль.

Питер ван Сарк
источник
0

{$variable|@debug_print_var nofilter}и вам не нужно добавлять " <pre>" теги

{$variable|var_dump}показать вам больше (но хуже форматирование), потому что debug_print_varне показывает приватную переменную в объекте!

r_a_f
источник