Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Libraries > [smarty] Smarty & JawaScript


Автор: grebnev 27.3.2006, 15:51
Есть форма, в к.т. хочу проверять правильность ввода на JawaScript. Форма представляет собой файл шаблона, обрабатываемый библиотекой Smarty. При выполнении скрипта возникает ошибка.
Вопрос: можно-ли использовать JawaScript в шаблонах Smarty, если да, то чево нужно или не нужно делать???

Автор: StachelDraht 27.3.2006, 17:21
вопрос не по теме
что за библиотека Smarty???

Автор: skalex 27.3.2006, 17:40
Что за ошибка возникает ?

StachelDraht, читай тут: http://smarty.php.net/

Автор: smartov 27.3.2006, 17:45
grebnev, можно использовать, но надо обрамлять тегами {literal}

типа

Код

{literal}

<script>
function validate()
{
  if ......
}
</script>

{/literal}

Автор: skalex 27.3.2006, 17:45
И читали ли Вы вот это?

http://smarty.php.net/manual/ru/language.function.literal.php
http://smarty.php.net/manual/ru/language.escaping.php

Автор: Alone 4.5.2006, 13:37
кроме всего прочего не стоит забывать и о том, что тег {literal} прекращает интерпретацию Smarty тегов. Т.е. если между
{literal}
будет находится Smarty тег, то он проигнорируется
{if isset($var)}
ddd
{/if}
в данном случае if - игнорируется
{/literal}

как вариант можно использовать {ldelim} & {rdelim} они заменяют { и } соответственно.

пример:
<script language="javascript" type="text/javascript">

function a(){ldelim}
    var z=0;
    return;
{rdelim}

</script> 

Автор: smartov 4.5.2006, 14:42
Alone, 
Цитата(Alone @  4.5.2006,  12:37 Найти цитируемый пост)
function a(){ldelim}
    var z=0;
    return;
{rdelim}

Представляю себе такие функции
Код

function a(){ldelim}
    if (...){ldelim}
    ...
    {rdelim} else {ldelim}
    ...
    {rdelim}
    var z=0;
    return;
{rdelim}


Крясота неописсуемая ;) А если еще и delim-ы стоят не { тогда вообще зашибись все станет smile
ИМХО этот способ лучше не юзать никогда 

Автор: Alone 4.5.2006, 17:18
Понимаю, но юзать приходится.

Как вариант могу предложить отдельный последовательный вывод парсеных блоков и хтмл кода с яваскриптом. Типа:
Код

$smarty->display("header.tpl");
include("javascript.html");
$smarty->display("content.tpl");
$smarty->display("footer.tpl");


Хотя тоже не лучшее решение...

PS: Не забывайте что это специфическая проблема тех случаев, когда действительно надо смешивать яваскрипт код и теги смарти, и не так уж и часто встречающаяся.
Так что не надо "загонять под плинтус" smile  

Автор: smartov 4.5.2006, 19:00
Alone, хм. Ну а не лучше ли тогда
1.
Код

{literal}
<script>
function myfunc()
{
    alert({/literal}{$variable_from_smarty){literal});
}
</script>
{/literal}


2. Переназначить 
ldelim = {%
rdelim = %}
Тогда о проблеме фигурных скобок можно забыть 

Автор: Ksarien 25.5.2006, 22:49
можно переназначить еще так
{ - <{
} - }> 

Автор: st0neC0ld 4.8.2006, 16:03
я вставляю яваскрипт, как часть контента:

Код

<?php
..skipped..
$smarty = new Smarty();

$js='<script>..skipped..</script>';

$smarty->assign('java1',$js);

$smarty->display('templ.tpl');
?>


Код

<html><head></head><body>
{$java1} text 123 123
</body></html>


или скрипты изменять нет возможности?

Автор: Alone 11.8.2006, 17:45
Ksarien,  не забываем также и о читабельности такого кода...
Ко всему прочему, если к примеру на 77% завершения работы над проектом тебе понадобилось вставить яваскрипт, и ты решил пойти путем замены тэгов, то врят ли кто назовет такой ход умным... smile

На данный момент я для себя решил задачу так:
Если яваскрипт не содержит переменных Smarty (а по логике вещей, он не должен их содержать) то выносим код скрипта в подгружаемый файл и инклудим этот файл в шаблоне.

а-ля: {include file="jscript.js"}

Автор: ewolf 19.8.2006, 00:05
Во-первых, чем не устраивает 

Код


<script>
{literal}

function Foo()
{

}

{/literal}
</script>



?

Во-вторых чем плох такой способ

Код


<script type="text/javascript" src='script.js'></script>



?

И зачем использовать такой ужас, как 

Код

$smarty->display("header.tpl");
include("javascript.html");
$smarty->display("content.tpl");
$smarty->display("footer.tpl");


при котором вся идея шаблонизации уезжает далеко и надолго? smile

Автор: smartov 19.8.2006, 23:03
ewolf, 
Предлагаю тебе читать тему сначала, внимательно и вдумчиво а мессаги только потом постить.

Автор: ST_Falcon 11.11.2006, 19:28
Ksarien, 
Цитата

можно переназначить еще так
{ - <{
} - }>  


ага... прикольно будет выглядеть например:
Код

<a href="<{url}>">text</a>

 smile 

Автор: Ksarien 6.2.2007, 09:29
2 ST Falcon
а что прикольного?? не вижу принципиальной разницы между '{' и '<{'.
юзаю и пока вопросов не возникало. зато не приходится js выносить в отдельный файл.

Автор: euginewm 20.2.2007, 12:10
Получается, что тут как минимум 3 варианта:

1) переназначать фигурные скобки.
2) брать весь скрипт в {literal} {/literal}
3) выносить JS в отдельный файл

кому уж как удобнее.  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)