Rotating Content with Sitefinity 4.0

Posted by Community Admin on 03-Aug-2018 02:06

Rotating Content with Sitefinity 4.0

All Replies

Posted by Community Admin on 21-Feb-2011 00:00

Hi,

I'm trying to get rotating content with Sitefinity. Here's where I am right now:

var pageGuids = App.WorkWith().Pages().LocatedIn(Telerik.Sitefinity.Fluent.Pages.PageLocation.Frontend)
                .Where(page => page.ShowInNavigation == true && page.ApprovalWorkflowState == "Published")
                .Get().Select(page => page.Id).ToArray();
            
Random rng = new Random();
Guid randomGuid = pageGuids[rng.Next(0, pageGuids.Length)];

PageNode pn = App.WorkWith().Page(randomGuid).Get();

Now, this approach may not optimal but it works. However, I'm stuck with figuring out a way of rendering that PageNode object in a similar fashion that Sitefinity renders them. Of course without any of the page template wrappers.

Posted by Community Admin on 21-Feb-2011 00:00

Hello Roland,

I am not sure what actually you are trying to do and how you want to render the page. If you want to rotate content you should use content facades. In your case you can extract only page properties data.

All the best,
Ivan Dimitrov
the Telerik team

Posted by Community Admin on 22-Feb-2011 00:00

Thanks Ivan,

Are you implying that I should update a content item content such as title and body dynamically form a list of content items?

Anyways, maybe it's the learning curve but I'm struggling to get this working. I am approaching it from a different angle as well and trying to develop a custom widget based on the NewsRotator in the SDK, which is not quite what I want.

What I want is to have say content from "Content" types with a particular tag revolve on page refresh. The specified tag will need to be customized somewhere in the custom widget interface. I could get this random content scripted out into a stored procedure but it's not "the right way to do it", plus I can't figure how to access the connection string in DataConfig.conf (this is not too important however).

Please let me know if this you think this is the right solution to pursue,

Roland

Posted by Community Admin on 22-Feb-2011 00:00

FYI. I think I found a solution that works for me. The merit goes to the other posts: www.sitefinity.com/.../generic-content-by-category.aspx however, Here's what I did:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Telerik.Sitefinity;
using Telerik.Sitefinity.Fluent.Pages;
using Telerik.Sitefinity.Modules.Pages;
using Telerik.Sitefinity.Pages.Model;
using Telerik.Sitefinity.GenericContent.Model;
using Telerik.Sitefinity.Taxonomies.Model;
using Telerik.Sitefinity.Taxonomies;
using Telerik.Sitefinity.Modules.GenericContent;
using System.Collections;
using Telerik.Sitefinity.Utilities.TypeConverters;
using Telerik.Sitefinity.Data;
 
namespace SitefinityWebApp.MyControls
    public partial class RandomPageControl : System.Web.UI.UserControl
    
        /// <summary>
        /// Descriptor for a type
        /// </summary>
        /// <param name="itemType"></param>
        /// <param name="taxon"></param>
        /// <returns></returns>
        private TaxonomyPropertyDescriptor GetPropertyDescriptor(Type itemType, ITaxon taxon)
        
            return TaxonomyManager.GetPropertyDescriptor(itemType, taxon);
        
 
        /// <summary>
        /// Issues query to retrieve content items for a given taxon (limit to 1000)
        /// </summary>
        /// <param name="taxon"></param>
        /// <param name="contentProvider"></param>
        /// <param name="itemType"></param>
        /// <returns></returns>
        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, 1000, ref totalCount);
            return items;
        
 
        /// <summary>
        /// Return a published list of content items for a given category
        /// </summary>
        /// <param name="category"></param>
        /// <returns></returns>
        protected List<ContentItem> GetContentItemsByCategory(string category)
        
            List<ContentItem> ciL = new List<ContentItem>();
            TaxonomyManager taxManager = TaxonomyManager.GetManager();
 
            var taxonomyManager = TaxonomyManager.GetManager();
            var c = "categories";
            var taxonomy1 = taxonomyManager.GetTaxonomies<HierarchicalTaxonomy>().Where(t => t.Name == c || t.Title == c).SingleOrDefault();
            var taxon = taxonomy1.Taxa.Where(t => t.Name == category || t.Title == category).SingleOrDefault();
 
            if (taxon != null)
            
                string itemTypeName = "Telerik.Sitefinity.GenericContent.Model.ContentItem";
                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 (ContentItem n in v)
                
                    ciL.Add(n);
                
            
            else
            
                throw new Exception("Category " + category + " was not found.");
            
            return ciL.Where(a => a.Status == ContentLifecycleStatus.Live && a.ApprovalWorkflowState == "Published").ToList();
        
 
        /// <summary>
        /// Returns content items with a particular tag
        /// </summary>
        /// <param name="tag">tag word (name or title)</param>
        /// <returns></returns>
        protected List<ContentItem> GetContentItemsByTag(string tag)
        
            List<ContentItem> ciL = new List<ContentItem>();
            TaxonomyManager taxManager = TaxonomyManager.GetManager();
 
            // Get the tag
            var taxon = taxManager.GetTaxa<FlatTaxon>().Where(t => t.Name == tag || t.Title == tag).Single();
 
            // I want content items
            if (taxon != null)
            
                string itemTypeName = "Telerik.Sitefinity.GenericContent.Model.ContentItem";
                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 (ContentItem n in v)
                
                    ciL.Add(n);
                
            
            else
            
                throw new Exception("Tag " + tag + " was not found.");
            
            return ciL.Where(a => a.Status == ContentLifecycleStatus.Live && a.ApprovalWorkflowState == "Published").ToList();
        
 
        /// <summary>
        /// Auto wired method fires when page loads
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void Page_Load(object sender, EventArgs e)
        
            Random rng = new Random();
            string category = "CustomerProfiles";
 
            try
            
                var allContent = GetContentItemsByCategory(category);
                if (allContent.Count > 0)
                
                    ContentItem ci = allContent[rng.Next(0, allContent.Count)];
                    pageTitle.Text = ci.Title;
                    pageBody.InnerHtml = ci.Content.ToString();
                
                else
                
                    pageTitle.Text = "No content was categoriezed with " + category + ".";
                
            
            catch (Exception ex)
            
                pageTitle.Text = "Error";
                pageBody.InnerText = ex.Message;
            
        
    

This thread is closed