Sitefinity 4.0 Taxonomy Categorization
Hi all,
I am wondering if anyone here has had any experience with the TaxonomyManager in sitefinity 4.0.
I have a requirement to be able to get "all" content, images, blogs, generic content etc that are associated with a particular category, Also, I am trying to understand the correct way to iterate (in a recursive way) the HierarchicalTaxon items that make up the Categories in Sitefinity 4.0.
Any example code on that would be great :)
Kind Regards
Haydn
Hi Haydn,
Below is sample code that illustrates how to get all items associated with a given taxon
private
TaxonomyPropertyDescriptor GetPropertyDescriptor(Type itemType, ITaxon taxon)
return
TaxonomyManager.GetPropertyDescriptor(itemType, taxon);
private
IEnumerable GetItems(ITaxon taxon, ContentDataProviderBase contentProvider, Type itemType)
TaxonomyPropertyDescriptor prop = GetPropertyDescriptor(itemType, taxon);
int
? totalCount = 0;
var items = contentProvider.GetItemsByTaxon(taxon.Id, prop.MetaField.IsSingleTaxon, prop.Name, itemType,
string
.Empty,
string
.Empty, 0, 100,
ref
totalCount);
return
items;
void
Button1_Click(
object
sender, EventArgs e)
var taxonomyManager = TaxonomyManager.GetManager();
var taxonGuidId =
new
Guid(
"e75879c5-7b60-4945-b853-d738df2d7229"
);
ITaxon taxon = taxonomyManager.GetTaxon(taxonGuidId);
string
itemTypeName =
"Telerik.Sitefinity.GenericContent.Model.ContentItem"
;
Type itemType = TypeResolutionService.ResolveType(itemTypeName);
var manager = ManagerBase.GetMappedManager(itemType,
""
);
ContentDataProviderBase contentProvider = manager.Provider
as
ContentDataProviderBase;
GetItems(taxon, contentProvider, itemType);
Hi Ivan,
Thanks again :) Such quick responses and helpful code as always.
Many Thanks
Haydn
Hi,
This worked for me to get a list of news items with the tag "one" that were live:
private
TaxonomyPropertyDescriptor GetPropertyDescriptor(Type itemType, ITaxon taxon)
return
TaxonomyManager.GetPropertyDescriptor(itemType, taxon);
private
IEnumerable GetItems(ITaxon taxon, ContentDataProviderBase contentProvider, Type itemType)
TaxonomyPropertyDescriptor prop = GetPropertyDescriptor(itemType, taxon);
int
? totalCount = 0;
var items = contentProvider.GetItemsByTaxon(taxon.Id, prop.MetaField.IsSingleTaxon, prop.Name, itemType,
string
.Empty,
string
.Empty, 0, 100,
ref
totalCount);
return
items;
public
void
Button1_Click(
object
sender, EventArgs e)
List<NewsItem> niL =
new
List<NewsItem>();
TaxonomyManager taxManager = TaxonomyManager.GetManager();
//Get the tag called "One"
var taxon = taxManager.GetTaxa<FlatTaxon>().Where(t => t.Name ==
"One"
).Single();
//I want the news items
string
itemTypeName =
"Telerik.Sitefinity.News.Model.NewsItem"
;
Type itemType = TypeResolutionService.ResolveType(itemTypeName);
var manager = ManagerBase.GetMappedManager(itemType,
""
);
ContentDataProviderBase contentProvider = manager.Provider
as
ContentDataProviderBase;
var v = GetItems(taxon, contentProvider, itemType);
//Load into strongly typed list
foreach
(NewsItem n
in
v)
niL.Add(n);
Response.Write(niL.Where(a => a.Status == ContentLifecycleStatus.Live).First());
Excellent. This is exactly what I need. Thanks!
I am trying to use this code in a custom widget, but not able to compile. I think I am missing a reference or using statement because I get two errors. First is the "GetItems" method on IEnumerable, "Using generic type 'System.Collection.Generic.IEnumerable<T>' requires 1 tpye arguments". And the second error is with TypeResolutionService, VS doesn't recognize that.
Hello ,
TypeResolutionService
is part of Telerik.Sitefinity.Utilities.TypeConverters. IEnumerable interface is part of System.Collections.
msdn.microsoft.com/.../system.collections.ienumerable.aspx
Best wishes,
Ivan Dimitrov
the Telerik team
Using your examples, I am trying to get event items associated with category and bind to a radtreeview.
protected void RadTreeView_NodeDataBound(object o, RadTreeNodeEventArgs e)
TaxonomyManager taxManager = TaxonomyManager.GetManager();
var taxon = taxManager.GetTaxonomies<HierarchicalTaxonomy>().Where(t => t.Name == "events"
string itemTypeName = "Telerik.Sitefinity.Events.Model.Event";
Type itemType = TypeResolutionService.ResolveType(itemTypeName);
var manager = ManagerBase.GetMappedManager(itemType, "");
EventsDataProvider eventProvider = manager.Provider as EventsDataProvider;
var v = GetItems(taxon, eventProvider, itemType);
//Load into radtree
foreach (Event t in v)
var radTreeNode = new RadTreeNode
RadTreeView.Nodes.Add(radTreeNode);
private TaxonomyPropertyDescriptor GetPropertyDescriptor(Type itemType, ITaxon taxon)
return TaxonomyManager
private IEnumerable GetItems(ITaxon taxon, EventsDataProvider eventProvider, Type
TaxonomyPropertyDescriptor prop = GetPropertyDescriptor(itemType, taxon);
int? totalCount = 0;
var items = eventProvider.GetItemsByTaxon(taxon.Id, prop.MetaField.IsSingleTaxon, prop.Name, itemType, string.Empty, string.Empty, 0, 100, ref
return items;
What am I doing wrong.
Error :Getitems is overloaded
Hello nana,
Could you send the stack of the error and entire error message.
Greetings,
Ivan Dimitrov
the Telerik team
Description: An error occurred during the compilation of a resource required to service this request. Please review the following specific error details and modify your source code appropriately.
Compiler Error Message: CS1502: The best overloaded method match for 'TBprogramsMaster.GetItems(Telerik.Sitefinity.Taxonomies.Model.ITaxon, Telerik.Sitefinity.Modules.Events.EventsDataProvider, System.Type)' has some invalid arguments
Source Error:
|
Source File: d:\inetpub\FD_CMS\ODSTB\App_Data\Sitefinity\WebsiteTemplates\ODSTB_Templates\App_Master\TBprogramsMaster.Master.cs Line: 88
Show Detailed Compiler Output:
|
Hello nana,
The error says that you are passing not proper parameters to the custom method. Please check whether you use the proper types.
All the best,
Ivan Dimitrov
the Telerik team
( sitefinity.com is throwing errors when i'm trying to submit a reply, causing reposts... )
( sitefinity.com is throwing errors when i'm trying to submit a reply, causing reposts... )
Hi,
Is there an API documented for the taxonomy classes other than this:
Hello Trevor,
The API reference can be found in our SDK. Please check the attached screenshot.
All the best,
Victor Velev
the Telerik team