获取列表中的上一项

本文关键字:一项 列表 获取 | 更新日期: 2023-09-27 18:16:47

我在工作中有一个前一个/下一个设置,下一个功能工作正常(尽管,这是由其他人创建的)。至于上一个按钮,它给了我一些问题。

下面是到目前为止的代码:
    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];
}