Для чего нужно заключать некоторые элементы в {literal} {/literal}

Для чего нужно заключать код или текст экранировать в тег {literal} {/literal}..?
Что даёт это и для чего это нужно..?

Пример из скрипта:
{literal}<script type="text/javascript" src="http://vkontakte.ru/js/api/share.js?5" charset="windows-1251"></script>{/literal}

И почему просто допустим не сделать:
<script type="text/javascript" src="http://vkontakte.ru/js/api/share.js?5" charset="windows-1251"></script>

11 комментариев

avatar
avatar
Тэги {literal} позволяют воспринимать блоки данных буквально. Обычно они используются вместе с javascript или таблицами стилей, в которых фигурные скобки конфликтуют с синтаксисом разделителей. Весь текст внутри тэгов {literal}{/literal} не интерпретируется, а выводится «как есть».
© smarty.net

Непонятно только зачем это использовать в вышеприведенном примере, т.к. код все равно не был бы обработан шаблонизатором :)
btw с в smarty3 потребность в экранировке практически отпала :)
avatar
Для чего использовать пока сам не пойму..:) Пример не мой а взял из одного Плагина..:)

Пока не до конца понял про literal но буду разбираться дальше..=)
avatar
а что тут не понятного?
смотри. по умолчанию смарти использует в качестве разделителей фигурные скобки. например {$smarty.function} натыкаясь на них, он будет пытаться обработать код который в них заключен. НО так же фигурные скобки используются и в цсс (.class { style:style }) и в js (пример не приведу), которые шаблонизатор тоже будет пытаться обрабоать, но не сможет, споткнется и выдаст ошибку. Вот для того, чтобы шаблонизатор не спотыкался о код который ему не предназначен и используется теги {literal} :) Они говорят шаблонизатору, что код который внутри тега не для него и не нужно его обрабатывать.
avatar
Спасибо за разъяснения chupakabra, сейчас ещё сам по тестировал и до конца разобрался когда и в каких случаях нужно использовать literal..:)
avatar
А что делать, если нужно использовать разделители smarty внутри javascript-кода в котором есть фигурные скобки?
avatar
простой вам совет — вынесите в переменную перед
avatar
парсер съел.
в переменную перед literal
avatar
Как заставить работать такую конструкцию?
<script language="JavaScript" type="text/javascript">
if (screen.width < 600){
 {$aHtmlHeadFiles.js}}
</script>

Код javascript некорректен, но суть, я думаю ясна
avatar
сравнительно легко, но не красиво конечно же

<script language="JavaScript" type="text/javascript">
{literal}
if (screen.width < 600){
{/literal}
 {$aHtmlHeadFiles.js}
{literal}
}
{/literal}
</script>
avatar
я вас могу уверить что без выходных ситуаций нет
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.