Orchard Taxonomies - 仅获取父节点

Orchard Taxonomies - Get Parent Nodes only

我有一个具有 2 个级别的 'Colours' 分类法,我希望将每个父节点显示为页面的一个单独部分 - 假设由 <h5> 分隔。

我的问题:如何只获取分类的父节点?其次,如何只显示该父术语的子节点?

我可以从调试中看到 Slug 附加在嵌套项目上(例如 /parent-node/child-node),但这就是我所知道的。

----更新---- 我注意到父节点 Path 值始终为“/”,然后子节点继续执行它,直到命中下一个父节点(只要我不手动对其进行排序)。

所以我已经覆盖了我的形状如下:

@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>
    }
}

这种方法可行,但现在的问题是所有内容都按字母顺序显示 - 我的客户想更改顺序。

我可以使用加权系统,但我想要更强大的系统。

非常感谢任何帮助!

分类法和术语都是术语的容器。要仅获取分类法中的父节点,您可以 select 所有将分类法作为容器的术语。

var parentTerms = terms.Where(t => t.Container == myTaxonomy);

您可以使用相同的方法为父项获取子项(假设您只想深入一层,否则您必须递归执行此操作)。

foreach(var parentTerm in parentTerms) {
    var childTerms = terms.Where(t => t.Container == parentTerm);
}

或者,您可以在控制器中注入 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);