I've been thinking about this and believe this is a great opportunity to make use of the Custom Fields feature of Sitefinity. By adding a "DetailsPage" custom field to the blog, you can internally associate a blog with a page.
Of course by design the blogs are supposed to be detached so you can place the widgets anywhere and everywhere as well as being able to move the blog details page and other actions without breaking links or anything like that.
However, if your site is pretty static, this can make for a good workaround. I implemented a proof of concept based on your problem and I think it works pretty well! I will put this into a blog post for the general community soon but for now here's a quick summary.
First, add a custom field "DetailsPage" to the Blogs (that's at the BLOG level, NOT to blog POSTS). For each blog, specify the path to the details page.
For example, I have a blog "Test Blog 1" and its detail page is http://mysite.com/blogs/blog-1
. So in the properties page for the blog, I set the custom field DetailsPage to be /blogs/blog-1
. Do the same for each blog/page pairing.
Next, make a custom user control to display all of the blog posts combined. Here I'm just showing the title but you can modify it to show whatever fields you need. The GetUrl is a method I'll define in the code behind.
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="BlogPostsList.ascx.cs" Inherits="SitefinityWebApp.Widgets.BlogPostsList" %>
href="<%# GetUrl(Container.DataItem) %>"><%# Eval("Title") %></
In the code behind I used the Fluent API to retrieve the posts as well as make a method to parse out the url when binding to the frontend control.
sender, EventArgs e)
// this is the list of posts we'll bind to
var posts =
// initialize fluent API
(var fluent = App.WorkWith())
// get all blogs
var blogs = fluent.Blogs().Get();
// add posts to the list
blog.BlogPosts.Where(p => p.Status == Telerik.Sitefinity.GenericContent.Model.ContentLifecycleStatus.Live))
// bind posts to list view
BlogPostsListView.DataSource = posts;
// cast dataitem to post
var post = item
// get parent blog
var blog = post.Parent;
// create link from parent and blog details
), blog.UrlName, post.PublicationDate.ToString(
I then installed the widget to the toolbox and dropped it onto the main /blogs page. It now shows the list of posts from all blogs in one list, and each post links to its individual blog page!
This was an interesting task and I look forward to going into detail in a blog post soon. Thank you for the inspiration and I hope that you find this example helpful!
let me know if you have any questions on this example, have a great weekend!