Вы можете взглянуть и ознакомиться с образцами макрочастичных изображений, предварительно установленными на каждом веб-сайте Umbraco. Существует фрагмент под названием Список изображений из папки для СМИ.
Код сниппета по умолчанию выглядит следующим образом:
@inherits Umbraco.Web.Macros.PartialViewMacroPage
@*
Macro to display a series of images from a media folder.
How it works:
- Confirm the macro parameter has been passed in with a value
- Loop through all the media Id's passed in (might be a single item, might be many)
- Display any individual images, as well as any folders of images
Macro Parameters To Create, for this macro to work:
Alias:mediaId Name:Select folder with images Type:Single Media Picker
*@
@{ var mediaId = Model.MacroParameters["mediaId"]; }
@if (mediaId != null)
{
@* Get all the media item associated with the id passed in *@
var media = Umbraco.Media(mediaId);
var selection = media.Children("Image");
if (selection.Any())
{
<ul>
@foreach (var item in selection)
{
<li>
<img src="@item.umbracoFile" alt="@item.Name" />
</li>
}
</ul>
}
}
Мы должны помнить, чтобы добавить параметр макроса, если мы их используете. Затем мы можем использовать оба: Media или TypedMedia Вспомогательные методы для извлечения папки (которая является типичным элементом мультимедиа другого типа), несмотря на требуемый возвращаемый тип. Я обычно использую TypedMedia, чтобы иметь возможность работать с сильно типизированными объектами и свойствами предварительного просмотра в Visual Studio.
Если мы создадим макрос правильно и вставить его на шаблоне, используя такой код (с правильной папкой ID):
@Umbraco.RenderMacro("Test", new { mediaId="1082" })
мы должны увидеть список изображений из этой папки (все из них в тот момент).
Последняя часть почти такая же, как вы это делали ранее, но нам нужно немного ее отрегулировать. Мой окончательный код и предложение ниже:
@inherits Umbraco.Web.Macros.PartialViewMacroPage
@{
var folderId = Model.MacroParameters["mediaId"];
if (folderId != null)
{
var media = Umbraco.TypedMedia(folderId);
var rand = new Random();
var imagesInFolder = media.Children("Image");
if(imagesInFolder.Any()) {
var pick = imagesInFolder.ElementAt(rand.Next(0, imagesInFolder.Count()));
if (pick != null)
{
<img src="@pick.GetCropUrl()" alt="@pick.Name" />
}
}
}
}
Позвольте мне знать, если это решить вашу проблему :)
Какую версию Umbraco вы используете? – BeaverProj
Я использую версию 7 – KingOfKong
Похоже, вы используете старый DynamicNode Razor api из v4. – BeaverProj