NewsRotator without using image
Hi all I know there is NewsRotator Sample.
Unfortunately, in this example, the NewsRotator require a image to work. I am trying to make a NewsRotator + NewsTicker without having to create/upload a image for each news_items link.
When I accessing the DB (sf_news_items) in an attempt to get the URL link to each news_items, I find that I can only get a UrlName which is not sufficient to get to the correct news_items from my NewsRotator. To make matter worse, I manually edited the published date for some of the news_items and cannot trace how sitefinity maintain the links to each news_items without using image.
attached is mine ascx files which i using for my NewsRotator. Is creating a image a must for linking of news_items?
Result of my NavigateUrl: <mysite>/<projectname>/<ascx folder>/<UrlName>
Correct NavigateUrl: <mysite>/<projectname>/<news_items path>/<year>/<month>/<date>/<UrlName>
NewsTicker
.ascx
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="NewsTicker.ascx.cs" Inherits="NewsTicker" %>
<
div
class
=
"container"
>
<
div
id
=
"news_announcements"
class
=
"news_announcements"
>
<
div
id
=
"news_announcements_left"
><
strong
>News & Announcements</
strong
></
div
>
<
div
id
=
"news_announcements_right"
>
<
telerik:RadRotator
ID
=
"RadRotator1"
runat
=
"server"
height
=
"26px"
width
=
"550px"
ItemHeight
=
"26px"
ItemWidth
=
"550px"
RotateType
=
"SlideShowButtons"
ScrollDuration
=
"1"
FrameDuration
=
"7000"
OnItemDataBound
=
"RadRotator1_ItemDataBound"
>
<
ControlButtons
LeftButtonID
=
"homenews1_btn_news_Prev"
RightButtonID
=
"homenews1_btn_news_Next"
/>
<
ItemTemplate
>
<
asp:HyperLink
runat
=
"server"
ID
=
"newsLink"
NavigateUrl='<%# DataBinder.Eval(Container.DataItem, "UrlName") %>'>
<
telerik:RadTicker
ID
=
"Radticker1"
runat
=
"server"
Loop
=
"true"
TickSpeed
=
"50"
>
<
items
>
<
telerik:RadTickerItem
Text='<%# Eval("Title").ToString().Substring(0,Math.Min(80,Eval("Title").ToString().Length)) + " ... (" + Eval("PublicationDate", "0:dd MMM yyyy") + ")"%>' />
</
items
>
</
telerik:RadTicker
>
</
asp:HyperLink
>
</
ItemTemplate
>
</
sf:RadRotator
>
</
div
>
<
div
id
=
"news_announcements_view"
><
a
href
=
"../newsroom"
id
=
"news_announcements_view"
>View All News</
a
></
div
>
</
div
>
</
div
>
NewsTicker
.ascx.csusing System;
using System.Data;
using System.Collections;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Web;
using Telerik.Web.UI;
using Telerik.Sitefinity;
using Telerik.Sitefinity.Web.UI;
using Telerik.Sitefinity.GenericContent.Model;
using Telerik.Sitefinity.Modules;
using Telerik.Sitefinity.Modules.News;
using Telerik.Sitefinity.News.Model;
using Telerik.Sitefinity.Web.DataResolving;
using Telerik.Sitefinity.Pages.Model;
using Telerik.Sitefinity.Modules.News.Web.UI;
public partial class NewsTicker : System.Web.UI.UserControl
private int newsLimit = 5;
public virtual int NewsLimit
get
return this.newsLimit;
set
this.newsLimit = value;
protected void Page_Load(object sender, EventArgs e)
var totalItems = 0;
var NewsList = from nl in App.WorkWith().NewsItems()
orderby nl.PublicationDate ascending
select nl;
NewsList.Take(this.NewsLimit);
NewsList.Count(out totalItems);
this.RadRotator1.DataSource = NewsList.Get();
this.RadRotator1.DataBind();
Hello Jingyuan,
In the code behind you need to add additional logic because this link must point to a page that hosts a NewsView control, you should manually make query and get this page. In the following example the TargetNewsPage is represented by a read-only property:
private PageNode targetNewsPage;
protected PageNode TargetNewsPage
get
if (this.targetNewsPage == null)
this.targetNewsPage = App.WorkWith().Pages()
.Where(p => p.Page != null &&
p.Page.Controls.Where(c => c.ObjectType.StartsWith(typeof(NewsView).FullName)).Count() > 0)
.Get().FirstOrDefault();
//it can still be null in case there is no page with a NewsView on it
return this.targetNewsPage;