Sitecore Feed latest 2 items

本文关键字:items latest Feed Sitecore | 更新日期: 2023-09-27 17:58:15

我有一个sitecore web部件,我正在尝试使用它来显示按日期排列的前两个最新项目。我遇到麻烦了,因为我只能拿到最新的商品来展示。

对于ascx代码:

    <asp:Repeater ID="newsContainer" runat="server">
        <ItemTemplate>
    <div class="newsItem">
    <h2><a href="/about-us/news.aspx">News</a></h2>
        <a href="<%# SitecoreUtility.NavigateUrl((Item)Container.DataItem)%>" class="newsHeadline">
 <span>  <sc:Date ID="Date1" Item="<%# Container.DataItem %>" Field="Posted-Date" Format="MM.dd.yyyy" runat="server" />    
 <sc:Text ID="Text1" Item="<%# Container.DataItem %>" Field="Title" runat="server" />
    </span>
            </a>
         <!--  <p class="newsSummary">
                <asp:Literal ID="litBody" runat="server" Text="<%# SitecoreUtility.TruncateByWords(((Item)Container.DataItem).Fields[Constants.Fields.BODY].Value, 20) %>"></asp:Literal>
                 ...
                <a href="<%# SitecoreUtility.NavigateUrl((Item)Container.DataItem)%>"     class="more">+ More</a></p> -->
        </div>
    </ItemTemplate>
</asp:Repeater>

<asp:Panel ID="pnlPagination" runat="server"></asp:Panel>
<asp:Panel ID="pnlArchive" runat="server">
  <!--  <div class="newsArchiveLink">
      <a href="?type=archive">View Archived News</a>
    </div> -->
</asp:Panel>
<asp:Panel ID="pnlCurrent" runat="server">
    <div class="newsArchiveLink">
      <a href="?type=current">View Current News</a>
    </div>
</asp:Panel>

对于ASCX.CS文件:

public partial class Homepage_NewsListing : BaseSublayout
{
    int CurrentPage = 1;
    int PageSize = Constants.Values.SEARCH_SMALL_LIST;
    protected void Page_Load(object sender, EventArgs e)
    {

        CurrentPage = int.Parse(WebUtil.GetQueryString("page", "1"));
        List<Item> newsListings = new List<Item>();
        Item newsItems = SitecoreUtility.Db.GetItem(Constants.Items.NEWS);
        if (WebUtil.GetQueryString("type", "") == "archive")
        {
            newsListings = newsItems.Children.Where(item =>
                        (SitecoreUtility.FormatDateAtMidnight(item, Constants.Fields.ARCHIVEDATE) <= DateTime.Now)
                        &&
                        (!string.IsNullOrEmpty(item.Fields[Constants.Fields.ARCHIVEDATE].Value))
                    ).OrderBy(item => item.Fields[Constants.Fields.POSTED_DATE].Value).ToList();
            pnlArchive.Visible = false;
            //pnlCurrent.Visible = true;
            pnlCurrent.Visible = false;
        }
        else
        {
            newsListings = newsItems.Children.Where(item =>
                        (SitecoreUtility.FormatDateAtMidnight(item, Constants.Fields.ARCHIVEDATE) > DateTime.Now)
                        ||
                        (string.IsNullOrEmpty(item.Fields[Constants.Fields.ARCHIVEDATE].Value))
                    ).OrderBy(item => item.Fields[Constants.Fields.POSTED_DATE].Value).ToList();
            //pnlArchive.Visible = true;
            pnlArchive.Visible = false;
            pnlCurrent.Visible = false;
        }
        newsContainer.DataSource = DisplayResults(newsListings.OrderByDescending(item => item.Fields[Constants.Fields.POSTED_DATE].Value).ToList());
        newsContainer.DataBind();
    }
    protected List<Item> DisplayResults(List<Item> results)
    {
        pnlPagination.Controls.Add(new Pager(results.Count, PageSize, CurrentPage).BuildPaging());
        if (CurrentPage > 1)
            return results.Skip((CurrentPage - 1) * PageSize).Take(PageSize).ToList();
        return results.Take(PageSize).ToList();
    }
}

Sitecore Feed latest 2 items

我首先会尝试让代码更简单一点(用于调试),并使用快速查询来提取日期范围内的项目。

var date = DateTime.Now.AddMonths(3);
var dateString = date.Year.ToString() + date.Month.ToString().PadLeft(2, '0') +     date.Day.ToString().PadLeft(2, '0');
var newsList = Sitecore.Context.Database.SelectItems("fast:/sitecore/content/home/your-path-to-news/*[@@templatename='Your template name' and @POSTED_DATE > '" + dateString + "']").ToList();
newsList = newsList.OrderByDescending(n => n.Fields["POSTED_DATE"].Value).Take(2).ToList();
newsContainer.DataSource = newsList;
newsContainer.DataBind();