CrewCut
@CrewCut
Коплю силы на переезд в тропики

Как по-нормальному вытащить smarty переменную в php код?

Второй раз в жизни сталкиваюсь со Smarty, так что мой вопрос может звучать очень глупо. Прошу наставить на путь светлой стороны и подсказать как поступить:

В файле шаблона смарти есть код отвечающий за вывод картинки:

{if $unit_list[i].photo_list.0.file}<a href="/images/catalog/{$unit_list[i].photo_list.0.file}" class="highslide" onclick="return hs.expand(this)"><img src="/images/catalog/small/{$unit_list[i].photo_list.0.file}" title="{$unit_list[i].tip_info.descr} {$unit_list[i].creater_info.descr} {$unit_list[i].descr}" alt="{$unit_list[i].tip_info.descr} {$unit_list[i].creater_info.descr} {$unit_list[i].descr}"/></a>
{else}
<img src="/images/no_photo.jpg" title="{$unit_list[i].tip_info.descr} {$unit_list[i].creater_info.descr} {$unit_list[i].descr}" alt="{$unit_list[i].tip_info.descr} {$unit_list[i].creater_info.descr} {$unit_list[i].descr}"/>
{/if}


Чуть выше я хочу использовать переменную {$unit_list[i].tip_info.descr} в своем php коде, но как её туда загнать не могу понять. Гуглил - нашел только как php-переменную загнать в смарти, а наоборот не нашел. Может вообще не туда копаю?
  • Вопрос задан
  • 443 просмотра
Пригласить эксперта
Ответы на вопрос 1
iCoderXXI
@iCoderXXI
React.JS/FrontEnd engineer
Дело в том, что смарти - это шаблонизатор, т.е. он отвечает за представление (рендеринг) данных перед отдачей в браузер и его работа обычно начинается тогда, когда работа контроллера уже завершена. Именно по этой причине прямых путей передачи чего-либо из смарти обратно в код не предусмотрена, т.к. оно не нужно обычно.

И, по хорошему, нужно придерживаться такого стиля программирования, иначе получится дичайшая каша и разобраться, где и кто поменял состояние будет все сложнее и сложнее, а, стало быть, отлавливать косяки и баги, рано или поздно, станет мега-трудной задачей.

В общем я категорически не рекомендую пытаться что-то передавать из смарти обратно в код, только если это не отрендеренный шаблон, например, письма, который рендерится до завершения работы контроллера. Во всех остальных случаях односторонний поток данных обязателен.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы