public string GetFullTemplate(string skinID) { m_IncludedSkinFile = false; m_IncludedFiles = new List <TemplateFile>(); string path = this.FilePath; if (m_BaseFile != null) { if (File.Exists(path) == false) { path = m_BaseFile.FilePath; } else { m_IncludedSkinFile = true; } } string content = File.ReadAllText(path, Encoding.Default); MatchEvaluator callback = delegate(Match match) { string includeVirtualPath = match.Groups[1].Value; includeVirtualPath = GetIncludeFileVirtualPath(includeVirtualPath); TemplateFile includeFile = null; if (TemplateManager.GetTemplateFiles().TryGetValue(includeVirtualPath, out includeFile)) { if (skinID != MaxLabs.bbsMax.Consts.DefaultSkinID) { includeFile = includeFile.GetSkin(skinID); } string includePath = IOUtil.MapPath(includeVirtualPath); //includeFile.ResetWatcher(); m_IncludedFiles.Add(includeFile); string result = includeFile.GetFullTemplate(skinID); if (m_IncludedSkinFile == false && includeFile.m_IncludedSkinFile) { m_IncludedSkinFile = true; } //开始处理包含文件的参数 string includeParams = match.Groups["param"].Value; MatchCollection matchs = Pool <TemplateAttributeListRegex> .Instance.Matches(includeParams); foreach (Match param in matchs) { //应该计算索引位置,否则会存在误判和错误替换 result = result.Replace("$" + param.Groups["name"].Value, param.Groups["value"].Value); } return(result); } else { return(string.Empty); } }; //content = regex_pager.Replace(content, delegate(Match match) { // return OnMatchPager(match, skinID); //}); content = regex_pager4.Replace(content, delegate(Match match) { return(OnMatchPager(match, skinID)); }); content = s_MatchNotes.Replace(content, string.Empty); content = s_MatchInclude.Replace(content, callback); content = s_MatchPreInclude.Replace(content, callback); content = regex_fast_css.Replace(content, new MatchEvaluator(ReplaceFast)); content = regex_fast_js.Replace(content, new MatchEvaluator(ReplaceFast)); content = content.Trim(); return(content); //StringBuilder sb = new StringBuilder(); //string vpath = path.Substring(Globals.GetPath(SystemDirecotry.Root).Length); //sb.AppendLine("<!--begin ").Append(vpath).AppendLine("-->"); //sb.Append(content.Trim()); //sb.AppendLine("<!--end ").Append(vpath).AppendLine("-->"); //return sb.ToString(); }
/// <summary> /// 解析指定路径下的模板文件,并返回模板解析结果的路径,如果所给的路径不是模板文件路径,则返回原路径 /// </summary> /// <param name="virtualPath">模板文件的虚拟路径,支持.aspx和.ascx文件</param> /// <returns></returns> public static string ParseTemplate(string path) { string virtualPath = null; string queryString = null; int queryStart = path.IndexOf('?'); if (queryStart >= 0) { virtualPath = path.Substring(0, queryStart); queryString = path.Substring(queryStart); } else { virtualPath = path; } //if (virtualPath.StartsWith(SkinedPath, StringComparison.OrdinalIgnoreCase)) //{ // string skinID = User.Current.SkinID; // virtualPath = "~/max-templates/default/" + skinID + virtualPath.Substring(1); //} TemplateFile templateFile = GetTemplateFile(virtualPath); if (templateFile == null) { return(path);//virtualPath + queryString; } Skin skin = s_IsPreParsing == false ? Context.Current.Skin : s_PreParseSkin; bool useSkin; string skinID; if (skin == null) { useSkin = false; skinID = MaxLabs.bbsMax.Consts.DefaultSkinID; } else { useSkin = skin.SkinID != MaxLabs.bbsMax.Consts.DefaultSkinID; skinID = skin.SkinID; } if (useSkin) { templateFile = templateFile.GetSkin(skin.SkinID); } if (templateFile.IsParsed == false) { lock (templateFile) { if (templateFile.IsParsed == false) { using (TemplateParser parser = new TemplateParser()) { //string forumPath = "~/max-templates/" + skinID + "/forums/"; ////UrlFormat urlFormat = s_IsPreParsing ? s_PreParseUrlFormat : AllSettings.Current.FriendlyUrlSettings.UrlFormat; //if (templateFile.VirtualPath.StartsWith(forumPath, StringComparison.OrdinalIgnoreCase)) //{ // parser.GenerateV30AspxCode(skinID, templateFile, Config.Current.TemplateImports); //} //else //{ parser.GenerateAspxCode(skinID, templateFile, Config.Current.TemplateImports); //} templateFile.IsParsed = true; } } } } return(templateFile.ParsedFileVirtualPath + queryString); }