Displaying blog category in list template
I want to display the blog category on my list page. I have to following control on the list template but some blogs are associated with multiple categories. I only want to display the first category. Is this possible?
Also, can I make them display as hyperlinks?
<sitefinity:HierarchicalTaxonField ID="HierarchicalFieldControl" runat="server" TaxonomyId="E5CD6D69-1543-427b-AD62-688A99F5E7D4" DisplayMode="Read" WebServiceUrl="~/Sitefinity/Services/Taxonomies/HierarchicalTaxon.svc" Expanded="false" TaxonomyMetafieldName="Category" ExpandText="ClickToAddCategories" BindOnServer="true" />
Hi Jeff,
You could try to do the following:
Create a template
So the first step is to create a template. Inside this template you just add a Literal control that will hold the Category links:
<
asp:Literal
ID
=
"categories"
runat
=
"server"
></
asp:Literal
>
protected
void
Repeater_ItemDataBound(
object
sender, Telerik.Web.UI.RadListViewItemEventArgs e)
var data = ((RadListViewDataItem)e.Item).DataItem
as
BlogPost;
var placeholder = e.Item.FindControl(
"categories"
)
as
Literal;
placeholder.Text = RenderFlatTaxaAsLink(data,
"Tags"
);
public
string
RenderFlatTaxaAsLink(BlogPost post,
string
taxonomyFieldName)
var baseUrl =
string
.Empty;
var currentProvider = SiteMapBase.GetCurrentProvider();
if
(currentProvider ==
null
|| currentProvider !=
null
&& currentProvider.CurrentNode ==
null
)
return
string
.Empty;
else
var currentNode = currentProvider.CurrentNode
as
PageSiteNode;
if
(currentNode ==
null
) baseUrl = currentProvider.CurrentNode.Url;
else
var firstPageDataNode = RouteHelper.GetFirstPageDataNode(currentNode,
true
);
if
(!currentNode.IsGroupPage || !(firstPageDataNode.Url != currentProvider.CurrentNode.Url)) baseUrl = currentProvider.CurrentNode.Url;
else
baseUrl = firstPageDataNode.Url;
var tagList =
""
;
var tags = post.GetValue<TrackedList<Guid>>(taxonomyFieldName);
if
(tags !=
null
&& tags.Count() > 0)
tagList =
" | "
;
var taxManager = TaxonomyManager.GetManager();
foreach
(var tag
in
tags)
var t = taxManager.GetTaxon<FlatTaxon>(tag);
var url =
string
.Format(
"0/-in-1/2/3"
, VirtualPathUtility.ToAbsolute(baseUrl), t.Taxonomy.Name, t.Taxonomy.Name, t.UrlName);
var link =
string
.Format(
"<a class='tag' href='0'><span>1</span></a>"
, url, t.Title).ToString();
tagList += link;
return
tagList;
Hello,
Thank you Daniel for sharing your solution with community. I hope that Jeff and other clients will find it useful.
Kind regards,
Stefani Tacheva
the Telerik team
No problem!
For anyone who likes to download the whole solution, find the link to my GitHub account on the bottom of my blogpost about this topic: http://knstr.it/XgraUX
Kind regards,
Daniel
Hi Daniel,
Thank you again. Really useful blog post. It is good to share your knowledge, articles and solutions in the forum. Your help is much appreciate.
Greetings,
Stefani Tacheva
the Telerik team
This worked well. Thanks Daniel.
Hi
I can't get this to work with my blog list. I have this code in my template, where do I make the changes described above.
01.
<%@ Control Language="C#" %>
02.
<%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI.ContentUI" Assembly="Telerik.Sitefinity" %>
03.
<%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI.Comments" Assembly="Telerik.Sitefinity" %>
04.
<%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI" Assembly="Telerik.Sitefinity" %>
05.
<%@ Register TagPrefix="sf" Namespace="Telerik.Sitefinity.Web.UI.PublicControls.BrowseAndEdit" Assembly="Telerik.Sitefinity" %>
06.
<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
07.
<%@ Import Namespace="Telerik.Sitefinity" %>
08.
09.
<
telerik:RadListView
ID
=
"Repeater"
ItemPlaceholderID
=
"ItemsContainer"
runat
=
"server"
EnableEmbeddedSkins
=
"false"
EnableEmbeddedBaseStylesheet
=
"false"
>
10.
<
LayoutTemplate
>
11.
<
sf:ContentBrowseAndEditToolbar
ID
=
"MainBrowseAndEditToolbar"
runat
=
"server"
Mode
=
"Add"
></
sf:ContentBrowseAndEditToolbar
>
12.
<
ul
class
=
"sfpostsList sfpostListTitleDateSummary"
>
13.
<
asp:PlaceHolder
ID
=
"ItemsContainer"
runat
=
"server"
/>
14.
</
ul
>
15.
</
LayoutTemplate
>
16.
<
ItemTemplate
>
17.
<
li
class
=
"sfpostListItem"
>
18.
19.
<
h2
class
=
"sfpostTitle"
>
20.
<
sf:DetailsViewHyperLink
TextDataField
=
"Title"
ToolTipDataField
=
"Description"
runat
=
"server"
/>
21.
</
h2
>
22.
23.
<
div
class
=
"sfpostAuthorAndDate"
>
24.
<
asp:Literal
ID
=
"Literal2"
Text="<%$ Resources:Labels, By %>" runat="server" />
25.
<
sf:PersonProfileView
runat
=
"server"
/>
26.
<
sf:FieldListView
ID
=
"PostDate"
runat
=
"server"
Format
=
" | PublicationDate.ToLocal():MMM dd, yyyy"
/>
27.
<
asp:Literal
ID
=
"categories"
runat
=
"server"
></
asp:Literal
>
28.
</
div
>
29.
30.
<
sf:FieldListView
ID
=
"PostContent"
runat
=
"server"
Text
=
"0"
Properties
=
"Summary"
WrapperTagName
=
"div"
WrapperTagCssClass
=
"sfpostSummary"
/>
31.
32.
33.
<
sf:ContentBrowseAndEditToolbar
ID
=
"BrowseAndEditToolbar"
runat
=
"server"
Mode
=
"Edit,Delete,Unpublish"
></
sf:ContentBrowseAndEditToolbar
>
34.
</
li
>
35.
</
ItemTemplate
>
36.
</
telerik:RadListView
>
37.
<
sf:Pager
id
=
"pager"
runat
=
"server"
></
sf:Pager
>
38.
<
asp:PlaceHolder
ID
=
"socialOptionsContainer"
runat
=
"server"
/>
Thanks in advance.
Hello,
Further information for the sample could be found on Danie's blog post:
www.konstrui.nl/.../add-clickable-tags-for-each-blogpost-in-your-blogpost-list
You could find the custom template and solution in GitHub on the following URL.
If you have further questions regarding the sample you could contact the its publisher.
Regards,
Stefani Tacheva
Telerik
Hi Stefani
I got it to work using the advice you gave me, but there is one small thing that I am still trying to do without success. What I need is to finally be able to create a menu with all the categories. If a user clicks on one of the categories then the blog filters on that category.
Also we have many blogs on our site, we want that menu to only include the categories for that blog.
Let me know if this is possible or what my options are.
Thanks in advance
Stewart