2016-11-07 6 views
0

私は以前の/次の設定を作業に使用していましたが、次の機能はうまくいきます。前のボタンについては、それは私にいくつかの問題を与えている。ここで リスト内の前の項目を取得する

は、これまでのコードです:私はあなたが前を取得するには、リスト内の現在の項目から1を減算する必要があることをもらう

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]; 
     } 
    } 

、これまでのところ、すべてこれはあるようですが表示されています前のボタンと全く同じエントリ。これは常に最新のエントリであり、前のエントリではありません。これは難しいことではないはずですが、私が扱おうとしている古いコードになる可能性があります。わからない。

答えて

5

あなたが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()の使用に注意してください。どちらのクエリでも、注文ごとにソートされたアイテムのリストが表示されます。

+0

ありがとうございました!これはトリックを行ったようです。 –

0

リスト内の検索を停止する条件がないため、常にリスト内の最後の項目が返されます。

Item prevEntry = null; 
for (int i = 0; i < EntryList.Length; i++) 
{   
    if (EntryList[i] == CurrentItem) 
    { 
     return prevEntry; 
    }   

    prevEntry = EntryList[i]; 
} 
+1

何も変更されていないようです。それは特定のポイントでリストを停止する感覚を作るが、私はこのコードを試して、それは結果を変更しませんでした。ある時点でEntryList [i-1]があるはずですか? –

+0

EntryListにCurrentItemが含まれていない可能性があります –

+0

EntryListループのすべてのエントリが現在のものを含めて取得されるようにコードを更新しました。しかし、結果に変化はない。 –

関連する問題