From 1f05d43047eeb75883c3fbcc5fab167dfd65b690 Mon Sep 17 00:00:00 2001 From: "agrath@gmail.com" Date: Sat, 26 Feb 2011 11:43:23 -1300 Subject: [PATCH] Added new overloads to MediaById and NodeById which take List or params object[] and return DynamicNodeList or DynamicMediaList [new - doesn't support OrderBy,Where etc] Added to allow retreiving multiple items by id when you know the Ids, e.g.: using MNTP to select nodes and then needing to get them in Razor --- .../RazorDynamicNode/DynamicMedia.cs | 3 ++ .../RazorDynamicNode/DynamicMediaList.cs | 38 +++++++++++++++++++ .../RazorDynamicNode/DynamicNode.cs | 22 +++++++++++ .../umbraco.MacroEngines.csproj | 1 + 4 files changed, 64 insertions(+) create mode 100644 umbraco.MacroEngines.Juno/RazorDynamicNode/DynamicMediaList.cs diff --git a/umbraco.MacroEngines.Juno/RazorDynamicNode/DynamicMedia.cs b/umbraco.MacroEngines.Juno/RazorDynamicNode/DynamicMedia.cs index cc0fd957cd..319b454a96 100644 --- a/umbraco.MacroEngines.Juno/RazorDynamicNode/DynamicMedia.cs +++ b/umbraco.MacroEngines.Juno/RazorDynamicNode/DynamicMedia.cs @@ -12,6 +12,8 @@ namespace umbraco.MacroEngines { private Dictionary _propertyCache; private Media _media; + internal DynamicMediaList ownerList; + public DynamicMedia(int mediaId) { _media = new Media(mediaId); @@ -55,6 +57,7 @@ namespace umbraco.MacroEngines } if (_media != null) { + Properties props = _media.GenericProperties; Property prop = _media.getProperty(name); // check for nicer support of Pascal Casing EVEN if alias is camelCasing: if (prop == null && name.Substring(0, 1).ToUpper() == name.Substring(0, 1)) diff --git a/umbraco.MacroEngines.Juno/RazorDynamicNode/DynamicMediaList.cs b/umbraco.MacroEngines.Juno/RazorDynamicNode/DynamicMediaList.cs new file mode 100644 index 0000000000..ffd0fa1e00 --- /dev/null +++ b/umbraco.MacroEngines.Juno/RazorDynamicNode/DynamicMediaList.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Dynamic; +using System.Collections; +using umbraco.cms.businesslogic.media; + +namespace umbraco.MacroEngines +{ + public class DynamicMediaList : DynamicObject, IEnumerable + { + public IEnumerable Items { get; set; } + + public DynamicMediaList() + { + Items = new List(); + } + public DynamicMediaList(IEnumerable items) + { + List list = items.ToList(); + list.ForEach(node => node.ownerList = this); + Items = list; + } + public DynamicMediaList(IEnumerable items) + { + List list = items.Select(x => new DynamicMedia(x)).ToList(); + list.ForEach(node => node.ownerList = this); + Items = list; + } + + public IEnumerator GetEnumerator() + { + return Items.GetEnumerator(); + } + + } +} diff --git a/umbraco.MacroEngines.Juno/RazorDynamicNode/DynamicNode.cs b/umbraco.MacroEngines.Juno/RazorDynamicNode/DynamicNode.cs index b57d309ed0..53cd3b0857 100644 --- a/umbraco.MacroEngines.Juno/RazorDynamicNode/DynamicNode.cs +++ b/umbraco.MacroEngines.Juno/RazorDynamicNode/DynamicNode.cs @@ -592,6 +592,17 @@ namespace umbraco.MacroEngines { return new DynamicNode(Id); } + public DynamicNodeList NodeById(List Ids) + { + List nodes = new List(); + foreach (object eachId in Ids) + nodes.Add(new DynamicNode(eachId)); + return new DynamicNodeList(nodes); + } + public DynamicNodeList NodeById(params object[] Ids) + { + return NodeById(Ids.ToList()); + } public DynamicMedia MediaById(int Id) { return new DynamicMedia(Id); @@ -604,6 +615,17 @@ namespace umbraco.MacroEngines { return new DynamicMedia(Id); } + public DynamicMediaList MediaById(List Ids) + { + List nodes = new List(); + foreach (object eachId in Ids) + nodes.Add(new DynamicMedia(eachId)); + return new DynamicMediaList(nodes); + } + public DynamicMediaList MediaById(params object[] Ids) + { + return MediaById(Ids.ToList()); + } public int Id { get { if (n == null) return 0; return n.Id; } diff --git a/umbraco.MacroEngines.Juno/umbraco.MacroEngines.csproj b/umbraco.MacroEngines.Juno/umbraco.MacroEngines.csproj index 071bb0b436..e1822382c3 100644 --- a/umbraco.MacroEngines.Juno/umbraco.MacroEngines.csproj +++ b/umbraco.MacroEngines.Juno/umbraco.MacroEngines.csproj @@ -64,6 +64,7 @@ +