public PageUrlData GetPageUrlData(IDataReference dataReference) { if (dataReference.ReferencedType != typeof(NewsItem)) { return(null); } var data = dataReference.Data; var newsItem = data as NewsItem; if (newsItem == null) { return(null); } var page = PageManager.GetPageById(newsItem.PageId); if (page == null) { return(null); } var newsPathInfo = NewsFacade.GetPathInfo(newsItem.TitleUrl, newsItem.Date); return(new PageUrlData(page) { PathInfo = newsPathInfo }); }
public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/xml"; CultureInfo culture = DataLocalizationFacade.DefaultLocalizationCulture; string pathInfo = context.Request.PathInfo; if (pathInfo.Length > 1) { culture = new CultureInfo(pathInfo.Substring(1)); } using (var con = new DataConnection(culture)) { var feed = new SyndicationFeed { Title = new TextSyndicationContent("News List") }; var items = new List <SyndicationItem>(); IQueryable <NewsItem> allNews = con.Get <NewsItem>(); string hostname = context.Request.Url.Host; var hostnameBinding = con.Get <IHostnameBinding>().FirstOrDefault(h => h.Hostname == hostname); if (hostnameBinding != null) { Guid homepageId = hostnameBinding.HomePageId; var sm = new SitemapNavigator(con); var pagesFilter = new HashSet <Guid>( sm.GetPageNodeById(homepageId) .GetPageNodes(SitemapScope.DescendantsAndCurrent) .Select(p => p.Id)); allNews = allNews.Evaluate().Where(n => pagesFilter.Contains(n.PageId)).ToList().AsQueryable(); } IEnumerable <NewsItem> latestNews = allNews.OrderByDescending(d => d.Date).Take(10); foreach (var news in latestNews.Evaluate()) { var page = PageManager.GetPageById(news.PageId); if (page == null) { continue; } var pageUrlData = new PageUrlData(page) { PathInfo = NewsFacade.GetPathInfo(news.TitleUrl, news.Date) }; string pageUrl = PageUrls.BuildUrl(pageUrlData); if (pageUrl == null) { continue; } var item = new SyndicationItem( news.Title, news.Teaser, context.GetPath(pageUrl), news.Id.ToString(), news.Date ); item.Categories.Add(new SyndicationCategory(news.PageId.ToString())); items.Add(item); } feed.Items = items; var writer = new XmlTextWriter(context.Response.Output); feed.SaveAsRss20(writer); } }