[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