2017-10-19 4 views
0

私はサイドバーにいくつかのウィジェットを持っています。 私はこれらのウィジェットのいくつかが自分のページの一部に表示されることを望んでいません。他のすべてを除外する代わりに1つのウィジェットを含める

これよりも簡単に書く方法はわかりません。私には多くの例外があるので、このように書くことは、行がいっぱいの本です。 「このページには、このページやこれらのウィジェットを除外する」の代わりに、「このページにはこのウィジェットのみを含める」という簡単な記述が必要です。

<%if(!(page.layout=="alpha" && (name=="w1" || name=="w2" || name=="links" || name=="w3")) && !(page.layout=="beta" && (name=="w400" || name=="w500" || name=="w600"))){ %>

そこで質問は、それが単純なページ「アルファ」のみwidget895例えばを示したことを確認する方法ですか?

+0

タグを修正してもらえますか? EJSタグだけがこの質問に実際に関連しているようです。 – skirtle

+0

@skirtle - done – raulbaros

答えて

1

私はあなたがウィジェットに対してある種のループを持っていると仮定しました。そして、そのループ内の現在のウィジェット名に対応するnameがあります。

<% 
    var pageWidgets = { 
     alpha: ['widget895'], 
     beta: ['widget900', 'widget123'] 
    }; 

    var allowedWidgets = pageWidgets[page.layout]; 

    // Loop over the widgets and grab the name, I assume 
    // you're already doing something similar. 
    widgets.forEach(function(widget) { 
     var name = widget.name; 

     // This is the equivalent of the 'if' in your 
     // original code. Note that I've allowed all 
     // widgets by default. 
     if (!allowedWidgets || allowedWidgets.includes(name)) { 
      %> 
      ...widget rendering here... 
      <% 
     } 
    }); 
%> 
+0

ループについてthats正しい - デフォルトですべてのウィジェットを許可することについて、私はこれを理解する問題があります。 1つのウィジェット「w-12」(3つのうち、「w43」、「w89」、「w75」)が「ページレイアウト=アルファ」だけを表示する方法を教えてください。 – raulbaros

+0

@raulbaros私の例では、元の質問に頼んで、ページレイアウト 'alpha'の' widget895'を表示します。 'w-12'に変更するだけで' widget895'を 'w-12'に変更する必要があります。私が 'デフォルトで'と言うとき、私は 'pageWidgets'にリストされていないレイアウトでは' allowedWidgets'の値が 'undefined'になるので、'!allowedWidgets'チェックはすべてのウィジェットを許可します。これをデフォルトにすることはできません。また、特定のウィジェットの配列をデフォルトとして設定することもできます。 '<% %>'はすべて、特別なEJS構文ではなくJavaScriptだけです。 – skirtle

+0

これを取得しました。 ..ありがとう、すべていいよ! – raulbaros

関連する問題