我无法确定如何根据创建日期按降序排列项目列表(我知道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();
}
答案 0 :(得分:4)
您可以使用LINQ对项目进行排序:
var items = Sitecore.Context.Database.SelectItems("/sitecore/content/home/*");
items = items.OrderBy(x => x[Sitecore.FieldIDs.Created]).Reverse();
显然更改查询或项目列表以符合您的要求。
添加代码后编辑:
在ascx中设置转发器,我们将使用Sitecore FieldRenderer但在此控件中禁用webediting:
<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
的帖子答案 1 :(得分:2)
使用相同的想法,您也可以使用以下...
var items = Sitecore.Context.Database.SelectItems("/sitecore/content/home/*").OrderByDescending(x => x.Statistics.Created);
它消除了额外的代码行。