Ektron taxonomy and library items (in v9)

后端 未结 1 1873
孤城傲影
孤城傲影 2021-01-23 03:43

We recently upgraded from Ektron 8.6 to 9.0 (Ektron CMS400.NET, Version: 9.00 SP2(Build 9.0.0.249)).

I have some code (below) which we use to display links to items in a

1条回答
  •  不要未来只要你来
    2021-01-23 04:13

    I ended up emailing Ektron support in Sydney (I'm in Australia), and they said:

    I would expect ContentManager to only return content, not library items – must have been a loophole which is now closed. Taxonomy is the way to go.

    So I used some of the code they provided and came up with the following, which appears to work...

    private List getTaxonomyItems(long TaxonomyId)
    {
        List list = new List();
    
        TaxonomyManager taxManager = new TaxonomyManager(Ektron.Cms.Framework.ApiAccessMode.Admin);
        TaxonomyCriteria taxonomyCriteria = new Ektron.Cms.Organization.TaxonomyCriteria();
        taxonomyCriteria.AddFilter(Ektron.Cms.Organization.TaxonomyProperty.Path,
            Ektron.Cms.Common.CriteriaFilterOperator.StartsWith, GetTaxonomyPathById(TaxonomyId));
        List TaxonomyDataList = taxManager.GetList(taxonomyCriteria);
    
        foreach (TaxonomyData taxd in TaxonomyDataList)
        {
            TaxonomyData taxTree = taxManager.GetTree(taxd.Path,
            1, // depth. doesn't seem to work. have to manually tranverse lower taxonomies.
            true, // include items
            null,
            Ektron.Cms.Common.EkEnumeration.TaxonomyType.Content,
            Ektron.Cms.Common.EkEnumeration.TaxonomyItemsSortOrder.taxonomy_item_display_order);
    
            foreach (TaxonomyItemData taxItem in taxTree.TaxonomyItems)
            {
                list.Add(taxItem);
            }
        }
        return list;
    }
    
    private static String GetTaxonomyPathById(long taxonomyId)
    {
        TaxonomyManager tMgr = new TaxonomyManager();
        TaxonomyData tData = tMgr.GetItem(taxonomyId);
        if (tData != null)
        {
            return tData.Path;
        }
        return "";
    }
    

    This code fetches items for all the child taxonomies as well as returning library items. The one problem is that it fetches duplicates for some items, but those are easy to clean out.

    I was also told by Ektron that...

    TaxonomyManager.GetItem(“{path}”) is a more efficient way to get the categories

    That's why I've included the GetTaxonomyPathById() method (inspired by this blog post: http://www.nimbleuser.com/blog/posts/2009/iterating-through-ektron-content-in-multiple-taxonomies-via-directly-interfacing-with-search-indexing-services/ )

    0 讨论(0)
提交回复
热议问题