2013-09-05 4 views
0

Ну, я пытаюсь создать меню навигации для веб-сайта, который автоматически берет его значения из структуры папок веб-сайта. Я использую навигационные метки opencms. Структура что-то вроде:Как создать меню навигации на основе структуры сайта папок в openCMS 8.5.2?

  • Menu1
  • menu2
    • Submenu 2,1
    • Submenu 2,2
      • Submenu 2.2.1
    • Submenu 2,3 ​​ .....

То, что я хочу, чтобы получить все элементы, чтобы быть в состоянии для отображения всегда того же меню, независимо от уровня, в котором вы находитесь в данный момент, с подменю в раскрывающемся списке.

Проблема в том, что я могу отображать элементы только на том же уровне, что и вы, через тег forFolder. Или я могу отобразить все дерево (с помощью «treeForFolder»), но также до уровня, на котором вы находитесь, например. если вы находитесь в подменю2.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.

Заранее благодарен!

ответ

0

Вы можете использовать тип forSite.

Как это:

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

Посмотрите на API: CmsJspNavigationBean

0

Я не знаю, если вы все еще нужно (только что нашел его сейчас), но вот код для моей навигации -menu, и я думаю, что это поможет вам тоже:

<%@ 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.