mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-12-02 19:44:02 +08:00
- 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:
@@ -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>
|
||||
}
|
||||
|
||||
@@ -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))
|
||||
);
|
||||
|
||||
@@ -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}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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.
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
@@ -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(" | ")
|
||||
@@ -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>();
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user