diff --git a/src/Umbraco.Web/UmbracoHelper.cs b/src/Umbraco.Web/UmbracoHelper.cs index 7a19ed737a..17fb53ddfa 100644 --- a/src/Umbraco.Web/UmbracoHelper.cs +++ b/src/Umbraco.Web/UmbracoHelper.cs @@ -13,6 +13,7 @@ using Umbraco.Core; using Umbraco.Core.Dictionary; using Umbraco.Core.Dynamics; using Umbraco.Core.Models; +using Umbraco.Core.Xml; using Umbraco.Web.Models; using Umbraco.Web.PublishedCache; using Umbraco.Web.Templates; @@ -451,6 +452,11 @@ namespace Umbraco.Web return TypedDocumentById(id, _umbracoContext.ContentCache); } + public IPublishedContent TypedContentSingleAtXPath(string xpath, params XPathVariable[] vars) + { + return TypedDocumentByXPath(xpath, vars, _umbracoContext.ContentCache); + } + public IEnumerable TypedContent(params object[] ids) { return TypedDocumentsbyIds(_umbracoContext.ContentCache, ids); @@ -481,6 +487,11 @@ namespace Umbraco.Web return TypedContent(ids.ToArray()); } + public IEnumerable TypedContentAtXPath(string xpath, params XPathVariable[] vars) + { + return TypedDocumentsByXPath(xpath, vars, _umbracoContext.ContentCache); + } + public IEnumerable TypedContentAtRoot() { return TypedDocumentsAtRoot(_umbracoContext.ContentCache); @@ -501,6 +512,11 @@ namespace Umbraco.Web return DocumentById(id, _umbracoContext.ContentCache, new DynamicNull()); } + public dynamic ContentSingleAtXPath(string xpath, params XPathVariable[] vars) + { + return DocumentByXPath(xpath, vars, _umbracoContext.ContentCache, new DynamicNull()); + } + public dynamic Content(params object[] ids) { return DocumentByIds(_umbracoContext.ContentCache, ids); @@ -531,6 +547,11 @@ namespace Umbraco.Web return Content(ids.ToArray()); } + public dynamic ContentAtXPath(string xpath, params XPathVariable[] vars) + { + return DocumentsByXPath(xpath, vars, _umbracoContext.ContentCache); + } + public dynamic ContentAtRoot() { return DocumentsAtRoot(_umbracoContext.ContentCache); @@ -688,6 +709,12 @@ namespace Umbraco.Web : null; } + private IPublishedContent TypedDocumentByXPath(string xpath, XPathVariable[] vars, ContextualPublishedContentCache cache) + { + var doc = cache.GetSingleByXPath(xpath, vars); + return doc; + } + /// /// Overloaded method accepting an 'object' type /// @@ -714,6 +741,12 @@ namespace Umbraco.Web return ids.Select(eachId => TypedDocumentById(eachId, cache)); } + private IEnumerable TypedDocumentsByXPath(string xpath, XPathVariable[] vars, ContextualPublishedContentCache cache) + { + var doc = cache.GetByXPath(xpath, vars); + return doc; + } + private IEnumerable TypedDocumentsAtRoot(ContextualPublishedCache cache) { return cache.GetAtRoot(); @@ -756,14 +789,14 @@ namespace Umbraco.Web : ifNotFound; } - private dynamic DocumentsAtRoot(ContextualPublishedCache cache) + private dynamic DocumentByXPath(string xpath, XPathVariable[] vars, ContextualPublishedCache cache, object ifNotFound) { - return new DynamicPublishedContentList( - cache.GetAtRoot() - .Select(publishedContent => new DynamicPublishedContent(publishedContent)) - ); + var doc = cache.GetSingleByXPath(xpath, vars); + return doc == null + ? ifNotFound + : new DynamicPublishedContent(doc).AsDynamic(); } - + /// /// Overloaded method accepting an 'object' type /// @@ -802,7 +835,23 @@ namespace Umbraco.Web return new DynamicPublishedContentList(nodes); } - #endregion + private dynamic DocumentsByXPath(string xpath, XPathVariable[] vars, ContextualPublishedCache cache) + { + return new DynamicPublishedContentList( + cache.GetByXPath(xpath, vars) + .Select(publishedContent => new DynamicPublishedContent(publishedContent)) + ); + } + + private dynamic DocumentsAtRoot(ContextualPublishedCache cache) + { + return new DynamicPublishedContentList( + cache.GetAtRoot() + .Select(publishedContent => new DynamicPublishedContent(publishedContent)) + ); + } + + #endregion #region Search