1

当我的博客显示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

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

4

2 回答 2

1

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

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

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

于 2013-03-11T23:17:35.093 回答
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" />
}

希望这可以帮助某人。

于 2013-08-15T16:15:51.283 回答