Ada*_*dam 6 javascript expressionengine
有没有办法强制表达引擎不将大括号内的项目呈现为EE代码?在谷歌图表工具使用包含花括号{} javascript代码,自然EE认为它是一个变量,并试图对其进行渲染.有什么方法吗?
rjb*_*rjb 19
ExpressionEngine的Template Class将花括号解析{}
为模板变量,寻找三种变量:单变量,对变量和条件变量:
// Single Variable
{summary}
// Pair Variable
{category} ... {/category}
// Conditional Variable
{if segment_2 != ""} ... {/if}
Run Code Online (Sandbox Code Playgroud)
CSS中的大括号被认为是一种特殊情况.
例如,可以将以下CSS 放置在模板中的任何位置,并进行智能解析:
<style>
/* All On One Line = Okay */
p { margin-bottom: 1em; }
/* Indented and On Separate Lines = Also Okay */
p em {
font-style: italic;
}
/* EE Variables are Parsed and Replaced */
p.{site_name} {
text-decoration: none;
}
/* EE Code is Allowed and Parsed Appropriately */
{exp:channel:entries channel="channel_name" limit="1"}
li.{url_title} a {
color: #c00;
}
{/exp:channel:entries}
</style>
Run Code Online (Sandbox Code Playgroud)
遗憾的是,JavaScript的处理方式不同,并阻止Advanced Conditionals Parser处理标记中的任何内容.例如,以下带有花括号的 JavaScript 全部在一行中:
<script>var addthis_config = { 'ui_click': true };</script>
Run Code Online (Sandbox Code Playgroud)
将由ExpressionEngine解析为模板变量并呈现为:
<script>var addthis_config = ;</script>
Run Code Online (Sandbox Code Playgroud)
您会注意到从开头开始{
到结束}
大括号结束的所有内容都会被解析和替换!作为解决方法,您可以将大括号放在单独的行上并避免此问题:
<script>
var addthis_config = {
'ui_click': true,
'data_track_clickback': true
};
</script>
Run Code Online (Sandbox Code Playgroud)
如果您编写了一个需要ExpressionEngine值的JavaScript函数,只需将您的大括号放在不同的行上 - 这是一个很好的编码约定,并且对于可读性而言是最佳的:
<script>
$(document).ready(function() {
...
{exp:channel:entries channel="channel_name" limit="1"}
var business_name = '{business_website}';
var business_website = '{business_website}';
{/exp:channel:entries}
...
});
</script>
Run Code Online (Sandbox Code Playgroud)
根据Ben的建议,您可以通过设置隐藏配置变量来更改此行为:$conf['protect_javascript'] = 'n';
ExpressionEngine的隐藏$config['protect_javascript']
实际上做了什么?最好用一个例子来解释 - 让我来说明一下.
鉴于以下代码示例,$config['protect_javascript'] = 'y';
将完全忽略高级条件:
<script>
{if username == "admin"}
Welcome, {username}!
{if:elseif member_id == "2"}
Welcome, {screen_name}!
{if:else}
Welcome, Guest!
{/if}
</script>
Run Code Online (Sandbox Code Playgroud)
这将产生以下输出:
<script>
Welcome, admin!
Welcome, Administrator!
Welcome, Guest!
</script>
Run Code Online (Sandbox Code Playgroud)
然而,当$config['protect_javascript'] = 'n';
来自上面的相同代码片段将允许评估高级条件并将产生:
<script>
Welcome, admin!
</script>
Run Code Online (Sandbox Code Playgroud)
如您所见,区别在于是否在JavaScript代码块中评估高级条件.
无论设置如何,总是在标签中评估简单的条件和模板标签 - 只需确保将花括号放在单独的行上!<script>
$config['protect_javascript']
{}
<script>
// Simple Conditionals Are Unaffected and Always Work
{if segment_2 != ""}
{redirect="404"}
{/if}
</script>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6652 次 |
最近记录: |