2017-08-16 10 views
0

現在のノード/アイテムのタグの1つと同じタグが付いた特定のドキュメントタイプのアイテムをすべて取得しようとしています。Forループ複数のタグを持つUmbraco TagQueryを使用して関連ノード/アイテムを取得する

私は明示的に経由して、それを宣言することにより、タグのすべての関連アイテムを取得することができます:

var taggedContent = Umbraco.TagQuery.GetContentByTag("Tag1"); 
var taggedItems = taggedContent.Where(c => c.IsDocumentType("SpecificPageType", true) && c.IsVisible()); 

しかし、GetContentByTagは一つだけ引数を取るよう、私が使用するforeachループを構築するかどうかはわかりませんタグの私のリスト。

私は.OrderBy("Id descending")で注文できるように、各タグのすべての関連項目を組み合わせた関連項目のリストを作成するforeachループを作成したいと考えています。

はここで働く私の現在の静的コードです:私は、ループを構築しようとする試み失敗した

var tags = Umbraco.TagQuery.GetTagsForEntity(Node.getCurrentNodeId()).DistinctBy(t => t.Text).OrderBy(t => t.Text); 
var taggedContent = Umbraco.TagQuery.GetContentByTag("Tag1"); 
var taggedItems = taggedContent.Where(c => c.IsDocumentType("SpecificPageType", true) && c.IsVisible()); 
foreach (var relatedItem in taggedItems) 
{ 
<a href="@relatedItem.Url"> 
    @{ 
     var pageTitle = relatedItem.GetPropertyValue("pageTitle").ToString(); 
    } 
    <h6>@Umbraco.Truncate(pageTitle, 80, true)</h6> 
</a> 
} 

var tags = Umbraco.TagQuery.GetTagsForEntity(Node.getCurrentNodeId()).DistinctBy(t => t.Text).OrderBy(t => t.Text); 
var listIWant = new List<IPublishedContent>(); 

foreach (var tag in tags) 
{ 
var taggedContent = Umbraco.TagQuery.GetContentByTag(tag.ToString()); 
var taggedItems = taggedContent.Where(c => c.IsDocumentType("SpecificPageType", true) && c.IsVisible()); 

//How to modify the list here? 

} 

//OR 

var tagsCount = tags.Count(); 
for (var i = 0; i < tagsCount; i++) 
{ 
var taggedContent = Umbraco.TagQuery.GetContentByTag(tag.ToString()); 
var taggedItems = taggedContent.Where(c => c.IsDocumentType("SpecificPageType", true) && c.IsVisible()); 

//How to modify the list here? 

} 
// Modified the list to contain everything in the loop above, now order it 
var orderedList = listIWant.OrderBy("Id descending"); 
// Create links from ordered list 
foreach (var relatedItem in orderedList) 
{ 
<a href="@relatedItem.Url"> 
    @{ 
     var pageTitle = relatedItem.GetPropertyValue("pageTitle").ToString(); 
    } 
    <h6>@Umbraco.Truncate(pageTitle, 80, true)</h6> 
</a> 
} 

を任意の助けてくれてありがとうと私は不明確だか、必要な場合は私に知らせてさらに詳しい情報。

答えて

0

私は正しくforeachループを構築してリストを作成し、リストを処理して重複を削除し、必要な順序で並べ替えることができました。うまくいけば、これは他の誰かを助けるでしょうそれを行うのが最も効率的な方法だと思いますが、うまくいきます。

コード:

// Get tags of current item I'm on 
    var tags = Umbraco.TagQuery.GetTagsForEntity(Node.getCurrentNodeId()).DistinctBy(t => t.Text).OrderBy(t => t.Text); 

    // Create blank list to add to in foreach loop 
    var combinedList = new List<IPublishedContent>(); 

    // Get related content by tag for each tag, add to the list 
    foreach (var tag in tags) 
    { 
     var tagString = tag.Text; 
     var taggedContent = Umbraco.TagQuery.GetContentByTag(tagString); 
     combinedList.AddRange(taggedContent); 
    } 

    // Filter list to only idea items, order by latest, then remove duplicates 
    var taggedItems = combinedList.Where(c => c.IsDocumentType("NewsPage", true) && c.IsVisible() && c.Id != CurrentPage.Id).OrderBy("Id descending").DistinctBy(x => x.Id).Take(8); 

    if (taggedItems.Any()) 
    { 
     foreach (var relatedItem in taggedItems) 
     { 
     <a href="@relatedItem.Url"> 
     @{ 
      var pageTitle = relatedItem.GetPropertyValue("pageTitle").ToString(); 
     } 
     <h6>@Umbraco.Truncate(pageTitle, 80, true)</h6> 
    </a> 
    } 
関連する問題