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


164

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

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

Ответы:


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
Ницца. Это фактически создало всплывающее окно для меня, поэтому мне не пришлось смотреть на источник. Пришлось отключить мой блокировщик всплывающих окон, хотя.
Хобо


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


1

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


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

1

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

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

{ppp($variable)} -> debug only

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

{debug}


0

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



0

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.