获取列表中的上一项

Dej*_*can 0 c# sitecore

我已经在工作中进行了上一个/下一个设置,并且下一个功能正常工作(尽管这是由其他人一段时间创建的).至于上一个按钮,这给了我一些问题.

这是迄今为止的代码:

    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];
        }
    }
Run Code Online (Sandbox Code Playgroud)

我得到你需要从列表中的当前项中减去1以获得前一个,但到目前为止,所有这些似乎都是显示前一个按钮的完全相同的条目.它始终是列表中的最新条目,而不是之前的条目.我觉得这应该不是那么困难,但它可能是我正在尝试使用的旧代码.不确定.

jam*_*kam 6

您可以使用GetPreviousSibling()GetNextSibling()方法:

Sitecore.Context.Item.Axes.GetPreviousSibling()

Sitecore.Context.Item.Axes.GetNextSibling()
Run Code Online (Sandbox Code Playgroud)

这些将返回上一个和下一个兄弟,如果当前项分别是第一个/最后一个,则返回null.

如果要按模板类型进行限制,则可以使用precedingfollowingxpath查询:

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

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

注意第一个查询的使用SelectItemsLastOrDefault().两个查询都会为您提供按订单排序的项目列表.