[opencms-dev] Solved: Path navigation bar
Salvador Santander
dominion.salvador.ext at juntadeandalucia.es
Fri Aug 8 12:13:00 CEST 2003
Here is the class for obtain a path navigation bar. You only must call the
method eGetNavPah
package company.utilities;
import com.opencms.template.*;
import com.opencms.file.*;
import com.opencms.core.*;
import com.opencms.util.*;
import com.opencms.defaults.*;
import java.util.*;
import javax.servlet.http.*;
import java.io.*;
/**
* Clase que extiende la de opencms de navegacion para tener un método
* de construccion de navegacion de la ruta de la página.
*
* @author Salavdor Santander Gutiérrez
* @company dominion t.i. ( www.dominion.es )
*/
public class PagePathXmlNav extends CmsXmlNav {
/***
* Método que devuelve la navegación de la ruta de la página que se está
viendo de la forma
* Carpeta1->Carpeta2->...->Titulo pagina
* @param cms CmsObject Objeto para acceder a los recursos de opencms.
* @param tagcontent Contenido de la etiqueta del método.
Enumerationeste caso no sirve para nada.
* @param doc Documento XML de la plantilla
* @param userObj Tabla hash con los parametros
* @return Devuelve un array de bytes con el contenido de la navegacion
en html.
* @throws CmsException
*/
public Object eGetNavPath(CmsObject cms, String tagcontent,
A_CmsXmlContent doc, Object userObject) throws CmsException {
String navPath = ""; //
Cadena con el codigo html del resultado.
CmsXmlTemplateFile template = ( CmsXmlTemplateFile ) doc; //
Plantilla XML
boolean startAbsolute = true; // Si se
empieza desde la carpeta raiz
int requestedNavLevels = 1; //
Profundidad de la navegacion
boolean includeCurrentFolder = true; //
Incluir la carpeta actual
int startLevel = 0, endLevel = 0; // Los
niveles de navegacion para empezar
if (!template.hasData("naventry")) {
template.setData("naventry", "" );
}
if (!template.hasData("navcurrent")) {
template.setData("navcurrent", template.getData("naventry"));
}
// Analizamos el contenido de la etiqueta
if (!"".equals(tagcontent)) {
StringTokenizer tagContentTokenizer = new StringTokenizer(
tagcontent, "," );
if (tagContentTokenizer.countTokens()>=3) {
// Comienzo desde carpeta raiz o no
if (tagContentTokenizer.hasMoreTokens()) {
startAbsolute =
tagContentTokenizer.nextToken().trim().equalsIgnoreCase("absolute");
}
// Incluir la carpeta actual o no
if (tagContentTokenizer.hasMoreTokens()) {
includeCurrentFolder =
tagContentTokenizer.nextToken().trim().equalsIgnoreCase("this");
}
// Profundidad maxima de la navegacion
if (tagContentTokenizer.hasMoreTokens()) {
try {
requestedNavLevels = Integer.parseInt(
tagContentTokenizer.nextToken() );
}
catch (Exception e) {
// Obtenemos la carpeta actual
String requestedFolder =
cms.getRequestContext().currentFolder().getAbsolutePath();
// Calculamos la profundidad de la carpeta actual
endLevel = extractLevel( cms, requestedFolder );
requestedNavLevels = endLevel + 1;
}
}
}
}
// Obtenemos la carpeta actual
String requestedFolder =
cms.getRequestContext().currentFolder().getAbsolutePath();
// Calculamos la profundidad de la carpeta actual
endLevel = extractLevel( cms, requestedFolder );
if (includeCurrentFolder) {
endLevel++;
}
// Calculamos los niveles de comienzo y final
if (startAbsolute) {
startLevel = 1;
}
else {
startLevel = endLevel - requestedNavLevels + 1;
}
for (int i = startLevel; i <= endLevel; i++) {
String currentFolder = extractFolder( cms,i );
// Registramos la carpeta actual por si hay cmabios que se
actualice la caché
Vector vfsDeps = new Vector();
vfsDeps.add( cms.readFolder(currentFolder) );
registerVariantDeps(cms, doc.getAbsoluteFilename(), null, null,
(Hashtable)userObject, vfsDeps, null, null);
// Añadimos la carpeta actual en los recursos que después
utilizará el método
// buildNav para construir la navegación
Vector resources = new Vector();
resources.addElement( cms.readFolder(currentFolder,false) );
// Construimos la navegación de esta carpeta y la añadimos a
todo el código que teniamos
String currentNav = buildNav(cms,doc,userObject,resources);
navPath += currentNav;
}
// Añadimos el fichero actual
String currentFolder = extractFolder( cms, endLevel );
// Añadir el titulo de la pagina que se está viendo ( solo si es la
que se esta viendo )
if ( includeCurrentFolder ) {
Vector allFile=cms.getFilesInFolder( currentFolder );
Enumeration e = allFile.elements();
while( e.hasMoreElements() ) {
CmsFile file = ( CmsFile ) e.nextElement();
if ( file.getName().equals(
cms.getRequestContext().getFileUri() ) )
{
Vector resources = new Vector();
resources.ensureCapacity( resources.size() + 1 );
resources.addElement( file );
// Construimos la navegación de esta carpeta y la
añadimos a todo el código que teniamos
String currentNav =
buildNav(cms,doc,userObject,resources);
navPath += currentNav;
}
}
}
/*
String path = currentResource.getAbsolutePath();
String pos = cms.readProperty(path, C_PROPERTY_NAVPOS);
String text = cms.readProperty(path, C_PROPERTY_NAVTEXT);
*/
return navPath.getBytes();
}
}
More information about the opencms-dev
mailing list