Show Published Pages (Versions) in a Specific Time Span

by: Allan Thræn

Since I'm still trying to learn my way around EPiServer I grab whatever chance I get of coding something a bit out of the ordinary, and today was no different. At a Developer Course I was attending, the need came up for a page that would list all the versions of all the pages on a given EPiServer CMS 5 web site, published within 2 specific dates - and just for the fun and the exercise I coded this little sample.

The Code-Behind for this page is pretty simple: It recursively goes through the site and builds a list of PageVersion objects (from the EPiServer.DataAbstraction namespace) whenever it comes across a version of a page that is published in the time period given as input (in this sample it's hardcoded - but that could easily be changed).

 

    public partial class VersionList : EPiServer.TemplatePage
    {

        private List<PageVersion> ValidPages = new List<PageVersion>();

        private void FindVersions(PageReference startpage, DateTime start, DateTime stop)
        {
            //Get all the versions of the page we are currently examining
            PageVersionCollection pvc = EPiServer.DataAbstraction.PageVersion.List(startpage);
            foreach (PageVersion pv in pvc)
            {
                if ((pv.Status == VersionStatus.PreviouslyPublished)||(pv.Status==VersionStatus.Published))
                {
                    //We now have a version that has been published
                    DateTime pub = pv.Saved;
                    //It's safe to assume the Saved property holds the publish-time, since any later saves would result in newer versions
                    if ((pub >= start) && (pub <= stop))
                    {
                        ValidPages.Add(pv);
                    }
                }
            }
            //Recursive through childpages
            foreach (PageData pd in GetChildren(startpage))
            {
                FindVersions(pd.PageLink, start, stop);
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            //Loop through all pages, find pages published within a time period
            FindVersions(PageReference.StartPage, new DateTime(2007, 1, 1), new DateTime(2007, 12, 1));

            //And databind to a Repeater control
            PageList1.DataSource = ValidPages;
            PageList1.DataBind();
        }
    }

 

 

You may wonder: "Why is he doing this recursively when he just as easily could have retrieved a list of all pages and done it iteratively?".

- "Well, it's elementary my dear Watson. Recursive programming is always more fun."

In the ASPX I just put a couple of lines to output the versions:

 

<%@ Page Language="c#" Inherits="KnowledgeWeb.VersionList" Codebehind="VersionList.aspx.cs"
    MasterPageFile="~/Templates/MasterPages/KnowledgeMaster.Master" %>

<%@ Register Assembly="EPiServer.Web.WebControls, Version=5.1.422.4, Culture=neutral, PublicKeyToken=8fe83dea738b45b7"
    Namespace="EPiServer.Web.WebControls" TagPrefix="EPiServer" %>
<asp:Content runat="server" ContentPlaceHolderID="LeftAndMiddleSection">
    <asp:Repeater ID="PageList1" runat="server">
        <ItemTemplate>
            <p>
                <%# (Container.DataItem as EPiServer.DataAbstraction.PageVersion).Saved.ToShortDateString() %>
                ,
                <%# (Container.DataItem as EPiServer.DataAbstraction.PageVersion).Name %>
                , Language:
                <%# (Container.DataItem as EPiServer.DataAbstraction.PageVersion).LanguageBranch %>
                , ID:
                <%# (Container.DataItem as EPiServer.DataAbstraction.PageVersion).ID %>
            </p>
        </ItemTemplate>
    </asp:Repeater>
</asp:Content>

16 November 2007


Comments

Post a comment    
User verification Image for user verification  
Allan Thræn

About me

I'm  a  developer on the Research team, currently stationed in our US office. My technical interests are typically focused around search, information management, artificial intelligence, personalization, tracking user behavior, usability in content management and most of all making cool plugins and code samples for EPiServer.

On top of this blog I have the blog Allan On Technology and I often crosspost.

 

 

 


Syndications


Archive


Tag cloud

EPiTrace logger