Orchardcms Orchard分类-仅获取父节点

Orchardcms Orchard分类-仅获取父节点,orchardcms,Orchardcms,我有一个“颜色”分类法,有两个级别,我希望将每个父节点显示为页面的一个单独部分,例如用分隔 我的问题是:如何只获取分类法的父节点?其次,如何仅显示该父项的子节点 通过调试,我可以看到Slug被附加到嵌套项上(例如,/parent node/child node),但这就是我所能做到的 ----更新---- 我注意到父节点路径值始终为“/”,然后子节点继续执行它,直到命中下一个父节点(只要我不手动排序) 因此,我覆盖了我的形状,如下所示: @foreach (var term in terms)

我有一个“颜色”分类法,有两个级别,我希望将每个父节点显示为页面的一个单独部分,例如用
分隔

我的问题是:如何只获取分类法的父节点?其次,如何仅显示该父项的子节点

通过调试,我可以看到Slug被附加到嵌套项上(例如,
/parent node/child node
),但这就是我所能做到的

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

因此,我覆盖了我的形状,如下所示:

@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>
    }
}
@foreach(变量术语)
{
如果(term.Path==“/”)
{
//这是一个顶级术语-添加标题
@术语名称
}
其他的
{
@术语名称
}
}
这种方式很有效,但现在的问题是,所有内容都是按字母顺序显示的——我的客户希望更改顺序

我可以使用称重系统,但我想要更坚固一点的


非常感谢任何帮助

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

var parentTerms=terms.Where(t=>t.Container==myTaxonomy);
您可以使用相同的方法获取父项的子项(假设您只想深入一层,否则必须递归地进行)

foreach(parentTerms中的var parentTerm){
var childTerms=terms.Where(t=>t.Container==parentTerm);
}
或者,您可以在控制器中插入Orchard的分类服务:

公共类MyController:Controller{
私有只读ITaxonomyService(U分类服务);
公共MyController(ITaxonomyService\u分类服务){
这个._taxonyservice=_taxonyservice;
}
}
这使您可以访问一些有用的方法,如

IEnumerable GetParents(术语部分术语);
IEnumerable GetChildren(术语部分术语);
IEnumerable GetChildrent(术语部分术语,布尔值包括家长);

你是说分类菜单之类的东西吗?谢谢@devqon,但我不能真正使用小部件,因为我可能要创建数百个项目,需要数百个匹配层,不是吗?