2017-09-12 37 views
0

我在Umbraco网站上有一个博客部分,我想从每个博客项目中获取所有标签,并将它们组合到一个列表中,而不用分享,这样我就可以使用标签列表作为过滤器。在Umbraco中结合孩子的标签

我有这个部分,其中标签将被列为

<ul id="blogTags" class="inline-list"> 
    <li class="tag-item"><a href="#">Tag 1</a></li> 
    <li class="tag-item"><a href="#">Tag 2</a></li> 
    <li class="tag-item"><a href="#">Tag 3</a></li> 
    <li class="tag-item"><a href="#">Tag 4</a></li> 
</ul> 

在我BlogItem的doctype我有一个字段tagsList在编辑器可以输入一个逗号分隔的标签列表。

所以基本上我想从所有BlogItems中获取所有标签并将它们组合到一个列表中,其中dublicates被删除。

我使用让所有博客内容:

var blogItems = Umbraco.TypedContent(Model.Content.Id).Children.Where(x => x.DocumentTypeAlias == "BlogItem" && x.IsVisible()); 

但我不知道如何让所有的标签,合并和删除dublicates。

+0

'tagsList'是什么类型 - 一个文本字符串或? –

+0

tagsList是一个文本字符串 –

回答

0

这样做的一种方式是创建一个Hashset来存储标签并使用foreach来添加它。

,所以你可以这样做:

HashSet<string> uniqueTagList = new HashSet<string>(); 

var blogItems = Umbraco.TypedContent(Model.Content.Id).Children.Where(x => x.DocumentTypeAlias == "BlogItem" && x.IsVisible()); 

var tags = blogItems.Select(x => x.GetPropertyValue<string>("tagsList")); 

foreach(var tag in tags) 
{ 
    var splitTag = tag.Split(','); 
    foreach(var singleTag in splitTag) 
    { 
     uniqueTagList.Add(singleTag); 
    } 
} 

那么你uniqueTagList是所有的标签,你可以用它来创建列表

<ul id="blogTags" class="inline-list"> 
    @foreach(var tag in uniqueTagList) 
    { 
     <li class="tag-item"><a href="#">@tag</a></li> 
    } 
</ul> 

但要注意的列表,如果你有很多孩子,这可能需要一些时间。

所以我建议结账一把umbraco标签数据类型做这样的事情:

https://shermandigital.com/blog/display-umbraco-tags-on-razor-templates/

https://shermandigital.com/blog/get-umbraco-content-by-tag/

0

,而不是一个逗号分隔的列表,你可以使用内置的一把umbraco标记控制,这应该让你做你以后的事情。

这些标签有API方法,可以让您为特定的组获得al标签。因此,您可以设置一个名为“blog”的标签属性编辑器,您可以将其分配给您的博客文章,以及那么您可以使用标签API从该组中抽出所有唯一标签来构建您的云。