2017-10-19 118 views
0

我在側邊欄中有幾個小部件。 我不希望這些小部件中的一些顯示在我的某些頁面上。包含一個小部件,而不是排除所有其他小部件

我不知道怎麼寫它比這更簡單?我有很多例外,所以像這樣寫就是一本充滿線條的書籍。 我只想簡單地寫成「在這個頁面上只包含這個或這些小部件」(而不是「在這個頁面上排除這個和這些小部件」)。

<%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 - 完成 – 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

關於這是正確的循環 - 關於默認允許所有小部件,我有問題的理解。你能告訴我只有一個小部件「w-12」(三個,「w43」,「w89」,「w75」)只能顯示爲「page-layout = alpha」嗎? – raulbaros

+0

@raulbaros我的例子應該做你原來的問題要求:它只顯示'widget895'爲頁面佈局'alpha'。把它改成'w-12'只需要你把'widget895'改成'w-12'。當我說默認情況下,我的意思是,對於沒有在'pageWidgets'中列出的任何佈局,'allowedWidgets'的值將是'undefined',所以'!allowedWidgets'檢查將允許所有的小部件。把它改成'if(allowedWidgets &&'會默認禁止它們,或者你可以設置一個特定的小部件數組作爲默認值,記住'<% %>'中的所有內容都只是JavaScript,而不是特殊的EJS語法 – skirtle

+0

現在明白了。 ..謝謝你,一切都好! – raulbaros

相關問題