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" />
}
}
}
}
それはあなたの問題を解決した場合、私に教えてください:)
使用しているUmbracoのバージョンは何? – BeaverProj
バージョン7を使用しています – KingOfKong
v4の古いDynamicNode Razor APIを使用しているようです。 – BeaverProj