【发布时间】:2013-03-11 18:17:13
【问题描述】:
当我的博客显示Parts.Blogs.BlogPost.List.cshtml 时,我正在尝试编辑页面。我在内容下转到ContentItems 并在我的博客帖子中添加了一个名为BlogPostImage 的MediaPicker Field,并且我还在我的主题中替代了Parts.Blogs.BlogPost.List.cshtml(这是我正在编辑的文件。我拥有的代码里面有:
@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>
}
但是,我无法弄清楚如何将那个 mediapicker 字段调用到我的列表中。我尝试的任何方式都会在 href 中返回空白,并带有某种查询字符串。类似“?23423455657”的东西。我取下了变量,那个查询字符串仍然出现。我基本上想要完成的是将这些放入幻灯片中,使用 jquery 在layout.cshtml 中启动幻灯片。 TIA
//解决方案:
经过几天又几天的阅读和研究,我终于找到了一个可行的解决方案。
替换:
string postImageUrl = post.BlogPostImage.Url;
与:
string postImageUrl = ((ContentItem)post.ContentItem).Parts.SelectMany(p => p.Fields).Where(f => f.Name == "BlogPostImage").First().Storage.Get<string>(null);
从这里得到它:http://blog.cloudconstruct.com/post/Creating-a-rotating-image-gallery-in-Orchard-CMS.aspx
我希望它可以帮助任何困在同一条船上的人。我仍然很好奇为什么我不能简单地按照我的方式称呼它,但它现在可以工作了! :)
【问题讨论】:
-
这个可以大大简化:
dynamic postItem = post.ContentItem; var postImageUrl = (string)postItem.BlogPost.BlogPostImage.Url; -
啊!所以这就是我所缺少的! .BlogPost!我以为我已经达到了@foreach 的水平(blogPosts 中的动态帖子)。感谢您澄清 Bertrand!
-
让我补充一下作为答案。
标签: blogs orchardcms