2016-12-08 5 views
0

Umbracoにフォルダを作成しました。そのフォルダの画像をページに表示したいと思います。 Umbracoのフォルダからランダムに画像を選択する

は、私は私が私が私が私のファイル

@using umbraco.MacroEngines 
@inherits DynamicNodeContext 

に適切な継承を追加する必要がありますことを発見したエラー

dynamic folder = Library.MediaById(1054); 
var randomImage = folder.Children.Where("nodeTypeAlias = \"Image\"").Random(); 

にコンパイル与えていた数年前から解決策を見つけたが、これはそれができます最初の行に使用している@モデルが既にあるのでエラーです。

The 'inherits' keyword is not allowed when a 'model' keyword is used. 

ありがとうhelp

+0

使用しているUmbracoのバージョンは何? – BeaverProj

+0

バージョン7を使用しています – KingOfKong

+0

v4の古いDynamicNode Razor APIを使用しているようです。 – BeaverProj

答えて

2

Umbracoの各Webサイトにあらかじめインストールされているマクロのサンプルの一部を見て、学ぶことができます。 の画像を一覧表示するメディアフォルダというスニペットがあります。

デフォルトのスニペットのコードは次のようになります。

@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

関連する問題