En esta segunda parte del tutorial de búsquedas en OpenCms vamos a aprender a implementar el código necesario para añadir esta funcionalidad a nuestras páginas jsp. Para ello vamos a utilizar un módulo de búsquedas Open Source que viene incorporado llamado Lucene.
Para añadir esta funcionalidad a nuestro portal por una parte tendremos una página en la que aparece el formulario que verá el usuario, en el cual introducirá una palabra clave a buscar y por otra parte tendremos otra página que mostrará los resultados de la búsqueda. Tendremos por tanto dos archivos html y dos dos jsp.
Primero crearemos un jsp en la sección de nuestros módulos o donde queramos llamado busqueda_prueba.jsp y copiamos el siguiente código:Para añadir esta funcionalidad a nuestro portal por una parte tendremos una página en la que aparece el formulario que verá el usuario, en el cual introducirá una palabra clave a buscar y por otra parte tendremos otra página que mostrará los resultados de la búsqueda. Tendremos por tanto dos archivos html y dos dos jsp.
<html> <body> <p> <form action="resultados_busqueda.html" method="post"> <fieldset> <legend title="Buscar">Buscar elementos del portal</legend> <input name="query" type="text" value="Buscar..." onfocus="this.value=''" title="Buscar" /> <input type="submit" value="Enviar" title="Enviar" /> </fieldset> </form> </p> </body> </html>
Ahora creamos otro jsp con el nombre resultados_busqueda_prueba.jsp y copiamos lo siguiente:
<%@ page buffer="none" import="org.opencms.main.*, org.opencms.jsp.CmsJspXmlContentBean, org.opencms.search.*, org.opencms.file.*, org.opencms.jsp.*, org.opencms.xml.*, java.util.*, org.opencms.i18n.CmsMessages" %> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <%@ taglib prefix="cms" uri="http://www.opencms.org/taglib/cms" %> <% org.opencms.jsp.CmsJspActionElement cms = new CmsJspActionElement(pageContext, request, response); CmsSearchManager searchManager = OpenCms.getSearchManager(); CmsJspActionElement cmsLocale = new CmsJspActionElement(pageContext, request, response); String query = request.getParameter("query")==null?"":request.getParameter("query"); String searchPage = request.getParameter("searchPage")==null?"1":request.getParameter("searchPage"); String locale = cms.getRequestContext().getLocale().toString(); locale = "".equals(locale==null?"":locale)?"es":locale; CmsSearch busqueda = new CmsSearch(); busqueda.setQuery(query); busqueda.setIndex("indice_prueba_"+locale.toUpperCase()); int numero = 10; double num = 10.0; busqueda.setDisplayPages(numero); busqueda.setSearchPage(Integer.parseInt(searchPage)); busqueda.init(cms.getCmsObject()); List result = busqueda.getSearchResult();%> <% if ((result==null) || (result.size() == 0)) { %> <div> <p> No se encontraron resultados para <%= query %>.</p> </div> <% } else { %> <p>Se encontraron <%= result.size() %> resultados para la búsqueda <%= query %></p> <% ListIterator iterator = result.listIterator(); int i = 0; while (iterator.hasNext()) { i++; CmsSearchResult entry = (CmsSearchResult)iterator.next(); %> <p><a href="<cms:link><%= entry.getPath() %></cms:link>"><%= entry.getTitle() %>(<%= entry.getScore() %>%)</a> <%= entry.getExcerpt()==null?"":" <br/> "+ entry.getExcerpt() %></p> <br> <% } %> <ul > <% Map pageLinks = busqueda.getPageLinks(); if (busqueda.getPreviousUrl() != null) { String firstpageLink = cms.link(busqueda.getPreviousUrl()); firstpageLink = firstpageLink.substring(0,firstpageLink.indexOf("&searchPage=")) + "&searchPage=1"; %> <li> <a rel="nofollow" href="<%=firstpageLink.replaceAll("\"","%22") %>">Primera</a> </li> <li> <a rel="nofollow" href="<%=cms.link(busqueda.getPreviousUrl().replaceAll("\"","%22")) %>" >Anterior</a> </li> <% } int pageNumber = 0; Iterator it = pageLinks.keySet().iterator(); while (it.hasNext()) { pageNumber = ((Integer)it.next()).intValue(); String pageLink = cms.link((String)pageLinks.get(new Integer(pageNumber))); if (pageNumber != busqueda.getSearchPage()) { %> <li><a rel="nofollow" href="<%= pageLink.replaceAll("\"","%22") %>" ><%= pageNumber %></a></li> <% } else { %> <li><a rel="nofollow" href="<%= pageLink.replaceAll("\"","%22") %>" ><%= pageNumber %></a></li> <% } } %> <% if (busqueda.getNextUrl() != null) { String p = busqueda.getPreviousUrl(); if (p==null) p = busqueda.getNextUrl(); String lastpageLink = cms.link(p); lastpageLink = lastpageLink.substring(0,lastpageLink.indexOf("&searchPage=")) + "&searchPage="+ new Double((Math.ceil(busqueda.getSearchResultCount()/num))).intValue(); %> <li> <a rel="nofollow" href="<%=cms.link(busqueda.getNextUrl().replaceAll("\"","%22")) %>" >Siguiente</a> </li> <li> <a rel="nofollow" href="<%=lastpageLink.replaceAll("\"","%22") %>" >Última </a> </li> <% } %> </ul> <br/> <% } %>
Ahora que tenemos los jsp tendremos que crear los archivos html que tengan como plantilla el enlace a estos archivos. Para ellos nos vamos a nuestro site y creamos un nuevo contenido de tipo página con texto libre, o la plantilla que usemos para formatear la página, lo llamamos buscar.html y al editar las propiedades ponemos en template-elements: /system/modules/com.nuestroproyecto.templates/busqueda_prueba.jsp
Creamos un nuevo archivo llamado resultados_busqueda.html y como template-elements ponemos la ruta al jsp creado anteriormente: /system/modules/com.nuestroproyecto.templates/resultados_busqueda_prueba.jsp
Si todo ha ido bien ya funcionarían correctamente las búsquedas en nuestro portal.
No hay comentarios:
Publicar un comentario