How to filter News by custom classification?

Posted by Community Admin on 05-Aug-2018 18:19

How to filter News by custom classification?

All Replies

Posted by Community Admin on 11-Mar-2011 00:00

Is there a way to filter News by custom classification?

Posted by Community Admin on 11-Mar-2011 00:00

Hi Sandeep,

There is a FilterExpression property in the lists definition of the control which you can use to filter the control by taxon, but you should know its ID.

Taxonomy.Contains("A9F2C13A-9472-4BF6-AB3D-19B2EF05B043")

Regards,
Ivan Dimitrov
the Telerik team

Registration for Q1 2011 What’s New Webinar Week is now open. Mark your calendar for the week starting March 21st and book your seat for a walk through all the exciting stuff we ship with the new release!

Posted by Community Admin on 17-Mar-2011 00:00

Adding the code you posted to the filter expression of the NewsFrontEndList control causes an Object Reference error. Is there a special syntax for this type of filter?
Filter Expression Used:
Visible = true AND Status = Live AND Taxonomy.Contains("3707be29-9620-4aab-b7a7-6457a6dc3269") 
Received Error

Object reference not set to an instance of an object.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
 
Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.
 
Source Error:
 
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
 
Stack Trace:
 
[NullReferenceException: Object reference not set to an instance of an object.]
   Telerik.Sitefinity.Data.Linq.Dynamic.ExpressionParser.FindMethod(Type type, String methodName, Boolean staticAccess, Expression[] args, MethodBase& method) +58
   Telerik.Sitefinity.Data.Linq.Dynamic.ExpressionParser.ParseMemberAccess(Type type, Expression instance) +665
   Telerik.Sitefinity.Data.Linq.Dynamic.ExpressionParser.ParsePrimary() +51
   Telerik.Sitefinity.Data.Linq.Dynamic.ExpressionParser.ParseUnary() +114
   Telerik.Sitefinity.Data.Linq.Dynamic.ExpressionParser.ParseMultiplicative() +54
   Telerik.Sitefinity.Data.Linq.Dynamic.ExpressionParser.ParseAdditive() +59
   Telerik.Sitefinity.Data.Linq.Dynamic.ExpressionParser.ParseComparison() +54
   Telerik.Sitefinity.Data.Linq.Dynamic.ExpressionParser.ParseLogicalAnd() +54
   Telerik.Sitefinity.Data.Linq.Dynamic.ExpressionParser.ParseLogicalOr() +54
   Telerik.Sitefinity.Data.Linq.Dynamic.ExpressionParser.ParseExpression() +27
   Telerik.Sitefinity.Data.Linq.Dynamic.DynamicExpression.ParseLambda(ParameterExpression[] parameters, Type resultType, String expression, Object[] values) +65


Thanks

Posted by Community Admin on 18-Mar-2011 00:00

Hello Sandeep,

What is the name of your custom taxonomy - "Taxonomy" or another one?

Regards,
Ivan Dimitrov
the Telerik team

Posted by Community Admin on 18-Mar-2011 00:00

Ivan,

My custom classification's name is not Taxonomy, it is 'PressRoomClassification'.
I also tried the following filter expression and still getting the same error.
Visible = true AND Status = Live AND PressRoomClassification.Contains("A9F2C13A-9472-4BF6-AB3D-19B2EF05B043")

Thanks

Posted by Community Admin on 23-Mar-2011 00:00

Hey guys, this question has been sitting for a few days now. The project Sandeep is working on is coming close to deadline. Is there a functional way to filter by a custom Taxonomy?

Posted by Community Admin on 28-Mar-2011 00:00

Hi Sandeep,
 
We currently don't support filtering for custom classifications.

However here is the way you can do it:

This gets 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());
 


Kind regards,
the Telerik team

Posted by Community Admin on 08-Jun-2011 00:00

To anyone that comes across this in the future, here is a function to handle getting items by custom classification.

private static IList<T> GetItemsByTaxonomy<T>(ITaxon taxon, ContentDataProviderBase contentProvider)
        
            var prop = TaxonomyManager.GetPropertyDescriptor(typeof (T), taxon);
                //GetPropertyDescriptor(typeof(T), taxon);
            int? totalCount = 0;
            return
                contentProvider.GetItemsByTaxon(taxon.Id, prop.MetaField.IsSingleTaxon, prop.Name, typeof (T),
                                                string.Empty, string.Empty, 0, 100, ref totalCount).Cast<T>().ToList();
        


Usage:

var taxon = TaxonomyManager.GetManager().GetTaxa<FlatTaxon>().Where(t => t.Name == "CarrierHostedCall").SingleOrDefault();
 
if (taxon != null)
    
        var evnts = GetItemsByTaxonomy<Event>(taxon, EventsManager.GetManager().Provider);
        foreach(Event evnt in events)
            do something....
    




Posted by Community Admin on 11-Jan-2012 00:00

I know this forum is a little old but for the sake of someone coming across this down the road I find that filtering new/events etc... by custom classification using filterexpression in the view works fine for me, such as
Visible = true AND Status = Live AND CustomClassification.Contains("A9F2C13A-9472-4BF6-AB3D-19B2EF05B043")

Is this something that was fixed in one of the releases because I see below you say it isn't supported.

Posted by Community Admin on 16-Jan-2012 00:00

Hello,

The filter for custom classifications was not working and this was a known issue. A lot of fixes were made lately and this is the reason for your successful filtering. However, if you find any problems with it, feel free to contact us.

Kind regards,
Bonny
the Telerik team

Explore the entire Telerik portfolio by downloading the Ultimate Collection trial package. Get it now >>

Posted by Community Admin on 07-Mar-2012 00:00

What is now (SiteFinity v4.4) the recommended way to filter RealEstate items by complex criteria including custom classification?

Posted by Community Admin on 13-Mar-2012 00:00

Hi Dan,
Not sure which is the recommended method of filtering custom classifications, but in 4.4 only this worked for me:

var filterExpression = DefinitionsHelper.GetFilterExpression(masterDefinition);
if (!String.IsNullOrEmpty(LocationFilter()))
    filterExpression += " AND Locations.Contains(\"" + LocationFilter() + "\")";

where LocationFilter was returning a guid as a string. i haven't upgraded my current project to 5 yet so maybe it is working there.
Thanks
Faiz

Posted by Community Admin on 19-Feb-2013 00:00

I am on Sitefintiy 5.0.1, and when I tried

Visible = true AND Status = Live AND Taxonomy.Contains("d004e36c-a186-47bd-a321-eb834f100162","9de21464-b26e-4945-8be4-fc8f2a0ed264")

OR

Visible = true AND Status = Live AND CustomClassification.Contains("d004e36c-a186-47bd-a321-eb834f100162","9de21464-b26e-4945-8be4-fc8f2a0ed264")

Both were accepted; solution recompiled, but it will not be usable when tried to drag to be used.

             Ming

This thread is closed