List of dynamic content by category
Using module builder, I created a module called Vendors. Each vendor has one or more categories. I'd like to create a control that diplays as follows:
Category 1
Vendor 1
Vendor 2
Vendor 3
Category 2
Vendor 1
Vendor 4
Vendor 5
etc.
How would I achieve this?
Hi Amanda,
I believe that you can achieve your scenario using the default widget which Module builder creates for your module. I have recorded a short video demonstrating the solution which I think can be helpful.
http://screencast.com/t/TYRc4rpNH
Regards,
Kaloyan
Telerik
Hi Kaloyan,
That would work, but requires the end user to add multiple widgets to the page for each category which is not ideal.
I did find a way to do it with an external template an radlistview/repeater. Below is my code for anyone who might want it.
Ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="AffiliatebyCategory.ascx.cs" Inherits="SitefinityWebApp.Controls.AffiliatebyCategory" %>
<%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI.PublicControls.BrowseAndEdit" Assembly="Telerik.Sitefinity" %>
<%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI.ContentUI" Assembly="Telerik.Sitefinity" %>
<%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI.Comments" Assembly="Telerik.Sitefinity" %>
<%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI.Fields" Assembly="Telerik.Sitefinity" %>
<%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI" Assembly="Telerik.Sitefinity" %>
<%@ Register Assembly="Telerik.Sitefinity" Namespace="Telerik.Sitefinity.Modules.Comments.Web.UI.Frontend" TagPrefix="sf" %>
<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
<%@ Import Namespace="Telerik.Sitefinity.Web.UI" %>
<
telerik:RadListView
ID
=
"dynamicContentListView"
ItemPlaceholderID
=
"ItemsContainer"
runat
=
"server"
OnItemDataBound
=
"rptrParent_ItemDataBound"
>
<
LayoutTemplate
>
<
asp:PlaceHolder
ID
=
"ItemsContainer"
runat
=
"server"
/>
</
LayoutTemplate
>
<
ItemTemplate
>
<
h2
> <
asp:Label
ID
=
"Literal5"
runat
=
"server"
Text='<%# Eval("Title") %>'></
asp:Label
> </
h2
>
<
asp:Repeater
ID
=
"rptrChild"
runat
=
"server"
>
<
HeaderTemplate
><
ul
></
HeaderTemplate
>
<
ItemTemplate
>
<
li
><
sf:DetailsViewHyperLink
ID
=
"DetailsViewHyperLink"
TextDataField
=
"Title"
runat
=
"server"
data-sf-field
=
"Title"
data-sf-ftype
=
"ShortText"
/> <%# Eval("City") %>, <%# Eval("State") %></
li
>
</
ItemTemplate
>
<
FooterTemplate
></
ul
></
FooterTemplate
>
</
asp:Repeater
>
</
ItemTemplate
>
</
telerik:RadListView
>
<
sf:Pager
id
=
"pager"
runat
=
"server"
></
sf:Pager
>
<
asp:PlaceHolder
ID
=
"socialOptionsContainer"
runat
=
"server"
></
asp:PlaceHolder
>
using
System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Web;
using
System.Web.UI;
using
System.Web.UI.WebControls;
using
Telerik.Sitefinity.Taxonomies;
using
Telerik.Sitefinity.Taxonomies.Model;
using
Telerik.Sitefinity.DynamicModules;
using
Telerik.Sitefinity.Utilities.TypeConverters;
using
System.Linq;
using
Telerik.OpenAccess;
using
Telerik.Sitefinity.Model;
using
Telerik.Web.UI;
using
Telerik.Sitefinity.Model.ContentLinks;
using
Telerik.Sitefinity.Modules.Libraries;
namespace
SitefinityWebApp.Controls
public
partial
class
AffiliatebyCategory : System.Web.UI.UserControl
protected
void
Page_Load(
object
sender, EventArgs e)
var taxonomyMgr = TaxonomyManager.GetManager();
Taxon amTaxon = GetCategoryByTitle(
"Affiliate Member"
);
IList<HierarchicalTaxon> subCategories = taxonomyMgr.GetTaxa<HierarchicalTaxon>().Where(t => t.Parent.Id == amTaxon.Id).OrderBy(t => t.Title).ToList();
dynamicContentListView.DataSource = subCategories;
dynamicContentListView.DataBind();
public
string
GetImageUrl(
string
propertyName)
var contentLinks = Eval(propertyName)
as
ContentLink[];
var imageContentLink = contentLinks.FirstOrDefault();
var librariesManager = LibrariesManager.GetManager();
var currentImage = librariesManager.GetImage(imageContentLink.ChildItemId);
return
currentImage.MediaUrl;
public
Taxon GetCategoryByTitle(
string
title)
var taxonomyMgr = TaxonomyManager.GetManager();
HierarchicalTaxonomy category = taxonomyMgr.GetTaxonomies<HierarchicalTaxonomy>().Where(x => x.Name ==
"Categories"
).SingleOrDefault();
if
(category ==
null
)
return
null
;
return
category.Taxa.Where(x => x.Title == title).SingleOrDefault();
public
Taxon GetCategoryByID(Guid id)
var taxonomyMgr = TaxonomyManager.GetManager();
HierarchicalTaxonomy category = taxonomyMgr.GetTaxonomies<HierarchicalTaxonomy>().Where(x => x.Name ==
"Categories"
).SingleOrDefault();
if
(category ==
null
)
return
null
;
return
category.Taxa.Where(x => x.Id == id).SingleOrDefault();
protected
void
rptrParent_ItemDataBound(
object
sender, Telerik.Web.UI.RadListViewItemEventArgs e)
RadListViewItem item = e.Item;
if
((item.ItemType == RadListViewItemType.DataItem) || (item.ItemType == RadListViewItemType.AlternatingItem))
Repeater rptrChild = (Repeater)item.FindControl(
"rptrChild"
);
Guid catid =
new
Guid(DataBinder.Eval(((RadListViewDataItem)e.Item).DataItem,
"Id"
).ToString());
Taxon amTaxon = GetCategoryByID(catid);
DynamicModuleManager dynamicModuleManager = DynamicModuleManager.GetManager();
Type vendorType = TypeResolutionService.ResolveType(
"Telerik.Sitefinity.DynamicTypes.Model.VendorResourceGuide.Vendor"
);
var myItems = dynamicModuleManager.GetDataItems(vendorType)
.Where(d => d.GetValue<TrackedList<Guid>>(
"Category"
).Contains(amTaxon.Id)
&& d.Status == Telerik.Sitefinity.GenericContent.Model.ContentLifecycleStatus.Live);
rptrChild.DataSource = myItems;
rptrChild.DataBind();