[英]Get Previous item in a list
我在工作中進行了上一個/下一個設置,下一個功能運行正常(盡管這是由其他人創建的)。 至於上一個按鈕,這給了我一些問題。
這是到目前為止的代碼:
private Item getPrevious()
{
Item CurrentItem = Sitecore.Context.Item;
var blogHomeID = "{751B0E3D-26C2-489A-8B8C-8D40E086A970}";
Item BlogItem =db.Items.GetItem(blogHomeID);
Item[] EntryList= BlogItem.Axes.SelectItems("descendant::*[@@templatename='BlogEntry']");
Item prevEntry = null;
for (int i = 0; i < EntryList.Length; i++)
{
if (EntryList[i] == CurrentItem)
{
return prevEntry;
}
prevEntry = EntryList[i];
}
}
我知道您需要從列表中的當前項目中減去1才能獲得前一個,但是到目前為止,這似乎只顯示了與前一個按鈕完全相同的條目。 它始終是列表中的最新條目,而不是前一個。 我覺得這應該沒那么難,但是可能是我嘗試使用的舊代碼。 不確定。
您可以使用GetPreviousSibling()
和GetNextSibling()
方法:
Sitecore.Context.Item.Axes.GetPreviousSibling()
Sitecore.Context.Item.Axes.GetNextSibling()
它們將返回上一個和下一個同級;如果當前項分別是第一個/最后一個,則返回null。
如果要按模板類型進行限制,則可以使用preceding
和following
xpath查詢:
Item previous = Sitecore.Context.Item.Axes.SelectItems("./preceding::*[@@templateid='{template-guid}']").LastOrDefault();
Item next = Sitecore.Context.Item.Axes.SelectSingleItem("./following::*[@@templateid='{template-guid}']");
請注意在第一個查詢上使用SelectItems
和LastOrDefault()
。 這兩個查詢都為您提供了按順序排序的項目列表。
您缺少在列表中停止搜索的條件,因此您總是返回列表中的最后一項。
Item prevEntry = null;
for (int i = 0; i < EntryList.Length; i++)
{
if (EntryList[i] == CurrentItem)
{
return prevEntry;
}
prevEntry = EntryList[i];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.