当我的博客显示Parts.Blogs.BlogPost.List.cshtml
. 我去了ContentItems
内容并在我的博客帖子中添加了一个MediaPicker Field
调用BlogPostImage
,我还在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
我希望它可以帮助任何困在同一条船上的人。我仍然很好奇为什么我不能简单地按照我的方式称呼它,但它现在可以工作了!:)