我正在尝试在Silverstripe中填充四个菜单项。我已经设法在一个div中使用li class =“area {$ Pos}”填充了前两个菜单项。但是,第三个和第四个菜单项与前两个菜单项在不同的div和class中。我一直在搜索但不确定如何使用SS来填充不同div中的第三和第四个菜单项(/ second div>和class?抱歉,我是新手,所以任何帮助都会受到赞赏。
这是我的代码。
<div id="top">
<ul class="sf-menu">
<% control Menu(1) %>
<li id="area{$Pos}">
<a href="#a">$MenuTitle</a>
<% if Children %>
<ul><% control Children %>
<li>
<a href="#aa">$MenuTitle</a>
<% if Children %>
<ul>
<% control Children %>
<li>
<a href="#aa">$MenuImg.SetSize(20,20) $MenuTitle</a>
</li>
<% end_control %>
</ul>
<% end_if %>
</li>
<% end_control %>
</ul><% end_if %>
</li>
<% end_control %>
</ul>
</div>
<div id="test" >
<ul class="sf-menu sf-vertical">
<li id="area3">
<a href="#a">Area 3</a>
</li>
<li id="area4">
<a href="#">Area 4</a>
<ul class="show_left">
<li>
<a href="#">Store one</a>
</li>
<li>
<a href="#">Store Two</a>
</li>
</ul>
</li>
</ul>
</div>
答案 0 :(得分:2)
您已在代码中使用$ Pos Control(see the docs),您也可以在“if”块中使用它。 这应该是诀窍(未经测试):
请注意此代码段无法正常工作。请参阅下面的更新
<% control Menu(1) %>
<% if Pos == 1 || Pos == 2 %>
<div>render items 1 and 2 here</div>
<% end_if %>
<% end_control %>
<% control Menu(1) %>
<% if Pos == 3 || Pos == 4 %>
<div>render items 3 and 4 here</div>
<% end_if %>
<% end_control %>
请注意,不支持<% if Pos < 3 %>
语法。
为了更清洁地做同样的事情,请参考ssbits上的this snippet。
<强>更新强>
不幸的是,silverstripe似乎也不支持更复杂的条件。 这个支持(as in the docs):
<% if MyBoolean || MyOtherBoolean %>
而这个不是:
<% if MyInteger == 1 || MyInteger == 2 %>
所以,最好的解决方案似乎是我指向你的第二个解决方案(上面的ssbits上的片段)。 在您的情况下,这可以如下所示:
将函数添加到您用于检查当前位置的“Page”类中:
public function InFirstDiv() {
return ($this->iteratorPos == 1 || $this->iteratorPos == 2);
}
public function InSecondDiv() {
return ($this->iteratorPos == 3 || $this->iteratorPos == 4);
}
然后,在模板中调用它们:
<% control Menu(1) %>
<% if InFirstDiv %>
<div>render items 1 and 2 here</div>
<% end_if %>
<% end_control %>
<% control Menu(1) %>
<% if InSecondDiv %>
<div>render items 3 and 4 here</div>
<% end_if %>
<% end_control %>
看起来不太聪明 - 但这次应该工作:)
答案 1 :(得分:1)
恕我直言,你不想在这个位置上构建这个,因为如果你想把它改为第一个中的1-3个页面和第二个div中的4-5页,你需要更改底层模板。 / p>
相反,我会创建2个页面(可能是重定向页面 - 您可以在CMS中选择它们),在该页面下添加要在模板中显示的页面。所以你在CMS中会有这样的东西:
然后,您可以在模板中使用<% control ChildrenOf(foo) %>
(或bar
)访问两个不同地区的网页。
注意:如果您遇到模板错误,请务必将您的页面置于开发模式,并将?showtemplate=1
附加到您的网址。这将显示已编译的模板文件,您可以在其中找到实际错误。
PS:显然,如果你更改了URL,你需要更改你的模板,但这是我试图在现场项目中避免的东西(破坏的外部链接......),而新菜单条目很常见。