我最终在 orchard 1.5 中通过覆盖Menu.cshtml
视图、编写一些逻辑来检查菜单项的数量,然后根据它们包含的菜单项的数量呈现具有不同 ID 的导航菜单来完成这项工作。然后我在我的 .js 中添加了不同的 CSS 选择器Site.css
,每个选择器的 CSS 都适用于各种大小的导航菜单。这是我Menu.cshtml
最终的样子(位于您当前活动主题的 Views 文件夹中)。
@
{
Script.Require("jQuery");
var tag = Tag(Model , "ul");
var items = (IList<dynamic>)Enumerable.Cast<dynamic>(Model.Items);
}
@{//if the menu contains 3 items, render a nav called 'ThreeItemNav'
if(items.Count == 3){
<nav id="ThreeItemNav">
@tag.StartElement
@* see MenuItem shape template *@
@DisplayChildren(Model)
@tag.EndElement
</nav>
}
else if(items.Count == 4){
<nav id="FourItemNav">
@tag.StartElement
@* see MenuItem shape template *@
@DisplayChildren(Model)
@tag.EndElement
</nav>
}
else if(items.Count == 5){
<nav id="FiveItemNav">
@tag.StartElement
@* see MenuItem shape template *@
@DisplayChildren(Model)
@tag.EndElement
</nav>
}
}
//Include the jQuery to add animations to the navigation menu
@using (Script.Foot())
{
<script type ="text/javascript">
//<![CDATA[
$(document).ready(function () {
//Add your script here
$(" #FiveItemNav li").hover(function () {
//Do something when the sub menu list items are hovered....
});
$(" #FourItemNav li").hover(function () {
//Do something when the sub menu list items are hovered....
});
$(" #ThreeItemNav li").hover(function () {
//Do something when the sub menu list items are hovered....
});
});
//]]>
</script>
}
请注意,您需要在主题中为每个导航元素(和)添加 CSS 选择器ThreeItemNav
,例如在当前主题中:FourItemNav
FiveItemNav
Site.css
/*Style the Three Item Navigation menu*/
#ThreeItemNav li
{
background-color:#263A79;
}
#ThreeItemNav a:hover
{
border-right:1px solid #333;
border-left:1px solid #333;
}
#ThreeItemNav > ul li.current
{
background:#5882FA;
}
/*Style the Four Item Navigation menu*/
#FourItemNav li
{
background:#Purple;
}
#FourItemNav a:hover
{
background:Orange;
}
.........more styles
这显然是一种冗长的方法,但这是我能想到的最好的方法,这样我就可以保持 Orchard 导航菜单的功能,仍然使用 CSS 设置样式并添加 jQuery 动画。从长远来看,我认为初始开发成本值得为导航菜单添加一些强大的功能。我很想听听有关如何以更简洁的方式做到这一点的任何建议。此外,我肯定会推荐使用 Orchard 1.5,因为它内置了对创建分层导航菜单的支持。
检查内部工作原理Menu.cshtml
和MenuItem.cshtml
视图有助于了解导航菜单在 Orchard 中是如何呈现的,以及检查默认主题机如何设置导航菜单及其各种级别/子菜单的样式。