diff --git a/src/Orchard.Web/Modules/Orchard.Tags/Controllers/HomeController.cs b/src/Orchard.Web/Modules/Orchard.Tags/Controllers/HomeController.cs index 1e6bbb33d..abfbdfbeb 100644 --- a/src/Orchard.Web/Modules/Orchard.Tags/Controllers/HomeController.cs +++ b/src/Orchard.Web/Modules/Orchard.Tags/Controllers/HomeController.cs @@ -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); diff --git a/src/Orchard.Web/Modules/Orchard.Tags/Services/ITagService.cs b/src/Orchard.Web/Modules/Orchard.Tags/Services/ITagService.cs index 5aa2e455d..10208db39 100644 --- a/src/Orchard.Web/Modules/Orchard.Tags/Services/ITagService.cs +++ b/src/Orchard.Web/Modules/Orchard.Tags/Services/ITagService.cs @@ -9,6 +9,10 @@ namespace Orchard.Tags.Services { TagRecord GetTagByName(string tagName); IEnumerable GetTaggedContentItems(int tagId); IEnumerable GetTaggedContentItems(int tagId, VersionOptions options); + IEnumerable GetTaggedContentItems(int tagId, int skip, int count); + IEnumerable GetTaggedContentItems(int tagId, int skip, int count, VersionOptions versionOptions); + int GetTaggedContentItemCount(int tagId); + int GetTaggedContentItemCount(int tagId, VersionOptions versionOptions); TagRecord CreateTag(string tagName); diff --git a/src/Orchard.Web/Modules/Orchard.Tags/Services/TagService.cs b/src/Orchard.Web/Modules/Orchard.Tags/Services/TagService.cs index 53f91f57d..b78a1e1b8 100644 --- a/src/Orchard.Web/Modules/Orchard.Tags/Services/TagService.cs +++ b/src/Orchard.Web/Modules/Orchard.Tags/Services/TagService.cs @@ -119,6 +119,27 @@ namespace Orchard.Tags.Services { .Where(c => c != null); } + public IEnumerable GetTaggedContentItems(int tagId, int skip, int take) { + return GetTaggedContentItems(tagId, skip, take, VersionOptions.Published); + } + + public IEnumerable 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 }; diff --git a/src/Orchard.Web/Modules/Orchard.Tags/ViewModels/TagsSearchViewModel.cs b/src/Orchard.Web/Modules/Orchard.Tags/ViewModels/TagsSearchViewModel.cs index 13b91c9c4..043b684f5 100644 --- a/src/Orchard.Web/Modules/Orchard.Tags/ViewModels/TagsSearchViewModel.cs +++ b/src/Orchard.Web/Modules/Orchard.Tags/ViewModels/TagsSearchViewModel.cs @@ -2,5 +2,6 @@ public class TagsSearchViewModel { public string TagName { get; set; } public dynamic List { get; set; } + public dynamic Pager { get; set; } } } diff --git a/src/Orchard.Web/Modules/Orchard.Tags/Views/Home/Search.cshtml b/src/Orchard.Web/Modules/Orchard.Tags/Views/Home/Search.cshtml index 5f12fa237..c26b89bb7 100644 --- a/src/Orchard.Web/Modules/Orchard.Tags/Views/Home/Search.cshtml +++ b/src/Orchard.Web/Modules/Orchard.Tags/Views/Home/Search.cshtml @@ -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"); } -

@T("Contents tagged with {0}", Model.TagName)

@Display(Model.List) +@Display(Model.Pager) \ No newline at end of file