Getting all Tags from all items on Page where my Widget is o

Posted by Community Admin on 04-Aug-2018 11:30

Getting all Tags from all items on Page where my Widget is on

All Replies

Posted by Community Admin on 04-Aug-2014 00:00

Hi guys,

Here is what I'm trying to build: http://imgur.com/l7dSYgE

I'm struggling with the following:
Is it possible to find all current widgets on a page where my widget is on and get their associated tags? And if so, how?

I think I'll be able to manage to put the resulting content (related news, etc) together myself.

Posted by Community Admin on 04-Aug-2014 00:00

This may not be the cleanest code you've seen and I'm sure there could be some improvement to it but I managed to figure it out myself.

public class SitefinityHelper
    
        public static List<string> GetTagsForSitefinityObject(IDataItem dataItem)
        
            if (dataItem != null)
            
                var propDesc = OrganizerBase.GetProperty(dataItem.GetType(), "Tags") as TaxonomyPropertyDescriptor;
                if (propDesc != null)
                
                    var taxonIds = propDesc.GetValue(dataItem) as IList<Guid>;
                    var taxonomyManager = TaxonomyManager.GetManager();
                    var taxa = new List<string>();
                    foreach (var taxonId in taxonIds)
                    
                        taxa.Add(taxonomyManager.GetTaxon(taxonId).Title);
                    
                    return taxa;
                
            
            return new List<string>();
        
 
    

protected IList<object> GetAllTagsFromAllWidgetsOnThisPage()
        
            using (var fluent = App.WorkWith())
            
                SiteMapNode currentNode = SiteMap.CurrentNode;
                if (currentNode != null)
                
                    var pm = PageManager.GetManager();
                    var controls = fluent.Page(new Guid(currentNode.Key)).AsStandardPage().CheckOut().Get().Controls;
                    string controlInfo = string.Empty;
                     
                    var tags = new List<string>();
 
                    if (controls != null || controls.Count > 0)
                    
                        foreach (PageDraftControl pageControl in controls)
                        
                            switch (pageControl.ObjectType.ToString())
                            
                                case "Telerik.Sitefinity.Web.UI.LayoutControl, Telerik.Sitefinity":
                                case "~/Custom/ControlWidgets/RelatedItemsWidget.ascx":
                                    break; //ignore these
                                case "Telerik.Sitefinity.Modules.GenericContent.Web.UI.ContentBlock":
                                    // get tags from contentblock
                                    tags.AddRange(getTagsFromContentBlock(pageControl));
                                    break;
                                case "Telerik.Sitefinity.Modules.News.Web.UI.NewsView":
                                    // get tags from newsview
                                    tags.AddRange(getTagsFromNewsView(pageControl));
                                    break;
                                case "Telerik.Sitefinity.Modules.Blogs.Web.UI.BlogPostView":
                                    // get tags from blogpostview
                                    tags.AddRange(getTagsFromBlogPostView(pageControl));
                                    break;
                                case "Telerik.Sitefinity.Modules.Events.Web.UI.EventsView":
                                    // get tags from eventsview
                                    tags.AddRange(getTagsFromEventsView(pageControl));
                                    break;
                                case "Telerik.Sitefinity.Modules.Libraries.Web.UI.Videos.MediaPlayerControl, Telerik.Sitefinity":
                                    // get tags from mediaplayercontrol
                                    tags.AddRange(getTagsFromMediaPlayerControl(pageControl));
                                    break;
                                case "Telerik.Sitefinity.Modules.Libraries.Web.UI.Documents.DocumentLink":
                                    // get tags from documentlink (libraryitem)
                                    tags.AddRange(getTagsFromDocumentLink(pageControl));
                                    break;
                            
 
                            controlInfo += string.Format("0<br/ >", pageControl.ObjectType);
                        
                    
                    LabelExistingTags.Text += controlInfo + "<br/> All The TAGS:<br/>" + string.Join(", ", tags.ToArray());
                
            
            return null;
        
 
        private List<string> getTagsFromDocumentLink(PageDraftControl pageControl)
        
            var ctl = PageManager.GetManager().LoadControl(pageControl) as DocumentLink;
            if (ctl == null) return null;
            var dataItems = App.WorkWith().Documents().Where(d => d.Id == ctl.DocumentId);
            var response = new List<string>();
            int c;
            dataItems.Count(out c);
            if (c > 0)
                dataItems.ForEach(x => response.AddRange(SitefinityHelper.GetTagsForSitefinityObject(x)));
            return response;
        
        private List<string> getTagsFromMediaPlayerControl(PageDraftControl pageControl)
        
            var ctl = PageManager.GetManager().LoadControl(pageControl) as MediaPlayerControl;
            if (ctl == null) return null;
            var dataItems = App.WorkWith().Videos().Where(d => d.Id == ctl.MediaContentId);
            var response = new List<string>();
            int c;
            dataItems.Count(out c);
            if (c > 0)
                dataItems.ForEach(x => response.AddRange(SitefinityHelper.GetTagsForSitefinityObject(x)));
            return response;
        
        private List<string> getTagsFromEventsView(PageDraftControl pageControl)
        
            var ctl = PageManager.GetManager().LoadControl(pageControl) as EventsView;
            if (ctl == null) return null;
            var id = (ctl.ControlDefinition.Views[1] as EventsViewDetailDefinition).DataItemId;
            var dataItems = App.WorkWith().Events().Where(d => d.Id == id);
            var response = new List<string>();
            int c;
            dataItems.Count(out c);
            if (c > 0)
                dataItems.ForEach(x => response.AddRange(SitefinityHelper.GetTagsForSitefinityObject(x)));
            return response;
        
        private List<string> getTagsFromBlogPostView(PageDraftControl pageControl)
        
            var ctl = PageManager.GetManager().LoadControl(pageControl) as BlogPostView;
            if (ctl == null) return null;
            var id = (ctl.ControlDefinition.Views[1] as Telerik.Sitefinity.Web.UI.ContentUI.ContentViewDetailDefinition).DataItemId;
            var dataItems = App.WorkWith().BlogPosts().Where(d => d.Id == id);
            var response = new List<string>();
            int c;
            dataItems.Count(out c);
            if(c > 0)
                dataItems.ForEach(x => response.AddRange(SitefinityHelper.GetTagsForSitefinityObject(x)));
            return response;
        
        private List<string> getTagsFromNewsView(PageDraftControl pageControl)
        
            var ctl = PageManager.GetManager().LoadControl(pageControl) as NewsView;
            if (ctl == null) return null;
            var id = (ctl.ControlDefinition.Views[1] as Telerik.Sitefinity.Web.UI.ContentUI.ContentViewDetailDefinition).DataItemId;
            var dataItems = App.WorkWith().NewsItems().Where(d => d.Id == id);
            var response = new List<string>();
            int c = 0;
            dataItems.Count(out c);
            if(c > 0)
                dataItems.ForEach(x => response.AddRange(SitefinityHelper.GetTagsForSitefinityObject(x)));
            return response;
        
        private List<string> getTagsFromContentBlock(PageDraftControl pageControl)
        
            var ctl = PageManager.GetManager().LoadControl(pageControl) as ContentBlock;
            if (ctl == null) return null;
            var dataItems = App.WorkWith().ContentItems().Where(d => d.Id == ctl.SharedContentID);
            var response = new List<string>();
            int c=0;
            dataItems.Count(out c);
            if (c > 0)
                dataItems.ForEach(x => response.AddRange(SitefinityHelper.GetTagsForSitefinityObject(x)));
            return response;
        

This thread is closed