Umbaco Archtype 渲染图像 (MediaPicker2)

Gum*_*mbo 1 umbraco umbraco7

我正在 Umbraco 中使用 Archtype 构建图像滑块。

我开始使用 umbraco 7.5.9 和 Umbraco.MediaPicker 时,但同时我开始了一个使用 Umbraco.MediaPicker2 的最新版本 Umbraco (7.6.2) 的新项目

使用旧的 MediaPicker 渲染图像没有问题,但使用 MediaPicker2 似乎不可能。

这是我的设置。

原型: 在此处输入图片说明 这是呈现旧 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>
Run Code Online (Sandbox Code Playgroud)

这曾经适用于旧的媒体选择器,@image.GetValue 返回 int id。但是使用新的 MediaPicker2 它返回 Umbraco.Core.Udi[]

如果我使用下面的代码遍历 archtype 的属性,我会得到这个结果(见下面的代码)

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

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

    }
}
Run Code Online (Sandbox Code Playgroud)

href -

altText - alt 测试

图像 - umb://media/c33bfe07a82b4df18a79db154139cb91

href -

altText - Fjall

图像 - umb://media/40d5778d34bb4035b5146c901de75212

谁能告诉我如何从这些数据中渲染图像。

谢谢

Har*_*vey 5

我只是坐过山车来解决这个问题!

您可以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);
Run Code Online (Sandbox Code Playgroud)

在我们的 Umbraco 上查看这个线程,它涵盖了这个问题。

我使用此注释来弄清楚如何从图像的 guid 中获取 ID。


看起来 Umbraco HQ 正在推动人们将新的ModelsBuilder与类型化模型一起使用。我不确定 ModelsBuilder 是否支持原型,这就是为什么会有这么多麻烦。

我个人在我的所有项目中都使用嵌套内容,因为它执行相同的功能,但 Umbraco 更好地支持 (IMO),因为它使用文档类型来存储可重复的内容架构。因此,它可以很容易地映射到 IPublishedContent,因此受到 ModelsBuilder 的支持!