我在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
,编辑器可以在其中输入以逗号分隔的标记列表。
所以基本上我想从所有BlogItem中获取所有标签,并将它们组合到一个删除了dublicates的列表中。
我正在使用以下内容获取所有博客项目:
var blogItems = Umbraco.TypedContent(Model.Content.Id).Children.Where(x => x.DocumentTypeAlias == "BlogItem" && x.IsVisible());
但我不知道如何获取所有标签,合并并移除共和国。
答案 0 :(得分: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/
答案 1 :(得分:0)
您可以使用内置的Umbraco标记控件,而不是以逗号分隔的列表,这样可以让您执行以后的操作。
标签的API方法允许您获取特定组等的标签。因此,您可以使用名为&#34; blog&#34;的组来设置标签属性编辑器。您可以将其分配给您的博客帖子,然后您可以使用Tags API从该组中提取所有唯一标记以构建您的云。