From 5d53dd4b2bd7ce8f2e648d13cc902357de398af1 Mon Sep 17 00:00:00 2001 From: rjy7 Date: Fri, 27 Aug 2010 18:47:56 +0000 Subject: [PATCH] Add previous and next links to search result paging. Small style changes. --- .../FreemarkerPagedSearchController.java | 38 ++++++++++++------- .../web/templatemodels/files/Files.java | 3 ++ .../body/search/pagedSearchResults.ftl | 8 +++- 3 files changed, 33 insertions(+), 16 deletions(-) diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/FreemarkerPagedSearchController.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/FreemarkerPagedSearchController.java index bfa0aa58e..a56955a01 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/FreemarkerPagedSearchController.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/controller/FreemarkerPagedSearchController.java @@ -16,12 +16,9 @@ import java.util.List; import java.util.Map; import java.util.Set; -import javax.servlet.RequestDispatcher; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -50,9 +47,9 @@ import edu.cornell.mannlib.vitro.webapp.beans.ObjectPropertyStatement; import edu.cornell.mannlib.vitro.webapp.beans.Portal; import edu.cornell.mannlib.vitro.webapp.beans.VClass; import edu.cornell.mannlib.vitro.webapp.beans.VClassGroup; -import edu.cornell.mannlib.vitro.webapp.controller.Controllers; import edu.cornell.mannlib.vitro.webapp.controller.VitroRequest; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.FreemarkerHttpServlet; +import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder; import edu.cornell.mannlib.vitro.webapp.controller.freemarker.UrlBuilder.Params; import edu.cornell.mannlib.vitro.webapp.dao.DataPropertyDao; import edu.cornell.mannlib.vitro.webapp.dao.IndividualDao; @@ -92,7 +89,7 @@ public class FreemarkerPagedSearchController extends FreemarkerHttpServlet imple private IndexSearcher searcher = null; private static final Log log = LogFactory.getLog(FreemarkerPagedSearchController.class.getName()); String NORESULT_MSG = "The search returned no results."; - private int defaultHitsPerPage = 25; + private int defaultHitsPerPage = 2; //25; private int defaultMaxSearchSize= 1000; public void init(ServletConfig config) throws ServletException { @@ -219,6 +216,7 @@ public class FreemarkerPagedSearchController extends FreemarkerHttpServlet imple Params pagingLinkParams = new Params(); pagingLinkParams.put("querytext", qtxt); + pagingLinkParams.put("hitsPerPage", String.valueOf(hitsPerPage)); String classGroupParam = vreq.getParameter("classgroup"); String typeParam = vreq.getParameter("type"); @@ -279,7 +277,14 @@ public class FreemarkerPagedSearchController extends FreemarkerHttpServlet imple body.put("typeName", type.getName()); } - body.put("pagingLinks", getPagingLinks(startIndex, hitsPerPage, hitsLength, maxHitSize, vreq.getServletPath(), pagingLinkParams)); + body.put("pagingLinks", getPagingLinks(startIndex, hitsPerPage, hitsLength, maxHitSize, vreq.getServletPath(), pagingLinkParams)); + + if (startIndex != 0) { + body.put("prevPage", getPreviousPageLink(startIndex, hitsPerPage, vreq.getServletPath(), pagingLinkParams)); + } + if (startIndex < (hitsLength - hitsPerPage)) { + body.put("nextPage", getNextPageLink(startIndex, hitsPerPage, vreq.getServletPath(), pagingLinkParams)); + } } catch (Throwable e) { log.error(e, e); @@ -390,14 +395,10 @@ public class FreemarkerPagedSearchController extends FreemarkerHttpServlet imple return pagingLinks; } - int pageNumber; - - params.put("hitsPerPage", String.valueOf(hitsPerPage)); - for (int i = 0; i < hitsLength; i += hitsPerPage) { params.put("startIndex", String.valueOf(i)); if ( i < maxHitSize - hitsPerPage) { - pageNumber = i/hitsPerPage + 1; + int pageNumber = i/hitsPerPage + 1; if (i >= startIndex && i < (startIndex + hitsPerPage)) { pagingLinks.add(new PagingLink(pageNumber)); } else { @@ -411,6 +412,18 @@ public class FreemarkerPagedSearchController extends FreemarkerHttpServlet imple return pagingLinks; } + private String getPreviousPageLink(int startIndex, int hitsPerPage, String baseUrl, Params params) { + params.put("startIndex", String.valueOf(startIndex-hitsPerPage)); + //return new PagingLink("Previous", baseUrl, params); + return UrlBuilder.getUrl(baseUrl, params); + } + + private String getNextPageLink(int startIndex, int hitsPerPage, String baseUrl, Params params) { + params.put("startIndex", String.valueOf(startIndex+hitsPerPage)); + //return new PagingLink("Next", baseUrl, params); + return UrlBuilder.getUrl(baseUrl, params); + } + private class PagingLink extends LinkTemplateModel { PagingLink(int pageNumber, String baseUrl, Params params) { @@ -426,9 +439,6 @@ public class FreemarkerPagedSearchController extends FreemarkerHttpServlet imple PagingLink(String text, String baseUrl, Params params) { super(text, baseUrl, params); } - - - } private List getVClasses(VClassDao vclassDao, TopDocs topDocs, diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/files/Files.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/files/Files.java index 6bdc136f0..381ef14f7 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/files/Files.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/web/templatemodels/files/Files.java @@ -35,6 +35,9 @@ public abstract class Files extends BaseTemplateModel { } public void addFromTheme(String path) { + if (!path.startsWith("/")) { + path = "/" + path; + } path = themeDir + getThemeSubDir() + path; add(path); } diff --git a/webapp/web/templates/freemarker/body/search/pagedSearchResults.ftl b/webapp/web/templates/freemarker/body/search/pagedSearchResults.ftl index 8bee6dde8..ec95c30f5 100644 --- a/webapp/web/templates/freemarker/body/search/pagedSearchResults.ftl +++ b/webapp/web/templates/freemarker/body/search/pagedSearchResults.ftl @@ -42,14 +42,18 @@ <#if (pagingLinks?size > 0)>
Pages: + <#if prevPage??> <#list pagingLinks as link> <#if link.url??> - ${link.text} + ${link.text} <#else> ${link.text} <#-- no link if current page --> + <#if nextPage??>
- \ No newline at end of file + + +${stylesheets.addFromTheme("search.css")} \ No newline at end of file