如何根据openCMS 8.5.2中的文件夹站点结构创建导航菜单?

时间:2013-09-05 17:04:41

标签: navigation navbar opencms

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

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

我想要的是让所有元素能够始终显示相同的菜单,无论你当时的水平如何,下拉菜单中的子菜单。

问题在于我只能通过“forFolder”标签显示您所在级别的元素。或者我可以显示整个树(使用“treeForFolder”),但也可以显示您所在的级别,例如如果你在Submenu2.2,它将不会显示子菜单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。

提前致谢!

2 个答案:

答案 0 :(得分:0)

您可以使用 forSite 类型。

像这样:

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

查看API: CmsJspNavigationBean

答案 1 :(得分: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。