Example #1
0
        public ActionResult Index(RenderModel model, int?maxItems)
        {
            if (!maxItems.HasValue)
            {
                maxItems = 25;
            }

            var listNodes = model.Content.Children
                            .Where(x => x.DocumentTypeAlias.InvariantEquals("ArticulateArchive"))
                            .ToArray();

            if (listNodes.Length == 0)
            {
                throw new InvalidOperationException("An ArticulateArchive document must exist under the root Articulate document");
            }

            var pager = new PagerModel(maxItems.Value, 0, 1);

            var listNodeIds = listNodes.Select(x => x.Id).ToArray();

            var listItems = Umbraco.GetPostsSortedByPublishedDate(pager, null, listNodeIds);

            var rootPageModel = new ListModel(listNodes[0], listItems, pager);

            var feed = FeedGenerator.GetFeed(rootPageModel, rootPageModel.Children <PostModel>());

            return(new RssResult(feed, rootPageModel));
        }
        private ActionResult RenderView(IRenderModel model, int?p = null)
        {
            var listNode = model.Content.Children
                           .FirstOrDefault(x => x.DocumentTypeAlias.InvariantEquals("ArticulateArchive"));

            if (listNode == null)
            {
                throw new InvalidOperationException("An ArticulateArchive document must exist under the root Articulate document");
            }

            if (p != null && p.Value == 1)
            {
                return(new RedirectToUmbracoPageResult(model.Content, UmbracoContext));
            }

            if (p == null || p.Value <= 0)
            {
                p = 1;
            }

            var rootPageModel = new MasterModel(model.Content);

            //get the count with XPath, this will be the fastest
            var totalPosts = Umbraco.GetPostCount(listNode.Id);

            var pageSize   = rootPageModel.PageSize;
            var totalPages = Convert.ToInt32(Math.Ceiling((double)totalPosts / pageSize));

            //Invalid page, redirect without pages
            if (totalPages > 0 && totalPages < p)
            {
                return(new RedirectToUmbracoPageResult(model.Content, UmbracoContext));
            }

            var pager = new PagerModel(
                pageSize,
                p.Value - 1,
                totalPages,
                totalPages > p ? model.Content.Url.EnsureEndsWith('?') + "p=" + (p + 1) : null,
                p > 2 ? model.Content.Url.EnsureEndsWith('?') + "p=" + (p - 1) : p > 1 ? model.Content.Url : null);

            var listItems = Umbraco.GetPostsSortedByPublishedDate(listNode.Id, pager);

            var listModel = new ListModel(listNode, listItems, pager);

            return(View(PathHelper.GetThemeViewPath(listModel, "List"), listModel));
        }