0

Web サイトのフォルダ構造から値を自動的に取得する Web サイトのナビゲーション メニューを作成しようとしています。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 パラメータは、現在のナビゲーション レベルまでしか表示されないため、何も変更されません。

Javaを介して直接ではなく、cms navタグを使用して実行したいと思います。

前もって感謝します!

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 に答える