예제 #1
0
 public Resource(string conditional, XPathVariable[] variables,  IFileProvider fileProvider, string source, string output, ResourceTransform[] transformers)
 {
     this.ConditionExpression = conditional;
     this.FileProvider = fileProvider;
     this.Source = source;
     this.Output = output;
     this.Variables = variables;
     this.Transforms = transformers;
 }
        private static IPublishedContent FindContentByAlias(ContextualPublishedContentCache cache, int rootNodeId, string alias)
        {
            if (alias == null)
            {
                throw new ArgumentNullException("alias");
            }

            // the alias may be "foo/bar" or "/foo/bar"
            // there may be spaces as in "/foo/bar,  /foo/nil"
            // these should probably be taken care of earlier on

            alias = alias.TrimStart('/');
            var xpathBuilder = new StringBuilder();


            if (rootNodeId > 0)
            {
                xpathBuilder.AppendFormat(XPathStrings.DescendantDocumentById, rootNodeId);
            }
            else
            {
                xpathBuilder.Append(XPathStringsDefinition.Root);
            }


            XPathVariable var = null;

            if (alias.Contains('\'') || alias.Contains('"'))
            {
                // use a var, as escaping gets ugly pretty quickly
                var   = new XPathVariable("alias", alias);
                alias = "$alias";
            }
            xpathBuilder.AppendFormat(XPathStrings.DescendantDocumentByAlias, alias);

            var xpath = xpathBuilder.ToString();

            // note: it's OK if var is null, will be ignored
            return(cache.GetSingleByXPath(xpath, var));
        }
        public IPublishedContent GetDocumentByUrlAlias(UmbracoContext umbracoContext, int rootNodeId, string alias)
        {
            if (umbracoContext == null)
            {
                throw new ArgumentNullException("umbracoContext");
            }
            if (alias == null)
            {
                throw new ArgumentNullException("alias");
            }

            // the alias may be "foo/bar" or "/foo/bar"
            // there may be spaces as in "/foo/bar,  /foo/nil"
            // these should probably be taken care of earlier on

            alias = alias.TrimStart('/');
            var xpathBuilder = new StringBuilder();

            xpathBuilder.Append(XPathStrings.Root);

            if (rootNodeId > 0)
            {
                xpathBuilder.AppendFormat(XPathStrings.DescendantDocumentById, rootNodeId);
            }

            XPathVariable var = null;

            if (alias.Contains('\'') || alias.Contains('"'))
            {
                // use a var, escaping gets ugly pretty quickly
                var   = new XPathVariable("alias", alias);
                alias = "$alias";
            }
            xpathBuilder.AppendFormat(XPathStrings.DescendantDocumentByAlias, alias);

            var xpath = xpathBuilder.ToString();

            return(ConvertToDocument(GetXml(umbracoContext).SelectSingleNode(xpath, var)));
        }