Adding paging to search

--HG--
branch : dev
This commit is contained in:
Nathan Heskew
2010-06-05 01:26:14 -07:00
parent 412d21b234
commit 40f7b8bd8c
4 changed files with 89 additions and 10 deletions

View File

@@ -14,14 +14,28 @@ namespace Orchard.Search.Controllers {
_contentManager = contentManager;
}
public ActionResult Index(string q) {
var searchViewModel = new SearchViewModel {Query = q};
public ActionResult Index(string q, int page = 0, int pageSize = 0) {
var take = pageSize > 0 ? pageSize : 10;
var skip = (page > 0 ? page - 1 : 0) * take;
var searchViewModel = new SearchViewModel {
Query = q,
Page = page > 0 ? page : 1,
PageSize = take
};
var results = _searchService.Query(q);
searchViewModel.Results = results.Select(result => new SearchResultViewModel {
Content = _contentManager.BuildDisplayModel(_contentManager.Get(result.Id), "SummaryForSearch"),
SearchHit = result
}).ToList();
searchViewModel.Count = results.Count();
searchViewModel.TotalPageCount = searchViewModel.Count/searchViewModel.PageSize;
//todo: deal with page requests beyond result count
searchViewModel.ResultsPage = results
.Select(result => new SearchResultViewModel {
Content = _contentManager.BuildDisplayModel(_contentManager.Get(result.Id), "SummaryForSearch"),
SearchHit = result
})
.Skip(skip)
.Take(take)
.ToList();
return View(searchViewModel);
}

View File

@@ -3,7 +3,11 @@ using Orchard.Mvc.ViewModels;
namespace Orchard.Search.ViewModels {
public class SearchViewModel : BaseViewModel {
public IEnumerable<SearchResultViewModel> Results { get; set; }
public IEnumerable<SearchResultViewModel> ResultsPage { get; set; }
public int Count { get; set; }
public int Page { get; set; }
public int PageSize { get; set; }
public int TotalPageCount { get; set; }
public string Query { get; set; }
}
}

View File

@@ -4,8 +4,9 @@ Html.RegisterStyle("search.css"); %>
<h1><%=Html.TitleForPage(T("Search").Text)%></h1><%
Html.Zone("search");
if (!string.IsNullOrWhiteSpace(Model.Query)) { %>
<p class="search-summary"><%=T("<em>{0}</em> results", Model.Results.Count()) %></p><%
<p class="search-summary"><%=T("<em>{0} - {1}</em> of <em>{2}</em> results", (Model.Page - 1) * Model.PageSize + 1, Model.Page * Model.PageSize > Model.Count ? Model.Count : Model.Page * Model.PageSize, Model.Count)%></p><%
}
if (Model.Results.Count() > 0) { %>
<%=Html.UnorderedList(Model.Results, (r, i) => Html.DisplayForItem(r.Content).ToHtmlString(), "search-results contentItems") %><%
if (Model.ResultsPage.Count() > 0) { %>
<%=Html.UnorderedList(Model.ResultsPage, (r, i) => Html.DisplayForItem(r.Content).ToHtmlString(), "search-results contentItems") %>
<%=Html.Pager(Model.TotalPageCount, Model.Page, new {q = Model.Query}, "<", ">", false) %><%
} %>