【问题标题】:Smarty - can't insert variable content into javascriptSmarty - 无法将可变内容插入 javascript
【发布时间】:2015-02-25 11:02:08
【问题描述】:

我需要将 Smarty 语法的变量内容插入到 javascript 中,如下所示。该脚本正在检查页面是否从发送给客户的电子邮件中的验证链接打开。

{literal}
<script>
   if ((document.URL).indexOf("validation") > -1) {      

      $('.loginForm').append( 
          "<p class='middleWarningTextP loginMessage'>{/literal}{$VALIDATION_NOTICE->getMessage()}{literal}</p>");

   }
</script>
{/literal}

问题是,这只有在 javascript 条件为真时才有效,否则页面加载错误:&lt;header&gt;&lt;/header&gt; 标记之间什么都没有!因此未加载 css 样式。没看懂,有办法修复吗?

【问题讨论】:

  • Smarty 2 还是 Smarty 3?
  • {literal} 标签没有任何问题(正如一些答案所暗示的那样)。它们使用得当。无需删除它们。我会escape for Javascript $VALIDATION_NOTICE-&gt;getMessage() 返回的值(除非它没有转义,这不是正确的行为,顺便说一句)。除此之外,请检查(或显示)您的 PHP 代码,因为这就是问题所在。
  • 我尝试了带有 {$VALIDATION_NOTICE->getMessage()|escape:'javascript'} 的原始代码,但出现了同样的错误。

标签: javascript syntax smarty


【解决方案1】:

您应该删除 {literal} 标签。 Smarty 不会执行这些标签More info 内的语句。但是,如果在 javascript 中使用花括号,则需要在多行中编写语句:

var test = {
    value: 'test'
}

【讨论】:

  • 我不明白。在我的情况下,我应该准确输入什么内容?
  • 您的代码应如下所示:&lt;script&gt; if ((document.URL).indexOf("validation") &gt; -1) { $('.loginForm').append( "&lt;p class='middleWarningTextP loginMessage'&gt;{$VALIDATION_NOTICE-&gt;getMessage()}&lt;/p&gt;"); }
  • 这段代码不起作用,即使花括号或换行也会导致同样的错误。
【解决方案2】:

如果您使用 Smarty 3

<script>
   if ((document.URL).indexOf("validation") > -1) {      

      $('.loginForm').append( 
          "<p class='middleWarningTextP loginMessage'>{$VALIDATION_NOTICE->getMessage()}{literal}</p>");

   }
</script>

也就是说,只需删除 {literal} 标签

如果你改用 Smarty 2,我认为是这样的

<script>
   if ((document.URL).indexOf("validation") > -1) {ldelim}      

      $('.loginForm').append( 
          "<p class='middleWarningTextP loginMessage'>{$VALIDATION_NOTICE->getMessage()}</p>");

   {rdelim}
</script>

【讨论】:

  • 下一次,提供更好的信息,做一些个人研究,然后自己尝试更多。
【解决方案3】:

问题不在于 {literals} 标记或语法。问题是在某些情况下没有设置 $VALIDATION_NOTICE->getMessage() 变量。因此我添加了这个条件:

{if !is_array($VALIDATION_NOTICE) and $VALIDATION_NOTICE}{$VALIDATION_NOTICE->getMessage()}{/if}

现在它可以正常工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 1970-01-01
    • 2013-05-03
    • 1970-01-01
    相关资源
    最近更新 更多