- Added 'AdminLink' concept to content item metadata, allows content types to determine where clicking their items from admin should go. Defaults to Edit.

- Changed Blogs to use AdminLink, no longer needs to overwrite the entire SummaryAdmin view.
- This will also aid the potential future AdminMenuPart for blogs and lists as it can link to the list details instead of their edit properties.

--HG--
branch : dev
This commit is contained in:
Dave Reed
2011-03-04 14:37:44 -08:00
parent 5e3943e307
commit c158caba49
9 changed files with 49 additions and 35 deletions

View File

@@ -7,7 +7,7 @@
<div class="summary" itemscope="itemscope" itemid="@contentItem.Id" itemtype="http://orchardproject.net/data/ContentItem">
<div class="properties">
<input type="checkbox" value="@contentItem.Id" name="itemIds"/>
<h3>@Html.ItemEditLink(contentItem)</h3>
<h3>@Html.ItemAdminLink(contentItem)</h3>
@if (Model.Header != null) {
<div class="header">@Display(Model.Header)</div>
}

View File

@@ -12,6 +12,8 @@ namespace Orchard.Blogs.Drivers {
() => shapeHelper.Parts_Blogs_Blog_Manage(ContentPart: part)),
ContentShape("Parts_Blogs_Blog_Description",
() => shapeHelper.Parts_Blogs_Blog_Description(ContentPart: part, Description: part.Description)),
ContentShape("Parts_Blogs_Blog_SummaryAdmin",
() => shapeHelper.Parts_Blogs_Blog_SummaryAdmin(ContentPart: part, ContentItem: part.ContentItem)),
ContentShape("Parts_Blogs_Blog_BlogPostCount",
() => shapeHelper.Parts_Blogs_Blog_BlogPostCount(ContentPart: part, PostCount: part.PostCount))
);

View File

@@ -77,6 +77,12 @@ namespace Orchard.Blogs.Handlers {
{"Action", "Remove"},
{"blogId", context.ContentItem.Id}
};
context.Metadata.AdminRouteValues = new RouteValueDictionary {
{"Area", "Orchard.Blogs"},
{"Controller", "BlogAdmin"},
{"Action", "Item"},
{"blogId", context.ContentItem.Id}
};
}
}
}

View File

@@ -125,7 +125,6 @@
<Content Include="Views\Parts.Blogs.BlogPost.ListAdmin.cshtml">
<SubType>Code</SubType>
</Content>
<Content Include="Views\Content-Blog.SummaryAdmin.cshtml" />
<Content Include="Views\Web.config" />
</ItemGroup>
<ItemGroup>
@@ -164,6 +163,9 @@
<ItemGroup>
<Content Include="web.config" />
</ItemGroup>
<ItemGroup>
<Content Include="Views\Parts.Blogs.Blog.SummaryAdmin.cshtml" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.

View File

@@ -35,7 +35,8 @@
Parts_Blogs_Blog_BlogPostCount="Meta:3"/>
</Match>
<Match DisplayType="SummaryAdmin">
<Place Parts_Blogs_Blog_Description="Content:before"/>
<Place Parts_Blogs_Blog_SummaryAdmin="Actions:10"/>
<Place Parts_Blogs_Blog_Description="Content:before"/>
</Match>
</Match>
</Placement>

View File

@@ -1,32 +0,0 @@
@using Orchard.Blogs.Extensions;
@using Orchard.Blogs.Models;
@using Orchard.ContentManagement;
@using Orchard.Utility.Extensions;
@{
Script.Require("ShapesBase");
ContentItem contentItem = Model.ContentItem;
BlogPart blog = (BlogPart)contentItem.Get(typeof(BlogPart));
var returnUrl = ViewContext.RequestContext.HttpContext.Request.ToUrlString();
}
<div class="summary" itemscope="itemscope" itemid="@contentItem.Id" itemtype="http://orchardproject.net/data/ContentItem">
<div class="properties">
<input type="checkbox" value="@contentItem.Id" name="itemIds"/>
<h3>@Html.Link((string)Model.Title, Url.BlogForAdmin((BlogPart)blog))</h3>
@if (Model.Header != null) {
<div class="header">@Display(Model.Header)</div>
}
@if (Model.Meta != null) {
<div class="metadata">@Display(Model.Meta)</div>
}
</div>
<div class="related">
@Display(Model.Actions)
<a href="@Url.BlogForAdmin(blog)" title="@T("List Posts")">@T("List Posts")</a>@T(" | ")
<a href="@Url.BlogPostCreate(blog)" title="@T("New Post")">@T("New Post")</a>@T(" | ")
<a href="@Url.BlogEdit(blog)" title="@T("Edit")">@T("Edit")</a>@T(" | ")
<a href="@Url.BlogRemove(blog)" title="@T("Remove")" itemprop="RemoveUrl UnsafeUrl">@T("Remove")</a>
</div>
@if (Model.Content != null) {
<div class="primary">@Display(Model.Content)</div>
}
</div>

View File

@@ -0,0 +1,10 @@
@using Orchard.Blogs.Extensions;
@using Orchard.Blogs.Models;
@using Orchard.ContentManagement;
@using Orchard.Utility.Extensions;
@{
ContentItem contentItem = Model.ContentItem;
BlogPart blog = (BlogPart)contentItem.Get(typeof(BlogPart));
}
<a href="@Url.BlogForAdmin(blog)" title="@T("List Posts")">@T("List Posts")</a>@T(" | ")
<a href="@Url.BlogPostCreate(blog)" title="@T("New Post")">@T("New Post")</a>@T(" | ")

View File

@@ -3,11 +3,17 @@ using System.Web.Routing;
namespace Orchard.ContentManagement {
public class ContentItemMetadata {
private RouteValueDictionary _adminRouteValues;
public string DisplayText { get; set; }
public RouteValueDictionary DisplayRouteValues { get; set; }
public RouteValueDictionary EditorRouteValues { get; set; }
public RouteValueDictionary CreateRouteValues { get; set; }
public RouteValueDictionary RemoveRouteValues { get; set; }
public RouteValueDictionary AdminRouteValues {
get { return _adminRouteValues ?? EditorRouteValues; }
set { _adminRouteValues = value; }
}
public readonly IList<GroupInfo> DisplayGroupInfo = new List<GroupInfo>();
public readonly IList<GroupInfo> EditorGroupInfo = new List<GroupInfo>();
}

View File

@@ -48,6 +48,25 @@ namespace Orchard.Mvc.Html {
metadata.EditorRouteValues.Merge(additionalRouteValues));
}
public static MvcHtmlString ItemAdminLink(this HtmlHelper html, IContent content) {
return ItemEditLink(html, null, content);
}
public static MvcHtmlString ItemAdminLink(this HtmlHelper html, string linkText, IContent content) {
return html.ItemAdminLink(linkText, content, null);
}
public static MvcHtmlString ItemAdminLink(this HtmlHelper html, string linkText, IContent content, object additionalRouteValues) {
var metadata = content.ContentItem.ContentManager.GetItemMetadata(content);
if (metadata.AdminRouteValues == null)
return null;
return html.ActionLink(
NonNullOrEmpty(linkText, metadata.DisplayText, content.ContentItem.TypeDefinition.DisplayName),
Convert.ToString(metadata.AdminRouteValues["action"]),
metadata.AdminRouteValues.Merge(additionalRouteValues));
}
public static string ItemDisplayUrl(this UrlHelper urlHelper, IContent content) {
var metadata = content.ContentItem.ContentManager.GetItemMetadata(content);
if (metadata.DisplayRouteValues == null)