Smarty inside 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}

此时此代码不包含任何...语法?

尝试以下:

{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> 

如果要将 smarty 变量赋值给 javascript

{literal}
<script>

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

</script>
{/literal}

您可以使用 literal 来获取数据块 literally.Eg Javascript 或 CSS

{literal} tags allow a block of data to be taken literally. This is typically used around Javascript or stylesheet blocks where {curly braces} would interfere with the template delimiter syntax. Anything within {literal}{/literal} tags is not interpreted, but displayed as-is. If you need template tags embedded in a {literal} block, consider using {ldelim}{rdelim} to escape the individual delimiters instead.

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

您还可以使用用于转义 smartys 模板分隔符的 {ldelim} and {rdelim}

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

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

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

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

以下代码需要文字擒纵。

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

您也可以选择像这样更改 Smarty 分隔符:

<?php

$smarty->left_delimiter = '{{';
$smarty->right_delimiter = '}}';

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} and {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 中的工作原理相同。