El tercer caso que vamos a ver de elementos reutilizables es el más evidente: El Menú.
Si queremos que sea lo más flexible posible vamos a parametrizarlo para poder adaptarlo a nuestras necesidades (o a las de la plantilla que nos propongan). Por ello vamos a darle valores para el nivel en el que queremos empezar a ver el menú y para el nivel de profundidad máximo al que queremos llegar.
Así si necesitamos tener un primer nivel de menú horizontal con uno de profundidad:
nivelMenu=0;
nivelMaximo=0;
Y además tenemos en una columna el resto del menú:
nivelMenu=1;
nivelMaximo lo dejamos vacío para no limitarnos.
El código de e_MenuGenerico.jsp es:
>%@ page session="true" %>
<%@ page import="org.opencms.jsp.*, org.opencms.file.CmsResource" %>
<%@ page import="java.util.*" %>
<%!
private String nivelInterior(CmsJspNavElement navElement, CmsJspNavBuilder nav,CmsJspActionElement cms , String navTextMenu[], int profundidad, int nivelMaximo){
boolean dentro = false;
java.lang.StringBuffer dev = new java.lang.StringBuffer();
List navItems = null;
try{
if (navElement.isFolderLink())
{
navItems = nav.getNavigationForFolder(navElement.getResourceName());
Iterator i = navItems.iterator();
dev.append("<ul>");
while( i.hasNext() ) {
CmsJspNavElement navElementInt = ( CmsJspNavElement )i.next();
String link = cms.link( navElementInt.getResourceName() );
String title = navElementInt.getNavText();
if(title.equals(navTextMenu[profundidad+1]))
{
dev.append("<li>");
dev.append("<spam>" + title + "<spam> ");
if (navElementInt.isFolderLink() && profundidad<nivelMaximo)
{
dev.append(nivelInterior(navElementInt, nav, cms, navTextMenu, profundidad+1, nivelMaximo));
}
dev.append("</li>");
}
else
{
dev.append("<li>");
dev.append("<a href="" + link + "">" + title + "</a> ");
dev.append("</li>");
}
}
dev.append("</ul>");
}
else
{
String link = cms.link( navElement.getResourceName() );
String title = navElement.getNavText();
if(title.equals(navTextMenu[profundidad+1]))
{
dev.append("<li>");
dev.append("<spam>" + title + "</spam> ");
dev.append("</li>");
}
else
{
dev.append("<li>");
dev.append("<a href="" + link + "">" + title + "</a> ");
dev.append("</li>");
}
}
}
catch (Exception e){
}
return dev.toString();
}
%>
<%
try{
CmsJspActionElement cms = new CmsJspActionElement( pageContext, request, response );
int nivelMenu=0;
try
{
nivelMenu=Integer.parseInt(cms.getRequest().getParameter( "nivelMenu" ));
if (nivelMenu<0)
{
nivelMenu=0;
}
}
catch (Exception e){
nivelMenu=0;
}
int nivelMaximo=0;
try
{
nivelMaximo=Integer.parseInt(cms.getRequest().getParameter( "nivelMaximo" ));
if (nivelMaximo<nivelMenu)
{
nivelMaximo=nivelMenu;
}
}
catch (Exception e){
nivelMaximo=cms.getNavigation().getNavigationForResource().getNavTreeLevel();
}
CmsJspNavBuilder navigation = cms.getNavigation();
CmsJspNavElement elementoActual = navigation.getNavigationForResource();
int nivelMenuPagina = elementoActual.getNavTreeLevel();
String navTextMenu[]= new String[10];
int nivelActual=elementoActual.getNavTreeLevel();
while (nivelActual>nivelMaximo)
{
elementoActual = navigation.getNavigationForResource(elementoActual.getParentFolderName());
nivelActual--;
}
navTextMenu[nivelActual+1]=elementoActual.getNavText();
while (nivelActual >= nivelMenu)
{
if (nivelActual>0)
{
elementoActual = navigation.getNavigationForResource(elementoActual.getParentFolderName());
nivelActual--;
navTextMenu[nivelActual+1]=elementoActual.getNavText();
}
else
{
elementoActual = navigation.getNavigationForResource("/");
nivelActual--;
navTextMenu[0]=elementoActual.getNavText();
}
}
out.println(nivelInterior(elementoActual, navigation , cms , navTextMenu, nivelMenu, nivelMaximo));
}
catch (Exception e){
for (int x=0;x<e.getStackTrace().length;x++)
{
out.println(e.getStackTrace()[x].toString());
}
}
%>
Para incluirlo en nuestra plantilla sólo debemos añadir donde corresponda:
<%@ page session="true" %> <%@ taglib prefix="cms" uri=<a href="http://www.opencms.org/taglib/cms">http://www.opencms.org/taglib/cms</a> %> <cms:include file="/system/modules/es.jromay.opencms/elements/elements/e_MenuGenerico.jsp"> <cms:param name="nivelMenu">1</cms:param> <cms:param name="nivelMaximo">1</cms:param> </cms:include>
Un comentario
jgarcia escribió:
13 octubre, 2010, a las 9:32 (UTC 0 )
Hola, te felicito por tus códigos, me han servido mucho.
Gracias