包含一个小部件,而不是排除所有其他小部件
我在侧边栏中有几个小部件。 我不希望这些小部件中的一些显示在我的某些页面上。包含一个小部件,而不是排除所有其他小部件
我不知道怎么写它比这更简单?我有很多例外,所以像这样写就是一本充满线条的书籍。 我只想简单地写成“在这个页面上只包含这个或这些小部件”(而不是“在这个页面上排除这个和这些小部件”)。
<%if(!(page.layout=="alpha" && (name=="w1" || name=="w2" || name=="links" || name=="w3")) && !(page.layout=="beta" && (name=="w400" || name=="w500" || name=="w600"))){ %>
所以问题是如何使简单该页“阿尔法”仅显示例如widget895?
我假设你已经在部件上有某种循环,并且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...
<%
}
});
%>
关于这是正确的循环 - 关于默认允许所有小部件,我有问题的理解。你能告诉我只有一个小部件“w-12”(三个,“w43”,“w89”,“w75”)只能显示为“page-layout = alpha”吗? – raulbaros
@raulbaros我的例子应该做你原来的问题要求:它只显示'widget895'为页面布局'alpha'。把它改成'w-12'只需要你把'widget895'改成'w-12'。当我说默认情况下,我的意思是,对于没有在'pageWidgets'中列出的任何布局,'allowedWidgets'的值将是'undefined',所以'!allowedWidgets'检查将允许所有的小部件。把它改成'if(allowedWidgets &&'会默认禁止它们,或者你可以设置一个特定的小部件数组作为默认值,记住''中的所有内容都只是JavaScript,而不是特殊的EJS语法 – skirtle
现在明白了。 ..谢谢你,一切都好! – raulbaros
你能修好标签吗?看起来只有EJS标签实际上与这个问题有关。 – skirtle
@skirtle - 完成 – raulbaros