从 Umbraco 的文件夹中随机选择图像
Randomly selecting an image from a folder in Umbraco
我在 Umbraco 中创建了一个文件夹,我想在我的页面上显示该文件夹中的随机图像。
我发现了一个几年前的解决方案,它给我编译错误
dynamic folder = Library.MediaById(1054);
var randomImage = folder.Children.Where("nodeTypeAlias = \"Image\"").Random();
我发现我必须在我的文件中添加正确的继承
@using umbraco.MacroEngines
@inherits DynamicNodeContext
但这给了我一个错误,因为我已经在第一行使用了一个@model
The 'inherits' keyword is not allowed when a 'model' keyword is used.
感谢您的帮助
您可以查看并学习预装在每个 Umbraco 网站中的示例宏部分视图。有一个名为 List Images From Media Folder.
的片段
默认片段的代码如下所示:
@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 中创建了一个文件夹,我想在我的页面上显示该文件夹中的随机图像。
我发现了一个几年前的解决方案,它给我编译错误
dynamic folder = Library.MediaById(1054);
var randomImage = folder.Children.Where("nodeTypeAlias = \"Image\"").Random();
我发现我必须在我的文件中添加正确的继承
@using umbraco.MacroEngines
@inherits DynamicNodeContext
但这给了我一个错误,因为我已经在第一行使用了一个@model
The 'inherits' keyword is not allowed when a 'model' keyword is used.
感谢您的帮助
您可以查看并学习预装在每个 Umbraco 网站中的示例宏部分视图。有一个名为 List Images From Media Folder.
的片段默认片段的代码如下所示:
@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" />
}
}
}
}
如果它解决了您的问题,请告诉我:)