在javascript条件中很聪明..可能


Smarty inside javascript condition ... possible?

我正在尝试有一个javascript条件并将其与聪明的代码混合...这可能吗?

例如:

<script>
if (myjsVar == '2') {
    {some smarty here}
}
</script>

这就是我要做的:

{literal}
<script type="text/javascript">
  myjsVar = '2';
  if (myjsVar == '2') {
    {include file='inc.html'}
}
</script>
{/literal}

目前,此代码不包含任何内容...语法?

您可以使用文本来允许从字面上获取数据块。例如Javascript或CSS

{文字} 标记允许从字面上获取数据块。这是 通常用于 Javascript 或样式表块,其中 {curly 大括号} 会干扰模板分隔符语法。什么 在 {文字}{/文字} 标记中不被解释,但显示 按原样。如果您需要在 {文字} 块中嵌入模板标签, 考虑使用 {ldelim}{rdelim} 来转义各个分隔符 相反。

{literal}
<script type="text/javascript">
if (myjsVar == '2') {
    {include file='inc.html'}
}
</script>
{/literal}

您还可以使用 {ldelim} 和 {rdelim} 用于转义 smartys 模板 delimeter

<script type="text/javascript">
if (myjsVar == '2') {ldelim}
    {include file='inc.html'}
{rdelim}
</script>

Smarty 版本 2 被 Javascript 代码使用的花括号混淆了;它试图将它们解释为开放标签。为了避免此问题,<script>元素的内容通常包含在{literal} Smarty 块中。

缺点是,如果您需要使用 Smarty 函数生成 Javascript 块的片段,则必须关闭 {literal} 块并再次打开它。

在 Smarty 2 中,它的工作原理是这样的:

{assign var="text" value="Hello world!"}
<script>
{literal}
if (myjsVar == '2') {
    alert('{/literal}
    {* Smarty code here *}
    {$text|escape:'javascript'}
    {*
     * End of the Smarty code; start another 'literal' block
     * for the rest of the Javascript code
     *}
{literal}');
}
{/literal}
</script>

生成的文本如下所示:

<script>
if (myjsVar == '2') {
    alert('Hello world!');
}
</script>

Smarty 3不需要将脚本包含在{literal}块中,只要大括号({})被空格字符包围即可。

更新:

或者,如果Javascript块只包含几个大括号和大量Smarty代码,您可以忘记{literal}块并使用{ldelim}{rdelim}进行{}

喜欢这个:

{assign var="text" value="Hello world!"}
<script>
if (myjsVar == '2') {ldelim}
    alert('{$text|escape:'javascript'}');
    {include file="inc.html"}
{rdelim}
</script>

它在 Smarty 版本 2 和 3 中的工作方式相同。

在 Smarty 3 模板中,只要 { 和 } 大括号被空格包围,它们就会被忽略。

您可以在没有文字擒纵机构的情况下使用跟随。

<script>
if (myjsVar == '2') {
    {some smarty here}
}
</script>

以下代码需要文字转义。

{literal}
    function bazzy() {alert('foobar!');}
{/literal}

或者,您也可以像这样更改 Smarty 分隔符:

<?php
$smarty->left_delimiter = '{{';
$smarty->right_delimiter = '}}';

请尝试以下操作:

{literal}
    <script type="text/javascript">
        var image_src = '{/literal}{$image}{literal}';
        alert(image_src);
    </script>
{/literal}

{literal}
<script language="javascript">
function ab()
{
////What you need
}
</script>
{/literal}
<a href="javascript:ab();">Something you need</a> 

如果你想将聪明的变量分配给javascript

{literal}
<script>
if (myjsVar == '2') {
    {/literal}{include file='inc.html'}{literal}
}
</script>
{/literal}