Cleaned up all blog urls to go through UrlHelper extension methods so refactoring is easier (except for the admin menu which only works with Action links at the moment) and added admin menu items for blogs.

--HG--
extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4041918
This commit is contained in:
ErikPorter
2009-11-23 18:20:54 +00:00
parent 215e0f012a
commit cdc9d11cae
14 changed files with 139 additions and 21 deletions

View File

@@ -0,0 +1,14 @@
using Orchard.UI.Navigation;
namespace Orchard.Blogs {
public class AdminMenu : INavigationProvider {
public string MenuName { get { return "admin"; } }
public void GetNavigation(NavigationBuilder builder) {
builder.Add("Blogs", "2",
menu => menu
.Add("Manage Blogs", "1.0", item => item.Action("List", "Blog", new { area = "Orchard.Blogs" }))
.Add("Create New Blog", "1.1", item => item.Action("Create", "Blog", new { area = "Orchard.Blogs" })));
}
}
}

View File

@@ -56,7 +56,7 @@ namespace Orchard.Blogs.Controllers {
Blog blog = _blogService.CreateBlog(model.ToCreateBlogParams());
return RedirectToAction("edit", new { blog.Record.Id });
return Redirect(Url.BlogEdit(blog.Slug));
}
public ActionResult Edit(string blogSlug) {
@@ -75,7 +75,7 @@ namespace Orchard.Blogs.Controllers {
_notifier.Information(T("Blog information updated"));
return RedirectToAction("Edit", new { blogSlug });
return Redirect(Url.BlogEdit(model.Slug));
}
bool IUpdateModel.TryUpdateModel<TModel>(TModel model, string prefix, string[] includeProperties, string[] excludeProperties) {

View File

@@ -0,0 +1,21 @@
using System.Web.Mvc;
namespace Orchard.Blogs.Extensions {
public static class UrlHelperExtensions {
public static string Blogs(this UrlHelper urlHelper) {
return urlHelper.Action("List", "Blog", new {area = "Orchard.Blogs"});
}
public static string Blog(this UrlHelper urlHelper, string blogSlug) {
return urlHelper.Action("Item", "Blog", new {blogSlug, area = "Orchard.Blogs"});
}
public static string BlogEdit(this UrlHelper urlHelper, string blogSlug) {
return urlHelper.Action("Edit", "Blog", new {blogSlug, area = "Orchard.Blogs"});
}
public static string BlogPost(this UrlHelper urlHelper, string blogSlug, string postSlug) {
return "#";
}
}
}

View File

@@ -61,8 +61,10 @@
<Reference Include="System.Web.Mobile" />
</ItemGroup>
<ItemGroup>
<Compile Include="AdminMenu.cs" />
<Compile Include="Controllers\BlogPostController.cs" />
<Compile Include="Extensions\BlogCreateViewModelExtensions.cs" />
<Compile Include="Extensions\UrlHelperExtensions.cs" />
<Compile Include="Routing\IsBlogConstraint.cs" />
<Compile Include="Services\BlogService.cs" />
<Compile Include="Controllers\BlogController.cs" />
@@ -90,6 +92,11 @@
<Content Include="Views\Blog\Edit.aspx" />
<Content Include="Views\Blog\Item.aspx" />
<Content Include="Views\Blog\List.aspx" />
<Content Include="Views\Shared\Foot.aspx" />
<Content Include="Views\Shared\Footer.aspx" />
<Content Include="Views\Shared\Head.aspx" />
<Content Include="Views\Shared\Header.aspx" />
<Content Include="Views\Shared\Messages.ascx" />
<Content Include="Web.config" />
<Content Include="Views\Web.config" />
</ItemGroup>

View File

@@ -1,8 +1,9 @@
using System.Collections.Generic;
using Orchard.Blogs.Models;
using Orchard.Mvc.ViewModels;
namespace Orchard.Blogs.ViewModels {
public class BlogsViewModel {
public class BlogsViewModel : AdminViewModel {
public IEnumerable<Blog> Blogs { get; set; }
}
}

View File

@@ -1,11 +1,14 @@
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<Orchard.Blogs.ViewModels.CreateBlogViewModel>" %>
<%@ Import Namespace="Orchard.Blogs.Extensions"%>
<%@ Import Namespace="Orchard.Security" %>
<%@ Import Namespace="Orchard.Mvc.Html" %>
<% Html.Include("Header"); %>
<% Html.Include("Head"); %>
<div class="yui-u">
<h2 class="separator">
Add a new Blog</h2>
Create New Blog</h2>
<p class="bottomSpacer">
<a href="<%=Url.Blogs() %>">Manage Blogs</a> > Create
</p>
</div>
<div class="yui-u">
<%using (Html.BeginForm()) { %>
@@ -14,8 +17,9 @@
<%= Html.EditorForModel() %>
<li class="clearLayout">
<input class="button" type="submit" value="Create" />
<%=Html.ActionLink("Cancel", "Index", new{}, new{@class="button"}) %></li>
<a href="<%=Url.Blogs() %>" class="button">Cancel</a>
</li>
</ol>
<%}/*EndForm*/%>
</div>
<% Html.Include("Footer"); %>
<% Html.Include("Foot"); %>

View File

@@ -1,13 +1,14 @@
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<BlogEditViewModel>" %>
<%@ Import Namespace="Orchard.Blogs.Extensions"%>
<%@ Import Namespace="Orchard.Blogs.ViewModels"%>
<%@ Import Namespace="Orchard.Security" %>
<%@ Import Namespace="Orchard.Mvc.Html" %>
<% Html.Include("Header"); %>
<% Html.Include("Head"); %>
<div class="yui-u">
<h2 class="separator">
Edit Blog</h2>
<p class="bottomSpacer">
<%=Html.ActionLink("Blogs", "List", "Blog") %> > Edit #<%= Model.Id%> <strong><%=Html.Encode(Model.Name)%></strong>
<a href="<%=Url.Blogs() %>">Manage Blogs</a> > Edit #<%= Model.Id%> <strong><%=Html.Encode(Model.Name)%></strong>
</p>
</div>
<div class="yui-u">
@@ -17,9 +18,9 @@
<%= Html.EditorForModel() %>
<li class="clearLayout">
<input class="button" type="submit" value="Save" />
<%=Html.ActionLink("Cancel", "Index", new{}, new{@class="button"}) %>
<a href="<%=Url.Blogs() %>" class="button">Cancel</a>
</li>
</ol>
<%}/*EndForm*/%>
</div>
<% Html.Include("Footer"); %>
<% Html.Include("Foot"); %>

View File

@@ -1,4 +1,5 @@
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<BlogViewModel>" %>
<%@ Import Namespace="Orchard.Blogs.Extensions"%>
<%@ Import Namespace="Orchard.Blogs.ViewModels"%>
<%@ Import Namespace="Orchard.Blogs.Models"%>
<%@ Import Namespace="Orchard.Mvc.Html"%>
@@ -11,7 +12,7 @@
if (Model.Posts.Count() > 0) { %>
<ul><%
foreach (BlogPost post in Model.Posts) { %>
<li><%=post.Title %></li><%
<li><a href="<%=Url.BlogPost(post.BlogSlug, post.Slug) %>"><%=Html.Encode(post.Title) %></a></li><%
} %>
</ul><%
} %>

View File

@@ -1,18 +1,18 @@
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<BlogsViewModel>" %>
<%@ Import Namespace="Orchard.Blogs.ViewModels"%>
<%@ Import Namespace="Orchard.Blogs.Extensions"%>
<%@ Import Namespace="Orchard.Blogs.Models"%>
<%@ Import Namespace="Orchard.Blogs.ViewModels"%>
<%@ Import Namespace="Orchard.Mvc.Html"%>
<%@ Import Namespace="Orchard.Mvc.ViewModels"%>
<% Html.Include("Header"); %>
<% Html.Include("Head"); %>
<div class="yui-g">
<h2>Blogs</h2><%
<h2>Manage Blogs</h2><%
//TODO: (erikpo) Replace this with an Html extension method of some sort (ListForModel?)
if (Model.Blogs.Count() > 0) { %>
<ul><%
foreach (Blog blog in Model.Blogs) { %>
<li><a href="<%=Url.Action("Item", "Blog", new {blogSlug = blog.Slug}) %>"><%=Html.Encode(blog.Name) %></a></li><%
<li><a href="<%=Url.Blog(blog.Slug) %>"><%=Html.Encode(blog.Name) %></a> (<a href="<%=Url.BlogEdit(blog.Slug) %>">edit</a>)</li><%
} %>
</ul><%
} %>
</div>
<% Html.Include("Footer"); %>
<% Html.Include("Foot"); %>

View File

@@ -1,4 +1,5 @@
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<IEnumerable<BlogPost>>" %>
<%@ Import Namespace="Orchard.Blogs.Extensions"%>
<%@ Import Namespace="Orchard.Blogs.Models"%>
<%@ Import Namespace="Orchard.Mvc.Html"%>
<%@ Import Namespace="Orchard.Mvc.ViewModels"%>
@@ -9,7 +10,7 @@
if (Model.Count() > 0) { %>
<ul><%
foreach (BlogPost post in Model) { %>
<li><a href="<%=Url.Action("Item", "BlogPost", new {blogSlug = post.BlogSlug, postSlug = post.Slug}) %>"><%=Html.Encode(post.Title) %></a></li><%
<li><a href="<%=Url.BlogPost(post.BlogSlug, post.Slug) %>"><%=Html.Encode(post.Title) %></a></li><%
} %>
</ul><%
} %>

View File

@@ -0,0 +1,19 @@
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<AdminViewModel>" %>
<%@ Import Namespace="Orchard.Mvc.ViewModels"%>
</div><%-- .wrapper --%>
</div><%-- #main --%>
<ul id="navigation" role="navigation">
<li class="first"><h4>Dashboard</h4></li>
<%if (Model.AdminMenu != null) {
foreach (var menuSection in Model.AdminMenu) {%>
<li><h4><%=Html.Encode(menuSection.Text)%></h4><ul><%foreach (var menuItem in menuSection.Items) { %>
<li><%=Html.ActionLink(menuItem.Text, (string)menuItem.RouteValues["action"], menuItem.RouteValues)%></li>
<%} %></ul></li>
<%
}
}%>
</ul>
</div><%-- #content --%>
<div id="footer" role="contentinfo"></div><%-- #contentinfo --%>
</body>
</html>

View File

@@ -0,0 +1,32 @@
<%@ Page Language="C#" Inherits="Orchard.Mvc.ViewPage<AdminViewModel>" %>
<%@ Import Namespace="Orchard.Mvc.ViewModels" %>
<%@ Import Namespace="Orchard.Mvc.Html"
%><%--
todo: (heskew) rework how/what pages are assembled when we get into theming --%><!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<%-- todo: (heskew) get this from the menu system
--%><title>Admin :: Orchard</title>
<%-- todo: (heskew) same as scripts [below]
--%><link href="<%=Page.ResolveClientUrl("~/Content/Admin/css/base.css") %>" rel="stylesheet" type="text/css" />
<%-- todo: (heskew) this should come from the admin "page" (partial)
todo: (heskew) should have at the minimum something like, say, includeScript(scriptName[, releaseScriptName], scriptPath[, releaseScriptPath])
--%><script src="<%=Page.ResolveClientUrl("~/Scripts/jquery-1.3.2.js") %>" type="text/javascript"></script>
<%-- todo: (heskew) this should come from the admin "page" (partial)
--%><script type="text/javascript" src="<%=ResolveUrl("~/Packages/TinyMce/Scripts/tiny_mce.js") %>"></script>
<script type="text/javascript">tinyMCE.init({ theme: "advanced", mode: "textareas", plugins: "fullscreen,autoresize", theme_advanced_toolbar_location: "top", theme_advanced_toolbar_align: "left", theme_advanced_buttons3_add: "fullscreen" });</script>
</head>
<body>
<div id="header" role="banner">
<h1><%=Html.ActionLink(T("Project Orchard").ToString(), "Index", new { Area = "", Controller = "Home" })%></h1>
<div id="site"><%=Html.ActionLink(T("Your Site").ToString(), "Index", new { Area = "", Controller = "Home" })%></div>
<% if (Model.CurrentUser != null) { //todo: (heskew) localize the string format "User: <username> | a:logoff"
%><div id="login"><%=T("User")%>: <%=H(Model.CurrentUser.UserName)%> | <%=Html.ActionLink(T("Logout").ToString(), "LogOff", new { Area = "", Controller = "Account" }) %></div><%
} %>
</div>
<div id="content">
<div id="navshortcut"><a href="#navigation"><%=T("Skip to navigation") %></a></div>
<div id="main" role="main">
<div class="wrapper">
<% Html.RenderPartial("Messages", Model.Messages); %>

View File

@@ -0,0 +1,17 @@
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<NotifyEntry>>" %>
<%@ Import Namespace="Orchard.UI.Notify"%>
<script runat="server">
string CssClassName(NotifyType type) {
switch(type) {
case NotifyType.Error:
return "critical";
case NotifyType.Warning:
return "warning";
}
return "informational";
}</script>
<% foreach (var item in Model) { %>
<div class="<%=CssClassName(item.Type) %>"><%=Html.Encode(item.Message) %></div>
<% } %>

View File

@@ -1,8 +1,8 @@
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<%@ Import Namespace="Orchard.Blogs.Extensions"%>
<div id="menucontainer">
<ul id="menu">
<li><%= Html.ActionLink("Home", "Index", "Home", new {Area = ""}, new {})%></li>
<li><%= Html.ActionLink("Blogs", "List", new {Area="Orchard.Blogs", Controller = "Blog"})%>
<li><%= Html.ActionLink("About", "About", "Home", new {Area = ""}, new {})%></li>
<li><%= Html.ActionLink("Admin", "Index", new {Area = "Orchard.Media", Controller = "Admin"})%></li>
</ul>