我正在进行上一个/下一个设置,下一个功能正常工作(尽管这是由其他人一段时间创建的)。至于上一个按钮,这给了我一些问题。
以下是目前的代码:
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以获得前一个,但到目前为止,所有这些似乎都是显示前一个按钮的完全相同的条目。它始终是列表中的最新条目,而不是之前的条目。我觉得这不应该是那么困难,但它可能是我尝试使用的旧代码。不确定。
答案 0 :(得分:6)
您可以使用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()
。两个查询都会为您提供按顺序排序的项目列表。
答案 1 :(得分:0)
您错过了在列表中停止搜索的条件,因此您始终会返回列表中的最后一项。
Item prevEntry = null;
for (int i = 0; i < EntryList.Length; i++)
{
if (EntryList[i] == CurrentItem)
{
return prevEntry;
}
prevEntry = EntryList[i];
}