ExpressionEngine 使用 { } 括号渲染 JS 代码
有没有办法强制表达式引擎不将大括号内的项目渲染为 EE 代码? Google 图表工具使用包含大括号 { } 的 javascript 代码,EE 自然会认为它是一个变量并尝试渲染它。有什么办法解决这个问题吗?
Is there a way to force expression engine to NOT render items within curly brackets as EE code?
The google chart tools uses javascript code that contains curly { } brackets, and naturally EE thinks it's a variable and tries to render it. Any way around this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
ExpressionEngine 的模板类将大括号
{}
解析为模板变量,寻找三种变量:单个变量、成对变量和条件变量:CSS 中的大括号被认为是特殊条件。
例如,以下 CSS 可以放置在模板中的任何位置,并且可以进行智能解析:
不幸的是,JavaScript 的处理方式不同,并且会阻止高级条件解析器处理标记中的任何内容。例如,以下 JavaScript 花括号全部在一行:
将由 ExpressionEngine 解析为模板变量并呈现为:
您会注意到一切都从开头
{
并以结束}
大括号结束,并被解析和替换!作为解决方法,您可以将大括号放在单独的行上并避免此问题:如果您编写了一个需要来自 ExpressionEngine 的值的 JavaScript 函数,只需将大括号放在单独的行上 - 这是 良好的编码约定并且可读性最佳:
按照 Ben 的建议,您可以通过设置 隐藏配置变量:
$conf['protect_javascript'] = 'n' ;
ExpressionEngine's Template Class parses curly braces
{}
as template variables, looking for three kinds of variables: single, pair, and conditional variables:Curly braces in CSS are considered a special condition.
For example, the following CSS is acceptable to place anywhere in a template, and gets intelligently parsed:
Unfortunately, JavaScript is handled differently and prevents the Advanced Conditionals Parser from processing anything in tags. For example, the following JavaScript with curly braces all on one line:
Will be parsed by ExpressionEngine as a template variable and rendered as:
You'll notice everything starting at the opening
{
and ending with the closing}
curly brace gets parsed and replaced! As a workaround, you can place the braces on separate lines and avoid this problem:If you've written a JavaScript function that expects values from ExpressionEngine, just place your braces on separate lines — which is a good coding convention and is optimal for readability:
As suggested by Ben, you can change this behavior by setting a Hidden Configuration Variable:
$conf['protect_javascript'] = 'n';
ExpressionEngine 的隐藏
$config['protect_javascript']
实际上是做什么的?也许最好用一个例子来解释——请允许我来说明一下。给定以下代码示例,使用
$config['protect_javascript'] = 'y';
高级条件将完全被忽略:这将产生以下输出:
而当
$config[' protected_javascript'] = 'n';
上面的相同代码片段将允许评估高级条件并生成:如您所见,区别在于是否高级条件在 JavaScript 代码块中进行评估。
简单条件 和 模板标签 始终在
标签中进行评估,无论
$config['protect_javascript']
是什么环境— 只需确保将大括号{}
放在单独的行上即可!What does ExpressionEngine's hidden
$config['protect_javascript']
actually do? It's probably best explained by an example — allow me to illustrate.Given the following code sample, with
$config['protect_javascript'] = 'y';
advanced conditionals will completely be ignored:Which will produce the following output:
Whereas, when
$config['protect_javascript'] = 'n';
the same code snippet from above will allow advanced conditionals to be evaluated and will produce:As you can see, the difference is whether or not advanced conditionals are evaluated in JavaScript code blocks.
Simple conditionals and template tags are always evaluated in
<script>
tags, regardless of the$config['protect_javascript']
setting — just be sure to place your curly braces{}
on separate lines!创建一个全局变量来包含您的 JS 代码。然后只需在模板中使用全局变量:
https://docs.expressionengine。 com/v2/templates/globals/index.html
Create a global variable to contain your JS code. Then just use the global variable in your template:
https://docs.expressionengine.com/v2/templates/globals/index.html
由于某种原因,简单地将大括号放在单独的行上对我来说不起作用(我正在使用 EE v2.1.1)。
但是在大括号之前和之后放置注释行是有效的。例如我的 Google Analytics 代码:
Simply placing curly braces on separate lines didn't work for me for some reason (I'm using EE v2.1.1).
But placing a commented line before and after the braces worked. E.g. for my Google Analytics code: