【问题标题】:Sitecore sorting by created date issueSitecore 按创建日期问题排序
【发布时间】:2014-01-31 16:25:49
【问题描述】:

我无法弄清楚如何根据项目的创建日期按降序对项目列表进行排序(我知道 Sitecore 允许按项目的创建日期升序对项目进行排序)。我还是 Sitecore 的新手,所以我不知道该怎么做...任何建议都会有所帮助!

 Item[] BlogPosts = HomeItem.Axes.SelectItems(@"child::*[@@templatename='BlogComment']");

            if (BlogPosts != null)
            {

                DataSet ds = new DataSet();
                DataTable posts = ds.Tables.Add("posts");

                posts.Columns.Add("PostName", Type.GetType("System.String"));
                posts.Columns.Add("DateCreated", Type.GetType("System.String"));
                posts.Columns.Add("PostComment", Type.GetType("System.String"));

                foreach(Item PostItem in BlogPosts)
                {
                    DataRow dr = posts.NewRow();

                    dr["PostName"] = PostItem.Fields["Name"].Value;
                    dr["DateCreated"] = PostItem.Statistics.Created;
                    dr["PostComment"] = PostItem.Fields["Comment"].Value;

                    posts.Rows.Add(dr);
                }
                commentsListRptr.DataSource = ds;//this is a repeater I'm using to show the data
                commentsListRptr.DataMember = "posts";
                commentsListRptr.DataBind();
            }

【问题讨论】:

    标签: c# sorting sitecore datecreated


    【解决方案1】:

    您可以使用 LINQ 对项目进行排序:

    var items = Sitecore.Context.Database.SelectItems("/sitecore/content/home/*");
    items = items.OrderBy(x => x[Sitecore.FieldIDs.Created]).Reverse();
    

    显然更改查询或项目列表以满足您的要求。

    添加代码后编辑:

    在您的 ascx 中设置中继器,我们将使用 Sitecore FieldRenderer,但在此控件中禁用网络编辑:

    <asp:Repeater ID="rptBlogPosts" runat="server" OnItemDataBound="rptBlogPosts_ItemDataBound">
        <HeaderTemplate><table></HeaderTemplate>
        <ItemTemplate>
            <tr>
                <td><sc:FieldRenderer runat="server" ID="PostName" FieldName="Name" DisableWebEditing="True" /></td>
                <td><asp:Literal runat="server" ID="PostDate"></asp:Literal></td>
                <td><sc:FieldRenderer runat="server" ID="PostComment" FieldName="Comment" DisableWebEditing="True" /></td>
            </tr>
        </ItemTemplate>
        <FooterTemplate></table></FooterTemplate>
    </asp:Repeater>
    

    然后在您的 Page_Load 代码中绑定控件,绑定转发器的数据源,然后设置 FieldRenderer 项目并以适合的格式显示创建日期。

    private void Page_Load(object sender, EventArgs e)
    {
        Item[] BlogPosts = HomeItem.Axes.SelectItems(@"child::*[@@templatename='BlogComment']");
        if (BlogPosts.Any())
        {
            rptBlogPosts.DataSource = BlogPosts.OrderBy(x => x[Sitecore.FieldIDs.Created]).Reverse();
            rptBlogPosts.DataBind();
        }
    }
    
    protected void rptBlogPosts_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            var currentItem = e.Item.DataItem as Item;
            var scPostName = e.Item.FindControl("PostName") as FieldRenderer;
            var litPostDate = e.Item.FindControl("PostDate") as Literal;
            var scPostComment = e.Item.FindControl("PostComment") as FieldRenderer;
    
            scPostName.Item = currentItem;
            litPostDate.Text = currentItem.Statistics.Created.ToString("H:mm:ss MM/dd/yy");
            scPostComment.Item = currentItem;
        }
    }
    

    您的 Sitecore 查询在性能方面可能会非常昂贵,具体取决于您拥有多少内容以及内容树的深度,我不确定您使用的是哪个版本的 Sitecore,但无论如何您都希望为您的内容编制索引 (使用 Lucene)并使用它来检索帖子。如果您使用的是 Sitecore 7,请查看这篇关于 Linq to Sitecore 的帖子

    【讨论】:

    • 我喜欢这个想法,但我不知道如何让它适合我。我有一个要排序的项目的数组列表......我编辑了我的帖子以包含一些示例代码!
    • @SaraDeJaneiro 我更新了代码示例。您可能必须尝试使用​​/不使用.Reverse(),我不记得它是哪条路了...
    【解决方案2】:

    使用同样的思路,你也可以使用下面...

    var items = Sitecore.Context.Database.SelectItems("/sitecore/content/home/*").OrderByDescending(x => x.Statistics.Created);
    

    它消除了额外的代码行。

    【讨论】:

      猜你喜欢
      • 2013-06-03
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 2017-03-23
      相关资源
      最近更新 更多