Orchardcms 从视图添加到分区的形状的优先级
我在这里没有使用Orchard术语,但我有一段文字,我想把它包装成一个形状。这是博客详细信息页面上的一些社交共享URL。我想保持它干净,所以我决定做一个新的形状 我已经在下面发布了Orchardcms 从视图添加到分区的形状的优先级,orchardcms,Orchardcms,我在这里没有使用Orchard术语,但我有一段文字,我想把它包装成一个形状。这是博客详细信息页面上的一些社交共享URL。我想保持它干净,所以我决定做一个新的形状 我已经在下面发布了Content BlogPost.Detail.cshtml的完整列表,但我的想法是: 我制作了一个cshtml来保存社交媒体标记 我在主post详细视图中准备数据 我使用Model.Meta.add(socialShape,“1”)创建形状并将其添加到Meta区域(这是一个与元描述不同的本地区域) 形状按预期添加,但
Content BlogPost.Detail.cshtml
的完整列表,但我的想法是:
cshtml
来保存社交媒体标记Model.Meta.add(socialShape,“1”)创建形状并将其添加到Meta
区域(这是一个与元描述不同的本地区域)代码>
int
会中断页面。Meta
区域中其他项目的默认优先级为5,因此应该将其放在顶部,但它总是在末尾结束
// Model.Meta.Add works but the priority seems to be ignored?
@using Orchard.ContentManagement;
@using Orchard.Utility.Extensions
@using Orchard.Blogs.Models
@functions{
void AddSocialMediaShareLinks() {
var socialShareUrl = new Uri(new Uri(WorkContext.CurrentSite.BaseUrl), Url.ItemDisplayUrl((IContent)Model.ContentItem)).ToString();
var socialShareTitle = Model.ContentItem.Title;
var socialShape = New.BlogPost_SocialMediaShareLinks(ShareUrl: socialShareUrl, ShareTitle: socialShareTitle);
Model.Meta.Add(socialShape, "1");
}
}
@{
if (Model.Title != null) {
Layout.Title = Model.Title;
}
BlogPart parentBlog = Model.Blog;
IContent contentItem = Model.ContentItem;
var contentTypeClassName = ((string)Model.ContentItem.ContentType).HtmlClassify();
AddSocialMediaShareLinks();
Model.Classes.Add("content-item");
Model.Classes.Add(contentTypeClassName);
var tag = Tag(Model, "article");
}
@tag.StartElement
<header>
@Display(Model.Header)
</header>
<div class="row row-blog-content">
<div class="col-sm-10 col-sm-offset-1 col-md-8 col-md-offset-2">
@if (Model.Meta != null) {
<div class="metadata">
@Display(Model.Meta)
</div>
}
@Display(Model.Content)
</div>
</div>
<div class="row row-blog-return-parent">
<div class="col-sm-12">
<p class="text-center"><a href="@Url.ItemDisplayUrl(parentBlog)" class="btn btn-default">@T("Go back to the news")</a></p>
</div>
</div>
@if (Model.Footer != null) {
<footer>
@Display(Model.Footer)
</footer>
}
@tag.EndElement
谁能告诉我我做错了什么吗?大多数形状只是按照添加顺序渲染它们的子图形。
Zone
和ContentZone
形状的区别在于在呈现子对象之前调用Order
:
[Shape]
public void Zone(dynamic Display, dynamic Shape, TextWriter Output) {
string id = Shape.Id;
IEnumerable<string> classes = Shape.Classes;
IDictionary<string, string> attributes = Shape.Attributes;
var zoneWrapper = GetTagBuilder("div", id, classes, attributes);
Output.Write(zoneWrapper.ToString(TagRenderMode.StartTag));
foreach (var item in Order(Shape))
Output.Write(Display(item));
Output.Write(zoneWrapper.ToString(TagRenderMode.EndTag));
}
[形状]
公共空白区域(动态显示、动态形状、TextWriter输出){
string id=Shape.id;
IEnumerable类=Shape.class;
IDictionary属性=Shape.attributes;
var zoneWrapper=GetTagBuilder(“div”、id、类、属性);
Write(zoneWrapper.ToString(TagRenderMode.StartTag));
foreach(订单中的var项目(形状))
输出.写入(显示(项));
Write(zoneWrapper.ToString(TagRenderMode.EndTag));
}
通过从模板或形状方法代码中调用
Order
,您可以在自己的形状中获得相同的效果。要启用排序,您应该将选项卡
属性添加到形状元数据
,如下所示:
socialShape.Metadata.Tab=”“;
Model.Meta.Add(socialShape,“1”);
这将禁用ContentZone
中的形状分组
我认为这是Orchard中的一个bug,但是这个解决方法应该可以解决您的问题。'ContentZone'也可以调用'Order'方法来对子图形进行排序。感谢您提供的提示,您的帮助指导我找到了正确的方法来诊断这实际上是一个bug:谢谢,您是对的,这是一个bug。在你的帮助下,我已经找到了足够多的问题,至少,我不能完全弄清楚它出了什么问题:这个错误将在Orchard的下一个版本中得到解决。谢谢你的帮助。
[Shape]
public void Zone(dynamic Display, dynamic Shape, TextWriter Output) {
string id = Shape.Id;
IEnumerable<string> classes = Shape.Classes;
IDictionary<string, string> attributes = Shape.Attributes;
var zoneWrapper = GetTagBuilder("div", id, classes, attributes);
Output.Write(zoneWrapper.ToString(TagRenderMode.StartTag));
foreach (var item in Order(Shape))
Output.Write(Display(item));
Output.Write(zoneWrapper.ToString(TagRenderMode.EndTag));
}