我在Umbraco中使用Archtype构建图像滑块。
当我开始使用umbraco 7.5.9和Umbraco.MediaPicker时,我开始使用最新版本的Umbraco(7.6.2)使用Umbraco.MediaPicker2
使用旧的MediaPicker渲染图像没问题,但使用MediaPicker2似乎不可能。
这是我的设置。
Archtype: 这是渲染旧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 []
如果我使用下面的代码预测了archtype的属性,我会得到这个结果(见下面的代码)
@foreach (var fieldset in Model.Content.GetPropertyValue<ArchetypeModel>("sliderImages"))
{
foreach(var prop in fieldset.Properties){
<p>@prop.Alias - @prop.Value</p>
}
}
href -
altText - alt test
image - umb:// media / c33bfe07a82b4df18a79db154139cb91
href -
altText - Fjall
image - umb:// media / 40d5778d34bb4035b5146c901de75212
任何人都可以告诉我如何从这些数据中渲染图像。
由于
答案 0 :(得分:3)
我刚刚乘坐过山车搞清楚了!
您可以使用以下代码从图片字符串中获取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类型模型。我不确定模型构建器是否支持Archetype,这就是为什么会有这么多麻烦。
我个人在我的所有项目中使用Nested Content,因为它执行相同的功能,但Umbraco更好地支持(IMO),因为它使用文档类型来存储可重复的内容架构。因此,它可以很容易地映射到IPublishedContent,因此受到ModelsBuilder的支持!