Adding pagination to the tag search page.

work item: 16924

--HG--
branch : dev
This commit is contained in:
Nathan Heskew
2010-12-09 15:29:07 -08:00
parent d025d9232d
commit c88c13c2e1
5 changed files with 37 additions and 8 deletions

View File

@@ -7,6 +7,7 @@ using Orchard.Logging;
using Orchard.Tags.Services;
using Orchard.Tags.ViewModels;
using Orchard.Themes;
using Orchard.UI.Navigation;
namespace Orchard.Tags.Controllers {
[ValidateInput(false), Themed]
@@ -34,21 +35,24 @@ namespace Orchard.Tags.Controllers {
return View(model);
}
public ActionResult Search(string tagName) {
public ActionResult Search(string tagName, Pager pager) {
var tag = _tagService.GetTagByName(tagName);
if (tag == null) {
return RedirectToAction("Index");
}
var list = _shapeFactory.List();
foreach (var taggedContentItem in _tagService.GetTaggedContentItems(tag.Id)) {
list.Add(_contentManager.BuildDisplay(taggedContentItem, "Summary"));
}
var taggedItems = _tagService.GetTaggedContentItems(tag.Id, pager.GetStartIndex(), pager.PageSize)
.Select(item => _contentManager.BuildDisplay(item, "Summary"));
var list = _shapeFactory.List();
list.AddRange(taggedItems);
var totalItemCount = _tagService.GetTaggedContentItemCount(tag.Id);
var viewModel = new TagsSearchViewModel {
TagName = tag.TagName,
List = list
List = list,
Pager = _shapeFactory.Pager(pager).TotalItemCount(totalItemCount)
};
return View(viewModel);

View File

@@ -9,6 +9,10 @@ namespace Orchard.Tags.Services {
TagRecord GetTagByName(string tagName);
IEnumerable<IContent> GetTaggedContentItems(int tagId);
IEnumerable<IContent> GetTaggedContentItems(int tagId, VersionOptions options);
IEnumerable<IContent> GetTaggedContentItems(int tagId, int skip, int count);
IEnumerable<IContent> GetTaggedContentItems(int tagId, int skip, int count, VersionOptions versionOptions);
int GetTaggedContentItemCount(int tagId);
int GetTaggedContentItemCount(int tagId, VersionOptions versionOptions);
TagRecord CreateTag(string tagName);

View File

@@ -119,6 +119,27 @@ namespace Orchard.Tags.Services {
.Where(c => c != null);
}
public IEnumerable<IContent> GetTaggedContentItems(int tagId, int skip, int take) {
return GetTaggedContentItems(tagId, skip, take, VersionOptions.Published);
}
public IEnumerable<IContent> GetTaggedContentItems(int tagId, int skip, int take, VersionOptions options) {
return _contentTagRepository
.Fetch(x => x.TagRecord.Id == tagId)
.Skip(skip)
.Take(take)
.Select(t => _orchardServices.ContentManager.Get(t.TagsPartRecord.Id, options))
.Where(c => c != null);
}
public int GetTaggedContentItemCount(int tagId) {
return GetTaggedContentItemCount(tagId, VersionOptions.Published);
}
public int GetTaggedContentItemCount(int tagId, VersionOptions options) {
return GetTaggedContentItems(tagId, options).Count();
}
private void TagContentItem(TagsPartRecord tagsPartRecord, string tagName) {
var tagRecord = GetTagByName(tagName);
var tagsContentItems = new ContentTagRecord { TagsPartRecord = tagsPartRecord, TagRecord = tagRecord };

View File

@@ -2,5 +2,6 @@
public class TagsSearchViewModel {
public string TagName { get; set; }
public dynamic List { get; set; }
public dynamic Pager { get; set; }
}
}

View File

@@ -1,11 +1,10 @@
@model Orchard.Tags.ViewModels.TagsSearchViewModel
@{
Html.AddTitleParts(T("Tags").ToString());
Html.AddTitleParts(T("Contents tagged with {0}", Model.TagName).ToString());
Model.List.Classes.Add("tagged-posts");
Model.List.Classes.Add("content-items");
}
<h1 class="page-title">@T("Contents tagged with <span>{0}</span>", Model.TagName)</h1>
@Display(Model.List)
@Display(Model.Pager)