0

好吧,我正在尝试为网站制作一个导航菜单,该菜单会自动从网站的文件夹结构中获取其值。我正在使用 opencms 导航标签。结构类似于:

  • 菜单1
  • 菜单2
    • 子菜单 2.1
    • 子菜单 2.2
      • 子菜单 2.2.1
    • 子菜单 2.3 .....

我想要的是让所有元素能够始终显示相同的菜单,无论您当时处于哪个级别,子菜单都以下拉方式显示。

问题是我只能通过“forFolder”标签显示与您所在级别相同的元素。或者我可以显示整个树(使用“treeForFolder”),但也可以显示到您所在的级别,例如,如果您在 Submenu2.2,它不会显示 Submenu 2.2.1...

<cms:navigation type="treeForFolder" var="nav" startLevel="2" endLevel="5"/>
<ul class="nav navbar-nav">
<c:forEach items="${nav.items}" var="elem">
<li><a href="<cms:link>${elem.resourceName}</cms:link>" class="${clase}">${elem.navText}</a></li>
</c:forEach>
</ul>

我怎样才能达到我的目的?StartLevel 和 EndLevel 参数不会改变任何东西,因为它只会显示到您当前的导航级别。

我想使用 cms nav 标签来做,而不是直接通过 java。

提前致谢!

4

2 回答 2

0

您可以使用类型forSite

像这样:

<cms:navigation type="forSite" startLevel="0" endLevel="3" var="nav"/>

看API: CmsJspNavigationBean

于 2013-10-07T10:17:15.973 回答
0

我不知道你是否还需要它(现在才找到),但这里是我的导航菜单的代码,我认为它对你也有帮助:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    import="org.opencms.jsp.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="cms" uri="http://www.opencms.org/taglib/cms"%>

<div id="subNav">
    <cms:navigation var="nav" type="treeForFolder" startLevel="2" endLevel="5" />
    <c:set var="oldLevel" value="" />
    <c:forEach items="${nav.items }" var="element">
        <c:set var="currentLevel" value="${ element.navTreeLevel}" />
        <c:choose>
            <c:when test="${empty oldLevel })"></c:when>
            <c:when test="${currentLevel > oldLevel }">
                <ul class="dropMenu">
            </c:when>
            <c:when test="${currentLevel == oldLevel }">
                </li>
            </c:when>
            <c:when test="${currentLevel < oldLevel }">
                <c:forEach begin="${currentLevel+1 }" end="${oldLevel }">
                    </li>
                    </ul>
                </c:forEach>
                </li>
            </c:when>
        </c:choose>
        <c:choose>
            <c:when
                test="${fn:startsWith(cms.requestContext.uri, element.resourceName)}">
                <c:set var="elementClass">activeNavigation</c:set>
            </c:when>
            <c:otherwise>
                <c:set var="elementClass">default</c:set>
            </c:otherwise>
        </c:choose>
        <c:set var="navText">${ element.navText}</c:set>
        <c:if test="${empty navText or fn:contains(navText, '??? NavText') }">
            <c:set var="navText">${element.title }</c:set>
        </c:if>
        <li><a class="${elementClass}" href="<cms:link>${element.resourceName}</cms:link>">${navText}</a>
        <c:set var="oldLevel" value="${currentLevel }"></c:set>
    </c:forEach>
    <c:if test="${!empty oldLevel}">
        </li>
        </ul>
    </c:if>
</div>

此树列出如下:

  • 菜单 1
  • 菜单 2
    • 子菜单 2.1
    • 子菜单 2.2
      • 子菜单 2.2.1
      • 子菜单 2.2.2
    • 子菜单 2.3

其中选定的菜单点为粗体。

我希望这就是你要找的。:)

编辑:哦,如果你想要更多的深度,你可以增加 endLevel。

于 2014-01-16T14:36:09.630 回答