1

ブログに が表示されているときにページを編集しようとしていますParts.Blogs.BlogPost.List.cshtmlContentItemsコンテンツの下に移動して、BlogPosts に呼び出しを追加し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>
}

しかし、そのメディアピッカーフィールドを私のリストに呼び出す方法を世界で理解することはできません。どの方法を試しても、href にある種のクエリ文字列が表示されて空白に戻ります。「?23423455657」のようなもの。変数を削除しましたが、そのクエリ文字列は引き続き表示されます。私が基本的に達成しようとしているのは、これらをスライドショーに入れ、.jquery でスライドショーを開始することlayout.cshtmlです。ティア

//解決:

何日も何日も読んで研究した後、私はついに実用的な解決策を見つけました。

交換:

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

動的を使用して画像のURLを取得できます。

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 に答える