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


Правила форума

Внимание!!! Если не можете скачать, пожалуйста ознакомьтесь с условиями получения доступа с файлам форума. Правила форума


Изучаем smarty


Сообщений в теме: 4

#1 R.Sergey

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

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

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

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

а что такое

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

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

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

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

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

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

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

#2 Salp

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

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

Отправлено 27 мая 2017 - 20:44

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

#3 badisoft

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

  • VIP
  • 4 980 сообщений
Репутация: 759
Мастер

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

Добавить как плагин - см.папку 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, чтобы она была самодостаточной в рамках библиотеки.
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#4 Salp

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

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

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

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

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

#5 badisoft

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

  • VIP
  • 4 980 сообщений
Репутация: 759
Мастер

Отправлено 28 мая 2017 - 18:56

Цитата

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

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