结合Umbraco儿童的标签

时间:2017-09-12 06:30:22

标签: c# html asp.net razor 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,编辑器可以在其中输入以逗号分隔的标记列表。

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

我正在使用以下内容获取所有博客项目:

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

但我不知道如何获取所有标签,合并并移除共和国。

2 个答案:

答案 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/

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

答案 1 :(得分:0)

您可以使用内置的Umbraco标记控件,而不是以逗号分隔的列表,这样可以让您执行以后的操作。

标签的API方法允许您获取特定组等的标签。因此,您可以使用名为&#34; blog&#34;的组来设置标签属性编辑器。您可以将其分配给您的博客帖子,然后您可以使用Tags API从该组中提取所有唯一标记以构建您的云。