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 中的工作原理相同。
我正在尝试 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 中的工作原理相同。