在 Umbraco 中组合来自儿童的标签
Combining tags from children in 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 文档类型上,我有一个字段 tagsList
,编辑器可以在其中输入以逗号分隔的标签列表。
所以基本上我想从所有 BlogItems 中获取所有标签并将它们组合到一个列表中,其中删除了重复项。
我正在使用以下方式获取所有博客项目:
var blogItems = Umbraco.TypedContent(Model.Content.Id).Children.Where(x => x.DocumentTypeAlias == "BlogItem" && x.IsVisible());
但我不确定如何获取所有标签、合并和删除重复标签。
一种方法是创建一个 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>
但请注意,如果您有很多 children,这可能需要一些时间。
所以我建议检查 Umbraco 标签数据类型来做这样的事情:
https://shermandigital.com/blog/display-umbraco-tags-on-razor-templates/
您可以使用内置的 Umbraco 标记控件,而不是逗号分隔的列表,它应该允许您做您想做的事。
标签有 API 方法,允许您获取特定组等的所有标签。因此您可以设置一个标签 属性 编辑器,其中包含一个名为 [=14= 的组],您可以将其分配给您的博客文章,然后您可以使用标签 API 从该组中提取所有唯一标签来构建您的云。
我在 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 文档类型上,我有一个字段 tagsList
,编辑器可以在其中输入以逗号分隔的标签列表。
所以基本上我想从所有 BlogItems 中获取所有标签并将它们组合到一个列表中,其中删除了重复项。
我正在使用以下方式获取所有博客项目:
var blogItems = Umbraco.TypedContent(Model.Content.Id).Children.Where(x => x.DocumentTypeAlias == "BlogItem" && x.IsVisible());
但我不确定如何获取所有标签、合并和删除重复标签。
一种方法是创建一个 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>
但请注意,如果您有很多 children,这可能需要一些时间。
所以我建议检查 Umbraco 标签数据类型来做这样的事情:
https://shermandigital.com/blog/display-umbraco-tags-on-razor-templates/
您可以使用内置的 Umbraco 标记控件,而不是逗号分隔的列表,它应该允许您做您想做的事。
标签有 API 方法,允许您获取特定组等的所有标签。因此您可以设置一个标签 属性 编辑器,其中包含一个名为 [=14= 的组],您可以将其分配给您的博客文章,然后您可以使用标签 API 从该组中提取所有唯一标签来构建您的云。