2016-12-08 93 views
0

我在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. 

感谢您的任何帮助

+0

您正在使用什么版本的一把umbraco的解决你的问题:)? – BeaverProj

+0

我使用的是版本7 – KingOfKong

+0

它看起来像使用v4中的旧DynamicNode Razor api。 – BeaverProj

回答

2

您可以在每个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> 
    } 
} 

我们需要记住,如果我们使用他们那里参数添加到宏。 然后,我们可以使用两种方法:媒体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" /> 
      } 
     } 
    } 
} 

让我知道,如果它

+0

非常感谢,很好的回答 – KingOfKong

相关问题