我有一个&#39; Colors&#39; 2级的分类法,我希望将每个父节点显示为页面的一个单独部分 - 用<h5>
分隔。
我的问题:如何获得分类法的父节点?其次,如何仅显示该父项的子节点?
我可以从调试中看到Slug附加在嵌套项目上(例如/parent-node/child-node
),但就我而言。
---- ---- UPDATE 我注意到父节点Path值总是&#39; /&#39;,然后子节点继续它直到下一个父节点被命中(只要我不手动排序它)。
所以我按照以下方式覆盖了我的形状:
@foreach (var term in terms)
{
if (term.Path == "/")
{
//It's a top-level term - add header
<h5>@term.Name</h5>
}
else
{
<div>@term.Name</div>
}
}
这种作品,但现在的问题是一切都按字母顺序显示 - 我的客户想要改变顺序。
我可以使用加权系统,但我喜欢更健壮的东西。
非常感谢任何帮助!
答案 0 :(得分:0)
分类法和术语都是术语容器。要仅获取分类中的父节点,您可以选择将分类法作为其容器的所有条款。
var parentTerms = terms.Where(t => t.Container == myTaxonomy);
您可以使用相同的方法来获取父项的子项(假设您只想深入一级,否则您必须递归执行此操作)。
foreach(var parentTerm in parentTerms) {
var childTerms = terms.Where(t => t.Container == parentTerm);
}
或者你可以在你的Controller中注入Orchard的分类法服务:
public class MyController : Controller {
private readonly ITaxonomyService _taxonomyService;
public MyController(ITaxonomyService _taxonomyService) {
this._taxonomyService = _taxonomyService;
}
}
这使您可以访问一些有用的方法,如
IEnumerable<TermPart> GetParents(TermPart term);
IEnumerable<TermPart> GetChildren(TermPart term);
IEnumerable<TermPart> GetChildren(TermPart term, bool includeParent);