Getting all Tags from all items on Page where my Widget is on
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.
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;