在Orchard CMS中的博客post.list.cshtml中显示Media Picker字段

时间:2013-03-11 18:17:13

标签: blogs orchardcms

我是Orchard的新手(对我来说很陌生),当我的博客显示Parts.Blogs.BlogPost.List.cshtml时,我正在尝试编辑页面。我在内容下转到了ContentItems,并在我的BlogPosts中添加了一个名为MediaPicker Field的{​​{1}},我还在我的主题中替换了BlogPostImage(这是我的文件'编辑。我​​在那里的代码是:

Parts.Blogs.BlogPost.List.cshtml

但我无法弄清楚世界上如何将这个mediapicker字段调用到我的列表中。我尝试的任何方式都会返回空白,并在href中显示某种查询字符串。像“?23423455657”之类的东西。我取消了变量,查询字符串仍然显示出来。我基本上要完成的是将这些放入幻灯片中,使用jquery在@using Orchard.ContentManagement; @{ IEnumerable<object> blogPosts = Model.ContentItems; } @if (blogPosts == null || blogPosts.Count() < 1) { <p>@T("No posts.")</p> } else { int count = 0; <div id="Blog"> <div id="slides"> <div class="slides_container"> @foreach (dynamic post in blogPosts) { count++; string title = post.ContentItem.TitlePart.Title; ContentItem item = post.ContentItem; string text = post.ContentItem.BodyPart.Text; string postImageUrl = post.BlogPostImage.Url; <div class="slide"> <a href="@Url.ItemDisplayUrl(item)"><img src="@postImageUrl" width="625" height="400" alt="Slide @count.ToString()"></a> <div class="caption" style="bottom: 0"> <h4><a href="@Url.ItemDisplayUrl(item)">@title</a></h4> </div> </div> } </div> </div> </div> } 中开始幻灯片放映。 TIA

// SOLUTION:

经过几天的阅读和研究,我终于找到了一个有效的解决方案。

更换:

layout.cshtml

使用:

string postImageUrl = post.BlogPostImage.Url;

从这里得到它:http://blog.cloudconstruct.com/post/Creating-a-rotating-image-gallery-in-Orchard-CMS.aspx

我希望它可以帮助任何人陷入同一条船。我仍然很好奇为什么我不能简单地按照我的方式调用它,但它现在正在工作! :)

2 个答案:

答案 0 :(得分:1)

您可以使用动态获取图片网址:

dynamic postItem = post.ContentItem;
var postImageUrl = (string)postItem.BlogPost.BlogPostImage.Url;

内容项在用作动态对象时会公开其所有部分(这里我们使用的部分与该类型具有相同的名称,以及在从管理员添加字段时添加字段的位置)。该部分本身具有每个字段的动态成员(此处为BlogPostImage),从那里您可以访问该字段的属性(此处为Url)。

答案 1 :(得分:0)

我尝试使用版本1.7的上述答案,没有任何乐趣。我最终不得不下载源代码的副本,以便我可以深入研究这些对象。下面的代码为我提供了我需要的信息,并且在将来向其他内容添加额外字段时也会有所帮助。我使用上面的部分答案来解决我的问题...

IEnumerable<object> blogPosts = Model.ContentItems.ContentItems;
foreach (dynamic post in blogPosts) {
    dynamic q = ((ContentItem)post.ContentItem).Parts.SelectMany(p => p.Fields).Where(f => f.Name == "BlogPostImage").First();
    string postImageUrl = q.MediaParts[0].MediaUrl;
    <img src="@postImageUrl" />
}

希望这有助于某人。