簡體   English   中英

獲取列表中的上一個項目

[英]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。

如果要按模板類型進行限制,則可以使用precedingfollowing xpath查詢:

Item previous = Sitecore.Context.Item.Axes.SelectItems("./preceding::*[@@templateid='{template-guid}']").LastOrDefault();

Item next = Sitecore.Context.Item.Axes.SelectSingleItem("./following::*[@@templateid='{template-guid}']");

請注意在第一個查詢上使用SelectItemsLastOrDefault() 這兩個查詢都為您提供了按順序排序的項目列表。

您缺少在列表中停止搜索的條件,因此您總是返回列表中的最后一項。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM