Як налагодити змінні в Smarty, як у PHP var_dump ()


164

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

Як я можу вивести / налагодити смарт-змінні, використовуючи щось на зразок 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 (див. відповідь від Кріса) - набагато краще рішення.
thelem

1
З останньою версією Smarty відключення {php}...{/php}тегів, Методи 2 або 3 - кращі варіанти.
Люк Стівенсон

1
Вихід виглядає ще краще, якщо ви оточуєте його тегами <pre>. Наведені вище методи - найкращі.
Олександр Клудт

2
Додайте додатковий параметр print_r (), щоб він повернув висновок smarty, щоб уникнути зайвого відлуння в кінці: {$ var | @print_r: true}
ivanhoe

120

Це має працювати:

{$var|@print_r}

або

{$var|@var_dump}

@ Потрібен для масивів, щоб змусити смарт-запустити модифікатор проти всього, інакше це буде робити для кожного елемента.


8
Набагато краще, ніж обрана відповідь.
Демієн

краще, ніж обрана відповідь? srsly? обрана відповідь має в собі і ці рішення, але просто містить ще одну для старих смарт-версій, тому я не можу зрозуміти, як можна сказати, що це краще, ніж обраний xD
oliiix

24

Для чого це варто, ви можете зробити, {$varname|@debug_print_var}щоб отримати var_dump()вихідний результат для своєї змінної.


Іноді ви не впевнені, що таке змінна, і багато разів @print_rі @var_dumpне працювали (наприклад, у x-cart), але @debug_print_varвихід там був.
skobaljic

Дуже дякую! Ваша відповідь - це єдине, що працює у мене.
Тана

10

просто використовуйте {debug} у своєму .tpl і переглядайте свій вихідний код


3
Приємно. Це фактично створило спливаюче вікно для мене, тому мені не довелося дивитись на джерело. Довелося відключити блокатор спливаючих вікон.
Hobo


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}

просто замініть змінну вашою змінною


1

спробуйте це .... Встановіть $debugging ІСТИНУ в Smarty.


я впевнений, що я це знаю, але мені потрібно це зробити, не
модифікуючи

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.