Orchard Taxonomies - 仅获取父节点

时间:2016-02-17 11:28:24

标签: orchardcms

我有一个&#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>
    }
}

这种作品,但现在的问题是一切都按字母顺序显示 - 我的客户想要改变顺序。

我可以使用加权系统,但我喜欢更健壮的东西。

非常感谢任何帮助!

1 个答案:

答案 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);