Перейти к содержимому


Изучаем smarty


  • Вы не можете ответить в тему
Сообщений в теме: 7

#1 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 12 May 2012 - 10:46 AM

assign - передает значение переменной, массива и т.п. в шаблон.

а что такое

hassign - в документации по смарти ничего подобного не нашел. В гугле встречается только на шопцмс или шоп-скпипт, подозреваю что это авторская функция, но саму функцию тоже пока не нашел.

Может подскажете что это за зверь.

Исходя из логики использования, эта функция должна записывать данные в массив $_Session, а может это мне так просто захотелось ))))
Но проблема в том что она не срабатывает там где мне нужно ))

-------------------------------------------------------------------------------------------------------
Вот так всегда, как только озвучишь проблему, сразу решается.

функцию нашел

function hassign ($tpl_var, $value = null){
			$this->assign($tpl_var, html_spchars($value));
   }

Только как оказалось она всего-лишь преобразовывает спецсимволы ((((
  • 1

#2 Salp

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 218 сообщений
Репутация: 54
Продвинутый

Отправлено 27 May 2017 - 08:44 PM

Столкнулся с ней при обновлении версии смарти на 2.6.30. Она миллион раз в коде встречается (((
В новом смарти ее убрали. Интересно, есть ли более красивое решение, чем внести ее в код нового smarty.class.php, там где она была в старом...
  • 0

#3 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 28 May 2017 - 11:24 AM

Добавить как плагин - см.папку smarty/plugins/, там их достаточно для "разобраться".
Только врядли это штатная функция.
Исходя из того, что из этой функции вызывается функция shopCMS - это однозначно левота.
Почему авторы shopCMS добавили ее прямо в код smarty, а не в плагины - хрен его знает. Может и была какая-то причина.
Я смысла в этой функции не вижу (видимо, автор smarty тоже) и никогда не использовал, т.к. она вызывает функцию html_spchars, которая в свою очередь вызывает функцию htmlspecialchars, что можно делать сразу и без всех этих хлопот. Вот эти три строки одинаковы, если $value не массив, а последние две и вообще одинаковы.

$smarty->assign("name", htmlspecialchars($value,ENT_QUOTES));
$smarty->assign("name", html_spchars($value));
$smarty->hassign("name", $value);

Ну и идеологически это не очень хорошо - вызывать из функции библиотеки внутреннюю функцию приложения. Если бы я делал плагин, то перенес бы содержимое функции html_spchars циликом в функцию hassign, чтобы она была самодостаточной в рамках библиотеки.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#4 Salp

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 218 сообщений
Репутация: 54
Продвинутый

Отправлено 28 May 2017 - 12:02 PM

Все конструкции вида:
$smarty->hassign( "return_url", $return_url );

заменил на:
$smarty->assign( "return_url", html_spchars($return_url) );


точнее, в данном случает на:
$smarty->assign( "return_url", htmlspecialchars($return_url) );

Спасибо!
  • 0

#5 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 28 May 2017 - 06:56 PM

точнее, в данном случает на:


$smarty->assign( "return_url", htmlspecialchars($return_url) );

Главное, чтобы не совсем все конструкции с hassign были заменены на "htmlspecialchars", т.к. в ShopCMS есть вызовы hassign, когда аргументом ($value в моем примере) является массив.
На мой взгляд, наиболее оптимальным будет вынесение hassign в smarty-плагины с убиранием вызова внутренней функции ShopCMS. Т.е. с написанием своего кода hassign, использующего штатную PHP-функцию htmlspecialchars и обработкой ситуации, когда аргументом может быть не только строка, но и массив строк. Оно правильно и не сложно.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#6 Salp

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 218 сообщений
Репутация: 54
Продвинутый

Отправлено 14 November 2017 - 05:53 PM

Кто-нибудь пробовал обновить Smarty до версии 3?
Я немного смотрел на изменения - там потребуется доработка шаблонов.
  • 0

#7 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 14 November 2017 - 08:34 PM

Поверхностное чтение позволяет предполагать, что изменения шаблона если и будут, то очень небольшие.
Изменений много, но вовсе не все изменяемые моменты были использованы в шаблонах shopCMS.
Я с ходу (из используемого в штатном шаблоне) увидел только то, что {php} по дефолту не поддерживается. Т.е. надо принудительно включать эту фишку.
на https://www.smarty.net/ есть статья (скорее, это readme) "Smarty 2->3 upgrade notes" - https://raw.githubus..._2_BC_NOTES.txt
Там нет ничего пугающего.

PS. ЗАЧЕМ менять версию Smarty для уже существующего шаблона? Оно ж врядли будет быстрее, т.к. существующий шаблон - очевидно! - не использует полезные возможности Smarty3.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#8 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 15 November 2017 - 09:40 AM

Кто-нибудь пробовал обновить Smarty до версии 3?
Я немного смотрел на изменения - там потребуется доработка шаблонов.


Да обновил уже.

Там нет ничего пугающего.

Статья эта херня. Там не описываются некоторые проблемы, которые возникают при обновлении версии и решение пришлось находить методом "тыка", логики и здравого смысла, т.к. в инете практически ничего нет.
Кроме того после включения поддержки {php} если {/php} находится внутри скриптов js (а в ShopCMS это постоянно) шаблонизатор не видит закрывающего тега {/php} поэтому пришлось переделывать скрпиты и выносить вообще весь из шаблона (что в принципе правильно)

А вот самым главным плюсом в смарти 3 я считаю отмену literal, точнее не отмену а автолитералы, теперь можно смело писать js скрпиты и не париться про фигурные скобки.
Так же добавилось множество вариантов циклов как в php.

З.Ы. Чуть позже выложу инструкцию. После обновления у меня пока что не работает только результаты голосовалки.
  • 0