【问题标题】:Prestashop, in .tpl, how to use smarty variable in <script content?Prestashop,在 .tpl 中,如何在 <script 内容中使用 smarty 变量?
【发布时间】:2015-03-01 16:57:09
【问题描述】:

我希望在我的 javascript 中使用 smarty 变量,但我不能这样做 >

我当前的代码但产生错误 =>

<script type="text/javascript">
var title = document.title;
var height1 = {$mysmartyvariable1};
var height2 = {$mysmartyvariable2};
if (title == 'index')
{ var height = height1; }
else { var height = height2; };

$(document).on("scroll",function(){
    if($(document).scrollTop()>height){
        $("#nav").removeClass("navfull").addClass("navsmall");
    } else{
        $("#nav").removeClass("navsmall").addClass("navfull");
    }
});
</script>

那么我如何在这个脚本部分添加 mysmartyvariable1 呢?

#

感谢 Allan Nienhuis 正确的代码是:

<script type="text/javascript">
var title = document.title;
var height1 = {$mysmartyvariable1};
var height2 = {$mysmartyvariable2};
{literal}
if (title == 'index')
{ var height = height1; }
else { var height = height2; };

$(document).on("scroll",function(){
    if($(document).scrollTop()>height){
        $("#nav").removeClass("navfull").addClass("navsmall");
    } else{
        $("#nav").removeClass("navsmall").addClass("navfull");
    }
});
{/literal}
</script>

【问题讨论】:

    标签: javascript smarty prestashop


    【解决方案1】:

    我发现您的代码存在两个问题。

    1) 你没有在 $mysmartyvariable2 周围加上 {} 括号。这会将“未定义”分配给 height2,因为 smarty 根本不会处理此变量,并且名为 $mysmartyvariable2 的 javascript 变量未定义。

    2) 在嵌入使用 { } 字符的 javascript 时,您需要使用 {literal} {/literal} 标签,这样 smarty 不会尝试将 javascript {} 字符解释为 smarty 语法。

    http://www.smarty.net/docsv2/en/language.function.literal

    在这种情况下,您可以在 height2 声明/赋值之后开始 {literal} 标记,因为前面的行应该由 smarty 解释,但下面的行不应该由 smarty 解释。

    var height2 = {$mysmartyvariable2};
    {literal}
    if (title == 'index') 
      { //code here 
      }
    
    // other code
    {/literal}
    </script>
    

    【讨论】:

    • 谢谢,我更正了 mysmartyvariable2 的括号,这在我的最终代码中不存在。试过了,但不起作用......你建议我使用“height2 = {mysmartyvariable2};” ?那不是“var height2 = {mysmartyvariable2};” ?
    • 关于 {literal} 我尝试在我的代码的第一个 { 之前添加它们,所以只需在我的 var 行和脚本标记之前的结束 {/literal} 之后,但没有成功跨度>
    • 对不起,我错过了示例中的 $。我会修正这个例子。但是,只要您的模板文件中有 { } 字符需要呈现到输出 html 中,则绝对需要 {literal} 和 {/literal}。请发布您的尝试文本,以便我们帮助调试它。
    • 另外,请发布您遇到的实际错误 - 除了说“但产生错误”之外,您从不提及错误的详细信息
    • 错误是所有 javascript 都在我的页面中卸载。在您更正后,我修改了代码,没关系:)感谢您的宝贵帮助。
    猜你喜欢
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 2019-10-10
    • 2016-12-12
    • 2021-09-08
    相关资源
    最近更新 更多