2011-06-29 11 views
6

EEコードとして中括弧内の項目を表現しないように式エンジンを強制する方法はありますか? google chart toolsは、中括弧{}を含むjavascriptコードを使用しています。自然にEEはそれを変数と考え、それをレンダリングしようとします。これはどうですか?シングル、ペア、および条件変数:ExpressionEngine {}を使用したJSコードのレンダリング

+0

例を挙げることはできますか? –

答えて

19

ExpressionEngineののテンプレートクラス 3つの変数の種類を探して、中括弧template variablesとして{}を解析し、CSSで

// Single Variable 
{summary} 

// Pair Variable 
{category} ... {/category} 

// Conditional Variable 
{if segment_2 != ""} ... {/if} 

中括弧は特別な条件と考えられています。

たとえば、以下の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> 

は残念ながら、JavaScriptは異なる方法で処理し、タグには何も処理することから高度な条件文パーサを防止しています。例えば、中括弧ではJavaScript以下の1行上のすべて:

<script>var addthis_config = { 'ui_click': true };</script> 

は、テンプレート変数としてExpressionEngineので解析され、としてレンダリング:

<script>var addthis_config = ;</script> 

あなたはすべてがから始まるわかります開幕{と終了}の中括弧が解析されて置き換えられます。回避策として、あなたは別々の行に括弧を配置し、この問題を回避することができます

<script> 
    var addthis_config = { 
     'ui_click': true, 
     'data_track_clickback': true 
    }; 
</script> 

あなたはExpressionEngineのから値を期待するJavaScript関数を書いた場合は、単にgood coding conventionある別々の行—であなたの中括弧を置きますそしてoptimal for readabilityです:

<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> 

ベンによって示唆されるように、あなたがHidden Configuration Variableを設定することにより、この動作を変更することができます:$conf['protect_javascript'] = 'n';

+0

どのような素晴らしい応答。これはちょうど私がいくつかのjavascriptのものとEEに関して探していた情報でした。 –

8

Expressを何ionEngineの隠された$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> 

次出力生成されるどの:一方

<script> 
    Welcome, admin! 

    Welcome, Administrator! 

    Welcome, Guest! 
</script> 

$config['protect_javascript'] = 'n';上記から同じコードスニペットをは、アドバンスドコンディションの評価をとすることができます。

あなたが見ることができるように3210、違いが高度な条件文は、JavaScriptのコードブロックで評価されているかどうかではありません。

Simple conditionalstemplate tagsは関係なく、常に—を設定$config['protect_javascript']の、<script>タグで評価されているだけで別の行に、あなたの中括弧{}を置くようにしてください!単純に別々の行に中括弧を置く

<script> 
    // Simple Conditionals Are Unaffected and Always Work 
    {if segment_2 != ""} 
     {redirect="404"} 
    {/if} 
</script> 
-1

は(私はEE 2.1.1を使用しています)何らかの理由で私のために動作しませんでした。 しかし、中括弧の前後にコメント行を配置しています。例えば。 Google Analyticsコードの場合:

<script> 
(function(i,s,o,g,r,a,m) 
// 
{ 
// 
i['GoogleAnalyticsObject']=r;i[r]=i[r]||function() 
// 
{ 
// 
(i[r].q=i[r].q||[]).push(arguments) 
// 
} 
// 
,i[r].l=1*new Date();a=s.createElement(o), 
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) 
// 
} 
// 
)(window,document,'script','//www.google-analytics.com/analytics.js','ga'); 
ga('create', 'UA-3636230-46', 'auto'); 
ga('send', 'pageview'); 
</script> 
+0

これはうまくいくかもしれませんが、なぜ**動作しているのか分からず、問題を完全に解決するわけではありません。どのように、そしてなぜそれが働くのかが明確になるまでは、この時点ではコメントとしては良いかもしれません。 –

関連する問題