2017-06-01 97 views
1

我在Umbraco中使用Archtype構建圖像滑塊。Umbaco Archtype渲染圖像(MediaPicker2)

我用一把umbraco 7.5.9和Umbraco.MediaPicker當我開始這一點,但在同時,我開始使用最新版本的一個新的項目一把umbraco(7.6.2),使用Umbraco.MediaPicker2

這是使用舊的MediaPicker呈現圖像沒有問題,但使用MediaPicker2似乎不可能。

這是我的設置。

的結構的項目: enter image description here 下面是呈現老MediaPicker

<div class="fullWidthSlider"> 
    @foreach (var image in @CurrentPage.SliderImages) 
    { 
     <div>Id: @image.GetValue("image")</div>@*Line added for debug*@ 
     var media = @Umbraco.Media(image.GetValue("image")); 
     <img src="@media.Url" /> 
    } 
</div> 

的局部視圖這用於舊媒體選擇工作和@ image.GetValue返回INT ID。但隨着新MediaPicker2返回Umbraco.Core.Udi []

如果我通過與代碼結構的項目的屬性的foreach下面我得到這個結果(見下面的代碼)

@foreach (var fieldset in Model.Content.GetPropertyValue<ArchetypeModel>("sliderImages")) 
{ 
    foreach(var prop in fieldset.Properties){ 

     <p>@prop.Alias - @prop.Value</p> 

    } 
} 

HREF -

altText - ALT測試

圖像 - UMB://媒體/ c33bfe07a82b4df18a79db154139cb91

HREF -

altText - Fjall

圖像 - UMB://媒體/ 40d5778d34bb4035b5146c901de75212

誰能告訴我怎麼可以從這個數據呈現的圖像。

謝謝

回答

2

我剛去了一個過山車搞清楚這一點!

您可以使用此代碼讓圖像串的IPublishedContent

// Your string which is retrieved from Archetype. 
var imageString = "umb://media/c33bfe07a82b4df18a79db154139cb91"; 

// Get the guid from this string. 
var imageGuidUdi = GuidUdi.Parse(imageString); 

// Get the ID of the node! 
var imageNodeId = ApplicationContext.Current.Services.EntityService.GetIdForKey(guidUdi.Guid, (UmbracoObjectTypes)Enum.Parse(typeof(UmbracoObjectTypes), guidUdi.EntityType, true)); 

// Finally, get the node. 
var imageNode = Umbraco.TypedMedia(imageNodeId.Result); 

對我國一把umbraco退房this thread覆蓋這個問題。我使用this comment來弄清楚如何從圖像的guid中獲取ID。


它看起來像一把umbraco HQ正在推動人與輸入模型使用新ModelsBuilder。我不確定原型是否被ModelsBuilder支持,這就是爲什麼有這麼多麻煩。

我個人在我的所有項目中使用Nested Content,因爲它執行相同的功能,但Umbraco更好地支持(IMO),因爲它使用文檔類型來存儲可重複的內容模式。因此,它可以很容易地映射到IPublishedContent,因此受到ModelsBuilder的支持!

+0

感謝您花時間弄清楚這一點!這讓我發瘋了! 它像一個魅力。但我不明白爲什麼他們將此從MediaPicker更改爲MediaPicker2。 – Gumbo

+1

我認爲他們希望使用GUID而不是ID來代替所有內容,因爲GUID更適合跨數據庫同步內容。我相信未來他們會再次讓這個過程變得更簡單,但這是我現在能夠找到的最好的。 – Harvey

+1

我認爲現在的一個問題是,Umbraco noobs不明白何時使用'.TypedContent'或'.TypedMedia',因爲它們已經將數據類型編碼爲圖像的ID,它可以允許它們動態地獲取開發人員該節點使用相同的方法..但這是猜測。還值得注意的是,媒體節點和內容節點之間沒有區別 - 它們都使用相同的基礎模型。 – Harvey