diff --git a/src/Umbraco.Web/PublishedContentExtensions.cs b/src/Umbraco.Web/PublishedContentExtensions.cs index c7820e8766..abad9afdb4 100644 --- a/src/Umbraco.Web/PublishedContentExtensions.cs +++ b/src/Umbraco.Web/PublishedContentExtensions.cs @@ -11,6 +11,7 @@ using Umbraco.Web.Routing; using umbraco; using umbraco.cms.businesslogic; using Umbraco.Core; +using umbraco.cms.businesslogic.template; namespace Umbraco.Web { @@ -52,8 +53,8 @@ namespace Umbraco.Web /// public static string GetTemplateAlias(this IPublishedContent doc) { - var template = new template(doc.TemplateId); - return template.TemplateAlias; + var template = Template.GetTemplate(doc.TemplateId); + return template.Alias; } #region Search diff --git a/src/Umbraco.Web/Routing/PublishedContentRequestBuilder.cs b/src/Umbraco.Web/Routing/PublishedContentRequestBuilder.cs index 32854c1769..e8cfbd856b 100644 --- a/src/Umbraco.Web/Routing/PublishedContentRequestBuilder.cs +++ b/src/Umbraco.Web/Routing/PublishedContentRequestBuilder.cs @@ -43,7 +43,12 @@ namespace Umbraco.Web.Routing return; } + //NOTE: Not sure how the alias is actually saved with a space as this shouldn't ever be the case? + // but apparently this happens. I think what should actually be done always is the template alias + // should be saved using the ToUmbracoAlias method and then we can use this here too, that way it + // it 100% consistent. I'll leave this here for now until further invenstigation. var templateAlias = _publishedContentRequest.Template.Alias.Replace(" ", string.Empty); + //var templateAlias = _publishedContentRequest.Template.Alias.ToUmbracoAlias(StringAliasCaseType.PascalCase); Func determineEngine = (directory, alias, extensions, renderingEngine) => @@ -361,9 +366,11 @@ namespace Umbraco.Web.Routing LogHelper.Debug("{0}Look for template id={1}", () => tracePrefix, () => templateId); if (templateId > 0) - { - //NOTE: This will throw an exception if the template id doesn't exist, but that is ok to inform the front end. - var template = new Template(templateId); + { + //NOTE: don't use the Template ctor as the result is not cached... instead use this static method + var template = Template.GetTemplate(templateId); + if (template == null) + throw new InvalidOperationException("The template with Id " + templateId + " does not exist, the page cannot render"); _publishedContentRequest.Template = template; } } @@ -371,7 +378,7 @@ namespace Umbraco.Web.Routing { LogHelper.Debug("{0}Look for template alias=\"{1}\" (altTemplate)", () => tracePrefix, () => templateAlias); - var template = Template.GetByAlias(templateAlias); + var template = Template.GetByAlias(templateAlias, true); _publishedContentRequest.Template = template; } diff --git a/src/umbraco.cms/businesslogic/template/Template.cs b/src/umbraco.cms/businesslogic/template/Template.cs index 992c8d6d16..fd9e9eda63 100644 --- a/src/umbraco.cms/businesslogic/template/Template.cs +++ b/src/umbraco.cms/businesslogic/template/Template.cs @@ -459,16 +459,23 @@ namespace umbraco.cms.businesslogic.template } } - public static Template GetByAlias(string Alias) + public static Template GetByAlias(string Alias, bool useCache = false) { - try - { - return new Template(SqlHelper.ExecuteScalar("select nodeId from cmsTemplate where alias = @alias", SqlHelper.CreateParameter("@alias", Alias))); - } - catch - { - return null; - } + if (!useCache) + { + try + { + return new Template(SqlHelper.ExecuteScalar("select nodeId from cmsTemplate where alias = @alias", SqlHelper.CreateParameter("@alias", Alias))); + } + catch + { + return null; + } + } + + //return from cache instead + var id = GetTemplateIdFromAlias(Alias); + return id == 0 ? null : GetTemplate(id); } [Obsolete("Obsolete, please use GetAllAsList() method instead", true)] @@ -854,17 +861,11 @@ namespace umbraco.cms.businesslogic.template }); } - private void InvalidateCache() - { - Cache.ClearCacheItem(GetCacheKey(this.Id)); - } - private static string GetCacheKey(int id) { return UmbracoTemplateCacheKey + id; } - - + public static Template Import(XmlNode n, User u) { string alias = xmlHelper.GetNodeValue(n.SelectSingleNode("Alias")); diff --git a/src/umbraco.webservices/templates/templateService.cs b/src/umbraco.webservices/templates/templateService.cs index 7e7ded2263..7b5fbe524f 100644 --- a/src/umbraco.webservices/templates/templateService.cs +++ b/src/umbraco.webservices/templates/templateService.cs @@ -31,7 +31,7 @@ namespace umbraco.webservices.templates try { - template = cms.businesslogic.template.Template.GetByAlias(alias); + template = cms.businesslogic.template.Template.GetByAlias(alias, true); } catch (Exception) {