开发网站需要用到模板引擎,自己写了一个。支持foreach嵌套,支持if else嵌套,支持foreach和if else混合嵌套,支持include,支持set,支持cutstr和html2text函数。
html模板示例代码如下:
index.html页面:
<!DOCTYPE html> <htmlhead> Meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> content="width=device-width,minimum-scale=1,initial-scale=1,maximum-scale=1,user-scalable=1;" id="viewport" name="viewport" ="X-UA-Compatible"="IE=edge,chrome=1" name="keywords"="${site.keywords}" ="description"="${site.description}" link href="theme/css/Int.css" rel="stylesheet" ="theme/css/head.css"="theme/css/index.css"="theme/css/lrtk.css"="theme/css/more.css"script type="text/javascript" src="theme/js/jquery-1.11.3.js"></script="theme/js/layout.js"="theme/js/more.js"src="theme/js/jquery.superslide.2.1.1.js" type="text/javascript"title>首页-${site.siteName}</> body<!--头部开始--> div class="header"> ="w"> ="fl logo"> a ="/"> img ="${site.logoUrl}"adiv="sj_language"#if ${site.id}=="1"="/en/index.html"><em ="china" style="background: url(theme/images/eng.jpg) left center no-repeat;">Englishemi style="background: url(theme/images/china.jpg) left center no-repeat;">中文版i#else="/cn/index.html"="china"#end if主菜单--> #include ="/templates/${site.folder}/rootmenu.html" /> ="language"span span="clear"子菜单--> ="/templates/${site.folder}/submenu.html" /> 头部结束="SimpoAll" 新的轮播图开始 > var scrollImg; ="mrBox"="next" onclick="scrollImg.next()"="imgBox"ul> #foreach list="banners" model="ban" where="siteId=1" li="${ban.linkUrl}" target="_blank"> ="${ban.imgurl}" /></#/foreach="prve"="scrollImg.prev()"="theme/js/slider-H5.js"> (function () { $(window).resize( () { ul = $('.imgBox).clone().html(); $().html(""); id (new Date()).getTime(); $(ul).attr(id,id).appendTo($()); height body).height(); width ).width(); newwidth ).width(); $().css(width.imgBox ul li.imgBox ul li img/* 注意:$.mggScrollImg返回的scrollImg对象上有 next,prev,go三个方法,可以实现外部对滚动索引的控制。 如:scrollImg.next();//会切换到下一张图片 scrollImg.go(0);//会切换到第一张图片 */ scrollImg $.mggScrollImg(#' + id,{ loop: true//循环切换 auto: 自动切换 auto_wait_time: 3000轮播间隔 scroll_time: 300滚动时长 callback: (ind) {这里传过来的是索引值 $(#page).text(ind + 1); } }); }); $(window).resize(); })() > 新的轮播图结束 --> 关于我们开始="about_bg"="about"#set data="channel"="gywm"="title='关于我们'" /> ="qyjj"="title='企业简介'" h1 ="biaot"="/${site.folder}/list${qyjj.id}.html">${gywm.title}h1="subMenu"="parent.Title='关于我们'" dldt="/${site.folder}/list${subMenu.id}.html"="${subMenu.iconUrl}" dd>${subMenu.title}关于我们结束--> 业务单元开始="ywdy"="title='业务单元'" ="Business_bg"="#"="Business">${ywdy.title}="yw_pic"="theme/images/yw.png" /> 业务单元结束投资者关系开始="investor_bg"="investor"="tzzgx"="title='投资者关系'" ="cwbg"="title='财务报告'" ="/${site.folder}/list${cwbg.id}.html">投资者关系="content"="con"="channel.title='投资者关系'" page="1" pageSize="1" p>${cutstr(${con.contents},315)}...="/${site.folder}/content${con.id}.html">【详情】="parent.Title='投资者关系'" 投资者关系结束新闻综合类开始="@R_712_4045@ion"> 新闻资讯开始--> ="news"="xwzx"="title='新闻中心'" ="mtjj"="title='媒体聚焦'" ="/${site.folder}/list${mtjj.id}.html">${xwzx.title}="current news1"="news2"="newBox1"="channel.title='媒体聚焦'"="3" > ="${con.imgurl}" h2>${con.title}label>${con.publishTime}> ="newBox2"="display: none"="channel.title='最新公告'"> 新闻资讯结束--> 社会责任开始="responsibility"="shzr"="title='社会责任'" ="/${site.folder}/list${shzr.id}.html">${shzr.title}="zeren"="border"="zr_list"="channel.title='社会责任'"="5" ${con.curPageSort}==1> button ="btn_on btn"="button"button="btn"> ="neir"> > 社会责任结束新闻综合类结束总裁寄语开始="President_bg"="President"="zcjy"="title='总裁寄语'" >${zcjy.title}="Message_Box"="Message"="channel.title='总裁寄语'"> ="j${con.curPageSort}"> ="j${con.curPageSort}"="display: none;"> ${con.contents} ="qh"="y1 qh_on"="y2"="y3"总裁寄语结束合作伙伴开始="Partner_bg"="Partner"h3>合作伙伴="links"="lk"="type=2 and siteId=1" ="${lk.linkUrl}">${lk.title}合作伙伴结束--> 底部开始="cai_bg"="Web_Icon"底部结束="copyright_bottom" ${site.copyright}br /> 备案号:${site.siteRecord} ${site.statScript} >
rootmenu.html页面:
="pad-nav"="rootMenu"="channel.siteId=${site.id} and channel.level=1" ${rootMenu.sort}${channel.id}==0="index.html" class="cpselect"="showPhonesubMenu('${rootMenu.title}')">${rootMenu.title}${rootMenu.listType}=="5"${rootMenu.id}=="${parentChannel.id}"="#"="/${site.folder}/list${rootMenu.id}.html"="two_nav" phone-menu-title="${rootMenu.title}"="parent.Title='${rootMenu.title}'" ="fl nav"="cur"="smen"> ="cur"="showSubMenu('${rootMenu.title}')"="smen"${parentChannel.id}=="${channel.id}">
list.html页面:
="theme/js/jquery-1.9.1.js"<script src="js/jquery.superslide.2.1.1.js" type="text/javascript"></script> PC端轮播图JS >${channel.title}-${parentChannel.title}-${site.siteName} $(document).ready( () { topMain ".nav_part).height()对象的的高度 nav ); $(window).scroll( () { if ($(window).scrollTop() topMain) {如果滚动条顶部的距离大于topMain则就nav导航就添加类.nav_scroll,否则就移除。 nav.addClass(nav_scroll); } else { nav.removeClass(); } }); }) ="index.html"="theme/images/logo.png"/> 广告图开始="gg_pic"="theme/images/ejbg.jpg" 广告图结束内容区域开始="Main_part"左侧导航开始="/templates/${site.folder}/leftmenu.html" 左侧导航结束右侧内容开始="nr_part"="position"="fl">${channel.title}="fr">当前位置:${parentChannel.id}!=0>${parentChannel.title}>="Media_Focus"="jujiao"delalt=""="${channel.iconUrl}" ${channel.title}main="true" list channel="${channel.id}"="${pager.page}"="10" >[${channel.title}]="pag"${pager.prePage}="list${channel.id}.html"="">上一页="list${channel.id}-${pager.prePage}.html"="margin-right: 40px; font-size: 12px; color: #666;">${pager.page} / ${pager.pageCount}${pager.nextPage}="list${channel.id}.html">下一页="list${channel.id}-${pager.nextPage}.html"右侧内容结束--> 内容结束--> 合作伙伴结束-- <!--底部开始<iframe src="footer.html" width="100%" height="365" frameborder="0" scrolling="no"></iframe> ${site.copyright} 备案号:${site.siteRecord} ${site.statScript} >
模板引擎代码如下:
Tag类:
using System; System.Collections.Generic; System.Linq; System.Text; namespace DAL.Parser { /// <summary> /// 标签 </summary> public Tag { <summary> 标签开始位置 </summary> int start { get; set; } 标签标记 public Token token { 标签字符串 string tagStr { 标签字符串长度 int length { get { return tagStr.Length; } } 标签结束位置 end { return start + length; } } 标签 </summary> <param name="start">标签开始位置</param> <param name="token">标签标记<param name="tagStr">标签字符串</param> public Tag(int start,Token token,string tagStr) { this.start = start; this.token = token; this.tagStr = tagStr; } } }
Token类:
IfTag类:
System.Text; System.Text.RegularExpressions; if标签 IfTag { 开始标签 public Tag startIf { else标签,可为null public Tag elseTag { 结束标签 public Tag endIf { ; } 页面html string pageHtml { if分支html ifHtml { if (elseTag != null) { return pageHtml.Substring(startIf.start + startIf.length,elseTag.start - startIf.start - startIf.length); } else { startIf.length); } } } else分支html elseHtml { null && elseTag.start + elseTag.length < endIf.start) { return pageHtml.Substring(elseTag.start + elseTag.length,endIf.start - elseTag.start - elseTag.length); } return .Empty; } } } 结果html string resultHtml { if标签 <param name="startIf">开始标签<param name="elseTag">else标签<param name="endIf">结束标签<param name="pageHtml">页面htmlpublic IfTag(Tag startIf,Tag elseTag,Tag endIf,1)"> pageHtml) { this.startIf = startIf; this.endIf = endIf; this.elseTag = elseTag; this.pageHtml = pageHtml; this.resultHtml = .Empty; if (!Regex.IsMatch(startIf.tagStr,@"\${([^\${}]+)\.([^\${}]+)}")) //如果没有未解析的Model { bool compareOr = false; foreach (string strOr in startIf.tagStr.Replace("<#if",1)">"").Replace(>"").Split(new string[] { or " },StringSplitOptions.RemoveEmptyEntries)) 遍历or分隔 { bool compareAnd = true; string strAnd in strOr.Split( and 遍历and分隔 { Regex reg = new Regex(([^\s]*)[\s]*(==|!=|大于|小于)[\s]*([^\s]*)"noreCase); MatchCollection mc = reg.Matches(strAnd); foreach (Match match in mc) { #region 比较 switch (match.Groups[2].Value) { case ==: if (match.Groups[1].Value.Replace(\""") != match.Groups[3].Value.Replace("")) { compareAnd = ; } break; !="") == match.Groups[大于 d; if (int.TryParse(match.Groups[1].Value,1)">out d) && 3].Value,1)">out d)) { if (Convert.ToInt32(match.Groups["")) <= Convert.ToInt32(match.Groups[))) { compareAnd = ; } } 小于"")) >= Convert.ToInt32(match.Groups[default; } #endregion } } end 遍历and分隔 (compareAnd) { compareOr = ; } } 遍历or分隔 (compareOr) { resultHtml = ifHtml; ; } resultHtml = elseHtml; } } end 构造函数 } end IfTag 类 } end namespace
ForeachTag类:
System.Text.RegularExpressions; Models; Foreach标签 ForeachTag { public Tag startForeach { public Tag endForeach { 标签内html innerHtml { return pageHtml.Substring(startForeach.start + startForeach.length,endForeach.start - startForeach.start - startForeach.length); } } 列表的标识 string list { 列表的model string model { where string where { 当面页数 int page { 每页数据条数 int pageSize { 该foreach是否是当前页面的主列表 bool main = ; 栏目名称或栏目ID string channel { Foreach标签 <param name="startForeach"><param name="endForeach">public ForeachTag(Tag startForeach,Tag endForeach,1)">this.startForeach = startForeach; this.endForeach = endForeach; pageHtml; Regex reg = ([^\s]+)\s*=\s*""([^""]+)""noreCase); MatchCollection mc = reg.Matches(startForeach.tagStr); foreach (Match m mc) { switch (m.Groups[1].Value) { list: this.list = m.Groups[].Value; modelthis.model = m.Groups[wherethis.where = m.Groups[pageif (Regex.IsMatch(m.Groups[2].Value,1)">^\d+$)) { this.page = Convert.ToInt32(m.Groups[].Value); } pageSizethis.pageSize = Convert.ToInt32(m.Groups[channelthis.channel = m.Groups[mainthis.main = ; ; } } } end 构造函数 end ForeachTag 类 } end namespace
PageNum类:
分页数字类 PageNum { 分页数字 int num { 是否非数字,1:非数字,0数字,用来显示省略号 int nan { <param name="num">分页数字<param name="nan">是否非数字,1:非数字,0数字,用来显示省略号public PageNum(int num,1)">int nan = 0) { this.num = num; this.nan = nan; } } }
模板引擎TemplateDal类:
System.IO; System.Reflection; System.Web; DAL.Parser; DAL { 模板引擎 TemplateDal { #region 变量 分页数字列表 static List<PageNum> pageNumList = ; #endregion #region 载入模板 载入模板 static string LoadTemplate(HttpServerUtilityBase server,1)"> url) { string result = .Empty; StreamReader sr = new StreamReader(server.MapPath(url),Encoding.UTF8); result = sr.ReadToEnd(); sr.Close(); result; } #region 写入模板 写入模板 void WriteTemplate(HttpServerUtilityBase server,1)">string url,1)"> html) { .Empty; string path = server.MapPath(url); if (!Directory.Exists(Path.GetDirectoryName(path))) { Directory.CreateDirectory(Path.GetDirectoryName(path)); } FileStream fs = FileStream(path,FileMode.Create,FileAccess.Write); StreamWriter sw = StreamWriter(fs,Encoding.UTF8); sw.Write(html); sw.Close(); fs.Close(); } #region 替换页面model 替换页面model string ReplaceModels(string pageHtml,Dictionary<string,1)">object> data) { Regex reg = reg.Matches(pageHtml); if (data.Keys.Contains<string>(m.Groups[].Value)) { object model = data[m.Groups[].Value]; Type type = model.GetType(); PropertyInfo propertyInfo = type.GetProperty(m.Groups[].Value); object obj = propertyInfo.GetValue(model,1)">); string val = .Empty; if (obj != ) { if (obj.GetType() == typeof(DateTime)) { val = ((DateTime)obj).ToString(yyyy-MM-dd); } { val = obj.ToString(); } } pageHtml = pageHtml.Replace(${" + m.Groups[1].Value + .2].Value + } pageHtml; } #region 替换列表的model 替换列表的model string html,1)">string model,1)">object\${[^\${}]+\.([^\${}]+)} reg.Matches(html); mc) { Type type = data.GetType(); PropertyInfo propertyInfo = type.GetProperty(m.Groups[].Value); object obj = propertyInfo.GetValue(data,1)">); .Empty; (DateTime)) { val = ((DateTime)obj).ToString(); } { val = obj.ToString(); } } html = html.Replace(" + model + html; } #region 判断页面是否存在 foreach 标签 判断页面是否存在 foreach 标签 bool HasForeach( html) { Regex reg = <!--[\s]{0,1}#[\s]{0,1}foreach[\s]+[^<>\${}]*-->noreCase | RegexOptions.Singleline); reg.IsMatch(html); } #region 替换foreach 替换foreach string ReplaceLists( data) { #region 生成标签集合 Regex regStartForeach = RegexOptions.Singleline); Regex regEndForeach = RegexOptions.Singleline); MatchCollection mcStartForeach = regStartForeach.Matches(pageHtml); MatchCollection mcEndForeach = regEndForeach.Matches(pageHtml); List<Tag> tagList = new List<Tag>(); foreach (Match mStartForeach mcStartForeach) { Tag tag = Tag(mStartForeach.Index,Token.TagStart,mStartForeach.Value); tagList.Add(tag); } foreach (Match mEndForeach mcEndForeach) { Tag tag = Tag(mEndForeach.Index,Token.TagEnd,mEndForeach.Value); tagList.Add(tag); } tagList.sort((a,b) => a.start - b.start); #endregion for (int i = 0; i < tagList.Count; i++) 遍历标签集合 { Tag tag = tagList[i]; int depth = if (tag.token == Token.TagStart) { int j = i + 1; j < tagList.Count; j++if (tagList[j].token == Token.TagEnd && depth == ) { string resultHtml = .Empty; ForeachTag foreachTag = ForeachTag(tag,tagList[j],pageHtml); #region 替换 switch (foreachTag.list) { : StringBuilder sb = StringBuilder(); ChannelDal m_ChannelDal = ChannelDal(); List<cms_channel_ext> channelList = m_ChannelDal.GetList(foreachTag.where); foreach (cms_channel_ext channel channelList) { sb.Append(TemplateDal.ReplaceModels(foreachTag.innerHtml,foreachTag.model,channel)); } resultHtml = foreachTag.pageHtml.Substring(0,foreachTag.startForeach.start) + sb.ToString() + foreachTag.pageHtml.Substring(foreachTag.endForeach.start + foreachTag.endForeach.length); content: sb = StringBuilder(); ContentDal m_ContentDal = ContentDal(); PagerModel pager = PagerModel(); pager.rows = foreachTag.pageSize; pager.page = foreachTag.page; List<cms_content_ext> contentList = m_ContentDal.GetList(ref pager,foreachTag.channel,foreachTag.foreach (cms_content_ext content contentList) { sb.Append(TemplateDal.ReplaceModels(foreachTag.innerHtml,content)); } resultHtml = foreachTag.pageHtml.Substring(links StringBuilder(); LinksDal m_LinksDal = LinksDal(); List<cms_links_ext> linksList = m_LinksDal.GetList(foreachTag.foreach (cms_links_ext links linksList) { sb.Append(TemplateDal.ReplaceModels(foreachTag.innerHtml,links)); } resultHtml = foreachTag.pageHtml.Substring(banners StringBuilder(); BannersDal m_BannersDal = BannersDal(); List<cms_banners_ext> bannersList = m_BannersDal.GetList(foreachTag.foreach (cms_banners_ext banners bannersList) { sb.Append(TemplateDal.ReplaceModels(foreachTag.innerHtml,banners)); } resultHtml = foreachTag.pageHtml.Substring(pages (data.ContainsKey(foreachTag.list)) { sb = StringBuilder(); List<PageNum> pageNumList = data[foreachTag.list] as List<PageNum>; foreach (PageNum pageNum pageNumList) { sb.Append(TemplateDal.ReplaceModels(foreachTag.innerHtml,pageNum)); } resultHtml = foreachTag.pageHtml.Substring( foreachTag.endForeach.length); } : resultHtml = foreachTag.pageHtml.Substring(#endregion resultHtml; } if (tagList[j].token == Token.TagStart) { depth++; } Token.TagEnd) { depth--; } } } } #region 判断页面是否存在 if else 标签 判断页面是否存在 if else 标签 bool HasIfElse(noreCase); #region 替换 if else end if 替换 if else end if string ReplaceIfElse( Regex regStartIf = RegexOptions.Singleline); Regex regElseTag = RegexOptions.Singleline); Regex regEndIf = RegexOptions.Singleline); MatchCollection mcStartIf = regStartIf.Matches(pageHtml); MatchCollection mcElseTag = regElseTag.Matches(pageHtml); MatchCollection mcEndIf = regEndIf.Matches(pageHtml); List<Tag> tagList = foreach (Match mStartIf mcStartIf) { Tag tag = Tag(mStartIf.Index,mStartIf.Value); tagList.Add(tag); } foreach (Match mEndIf mcEndIf) { Tag tag = Tag(mEndIf.Index,mEndIf.Value); tagList.Add(tag); } foreach (Match mElseTag mcElseTag) { Tag tag = Tag(mElseTag.Index,Token.ElseTag,mElseTag.Value); tagList.Add(tag); } tagList.sort((a,1)"> { Tag tagStartIf = tagList[i]; Tag tagElseTag = if (tagStartIf.token == Token.TagStart) 是if标签 1; j < tagList.Count; j++) 遍历if标签后面的标签 { if (depth == if (tagList[j].token == Token.ElseTag) 是else标签 { tagElseTag = tagList[j]; } Token.TagEnd) { IfTag ifTag = IfTag(tagStartIf,tagElseTag,pageHtml); if (!Regex.IsMatch(ifTag.startIf.tagStr,1)"> { return pageHtml.Substring( ifTag.endIf.length); } } } ; } } } } #region 替换页面function 替换页面function string ReplaceFunctions(#region 替换cutstr函数 Regex reg = \${cutstr\((.*),([\d]+)\)}noreCase); MatchCollection mc = mc) { Regex reg2 = (?:<[^<>]+[\s]+[^<>]+[\s]*/>)|(?:<[^<>]+[\s]+[^<>]+[\s]*>)|(?:</[^<>]+>)|(?: )noreCase); string html = reg2.Replace(m.Groups[if (html.Length > Convert.ToInt32(m.Groups[].Value)) { pageHtml = pageHtml.Replace(m.Value,html.Substring(].Value))); } { pageHtml = pageHtml.Replace(m.Value,html); } } #region 替换html2text函数 reg = \${html2text\((.+),RegexOptions.IgnoreCase); mc =); pageHtml =#region 替换replace函数\${replace\(([^\(\),]+),([^\(\),]+)\)} mc) { pageHtml = pageHtml.Replace(m.Value,m.Groups[1].Value.Replace(m.Groups[2].Value.Replace('""),1)">))); } #region 替换页面include 替换页面include string ReplaceIncludes(HttpServerUtilityBase server,1)"> pageHtml) { Regex reg = mc) { StreamReader sr = new StreamReader(server.MapPath(m.Groups[].Value),Encoding.UTF8); string html = sr.ReadToEnd(); sr.Close(); pageHtml =#region 替换页面set 替换页面set string ReplaceSets( mc) { Regex regSub = noreCase); MatchCollection mcSub = regSub.Matches(m.Groups[string data = string model = where = foreach (Match mSub mcSub) { switch (mSub.Groups[].Value) { data: data = mSub.Groups[].Value; : model = mSub.Groups[: where = mSub.Groups[; } } (data) { : ChannelDal m_ChannelDal = ChannelDal(); cms_channel channel = m_ChannelDal.Get(); Dictionary<object> dic = new Dictionary<(); dic.Add(model,channel); pageHtml = pageHtml.Replace(m.Value,1)">); pageHtml = TemplateDal.ReplaceModels(pageHtml,dic); ; } } #region 获取head内容 获取head内容 string GetHeadHtml(<head>([\S\s]*)</head>noreCase); Match m = reg.Match(pageHtml); return m.Groups[].Value; } #region 获取body内容 获取body内容 string GetBodyHtml(<body>([\S\s]*)</body>#region 获取一个ForeachTag 获取一个ForeachTag static ForeachTag GetForeachTag(string list = ) { ForeachTag foreachTag = if (foreachTag.main && foreachTag.list == list) { foreachTag; } } ; } } } } end 遍历标签集合 ; } } end of class TemplateDal end of namespace DAL
System.Threading; System.Web.Mvc; System.Web.Script.Serialization; Common; Common.Utils; DAL; DBHelper; NetCMS.Web.Areas.Admin.Controllers { 前台更新 FrontPageManageController : Common.ControllerBase { #region 变量 private SiteDal m_SiteDal = SiteDal(); private ChannelDal m_ChannelDal = ChannelDal(); private ContentDal m_ContentDal = ContentDal(); 进度总数 private double total = 当前进度 int cur = 错误信息 string errMsg = .Empty; #region 替换 替换 string Replace(string templateHtml,1)"> dic) { templateHtml = TemplateDal.ReplaceSets(templateHtml); templateHtml = TemplateDal.ReplaceModels(templateHtml,dic); templateHtml = TemplateDal.ReplaceIncludes(Server,templateHtml); templateHtml =while (TemplateDal.HasIfElse(templateHtml)) { templateHtml = TemplateDal.ReplaceIfElse(templateHtml); } (TemplateDal.HasForeach(templateHtml)) { templateHtml = TemplateDal.ReplaceLists(templateHtml,dic); } TemplateDal.ReplaceIfElse(templateHtml); } templateHtml = TemplateDal.ReplaceFunctions(templateHtml); string headHtml = TemplateDal.GetHeadHtml(templateHtml); string bodyHtml = TemplateDal.GetBodyHtml(templateHtml); StringBuilder sb = StringBuilder(); sb.AppendFormat(<!DOCTYPE html>\r\n<html>\r\n<head>\r\n{0}\r\n</head>\r\n<body>\r\n{1}\r\n</body>\r\n</html>\r\n sb.ToString(); } #region Index页面 [Permission(Code = Index)] public ActionResult Index() { View(); } #region Update更新 [HttpPost] [Permission(Code = ActionResult Update() { trynew Thread(new ThreadStart(delegate() { { UpdateTheme(); UpdateIndex(); UpdateError(); UpdateComments(); } catch (Exception ex) { errMsg += ex.Message + <br />" + ex.StackTrace.Replace(\n); } })).Start(); { UpdateList(); } { UpdateContent(); } ); } })).Start(); return Content(OK); } (Exception ex) { Content(ex.Message); } } #region 更新theme 更新theme void UpdateTheme() { List<cms_site_ext> siteList = m_SiteDal.GetListAll(); foreach (cms_site_ext site in siteList) 遍历站点 string fromPath = Server.MapPath(string.Format(/templates/{0}/theme/string toPath = Server.MapPath(/{0}/theme/copyThemeFiles(fromPath,toPath); } cur++; } 更新theme中的文件 void copyThemeFiles(string fromPath,1)"> toPath) { Directory.Exists(toPath)) { Directory.CreateDirectory(toPath); } string filePath Directory.GetFiles(fromPath)) { System.IO.File.copy(filePath,toPath + Path.GetFileName(filePath),1)">string dirPath Directory.GetDirectories(fromPath)) { int pos = dirPath.LastIndexOf(\\); copyThemeFiles(dirPath,toPath + dirPath.Substring(pos + 1) + ); } } #region 更新index页面 更新index页面 UpdateIndex() { List<cms_site_ext> siteList =; string templateHtml = TemplateDal.LoadTemplate(Server,1)">/templates/{0}/index.html(); dic.Add(siteparentParentChannel cms_channel()); dic.Add(parentChannel cms_channel()); TemplateDal.WriteTemplate(Server,/{0}/index.htmlif (i++ == /theme//index.html#region 更新list页面 更新list页面 UpdateList() { List<cms_site_ext> siteList = { List<cms_channel_ext> channelList = m_ChannelDal.GetList(channel.siteId={0}in channelList) 遍历栏目 string.IsNullOrWhiteSpace(errMsg)) break; 有错误则跳出 #region 获取父栏目 cms_channel parentParentChannel; cms_channel parentChannel; if (channel.parentId == -) { parentChannel = cms_channel(); parentChannel.parentId = -; } { parentChannel = m_ChannelDal.Get(channel.parentId); } if (parentChannel.parentId == -) { parentParentChannel = cms_channel(); parentParentChannel.parentId = - { parentParentChannel = m_ChannelDal.Get(parentChannel.parentId); } #endregion if (channel.listType == ()Enums.ChannelListType.文字列表 || channel.listType == ()Enums.ChannelListType.图片列表 || channel.listType == ()Enums.ChannelListType.父级栏目) { #region 取模板 string templateFileName = string.IsNullOrWhiteSpace(channel.template) ? list.html : channel.template; /templates/{0}/list/{1}#endregion #region 设置分页参数 ForeachTag foreachTag = TemplateDal.GetForeachTag(templateHtml); PagerModel pager = PagerModel(); if (foreachTag != ) { pager.rows = foreachTag.pageSize; } { pager.rows = 20; } pager.page = do { List<cms_content_ext> contentList = m_ContentDal.GetList(); Dictionary<(); dic.Add(pagerPagelist(pager.page,pager.pageCount)); filePath; if (pager.page == ) { filePath = /{0}/list{1}.html/{0}/list{1}{2}.html-" + pager.page.ToString()); TemplateDal.WriteTemplate(Server,dic)); } while (pager.page++ <= pager.pageCount); 遍历每页数据 } )Enums.ChannelListType.单篇文章) { cms_content content = m_ContentDal.GetByChannelId(channel.id); if (content == ) { StringBuilder sb = StringBuilder(); sb.Append(<!DOCTYPE html>\r\n<html>\r\n<head>\r\n); sb.AppendFormat(<script type=\"text/javascript\">window.location = \"error.html\";</script></head>\r\n<body>\r\n</body>\r\n</html>\r\n); string filePath = { StringBuilder sb = <script type=\"text/javascript\">window.location = \"/{0}/content{1}.html\";</script>)Enums.ChannelListType.页面链接) { string url = .Empty; if (channel.pageUrl == comments.html) { url = /{0}/{1} { url = channel.pageUrl; } StringBuilder sb = StringBuilder(); sb.Append(); sb.AppendFormat(<script type=\"text/javascript\">window.location = \"{0}\";</script>); ; } end 遍历 channelList } end 遍历 siteList } #region 更新单个list页面 更新单个list页面 public ActionResult UpdateListSingle( id) { { cms_channel channel = m_ChannelDal.Get(id); cms_site site = m_SiteDal.Get(channel.siteId); cms_channel parentParentChannel; cms_channel parentChannel; ) { parentChannel = cms_channel(); parentChannel.parentId = -; } { parentChannel = m_ChannelDal.Get(channel.parentId); } ) { parentParentChannel = cms_channel(); parentParentChannel.parentId = - { parentParentChannel = m_ChannelDal.Get(parentChannel.parentId); } #endregion )Enums.ChannelListType.文字列表 || channel.listType == ()Enums.ChannelListType.图片列表 || channel.listType == ()Enums.ChannelListType.父级栏目) { #region 取模板 : channel.template; ForeachTag foreachTag = TemplateDal.GetForeachTag(templateHtml); PagerModel pager = PagerModel(); ) { pager.rows = foreachTag.pageSize; } { pager.rows = ; } pager.page = { List<cms_content_ext> contentList = m_ContentDal.GetList(); Dictionary<(); dic.Add( filePath; ) { filePath = pager.page.ToString()); TemplateDal.WriteTemplate(Server,dic)); } } )Enums.ChannelListType.单篇文章) { cms_content content = m_ContentDal.GetByChannelId(channel.id); ) { StringBuilder sb = { StringBuilder sb = )Enums.ChannelListType.页面链接) { ) { url = { url = channel.pageUrl; } StringBuilder sb = StringBuilder(); sb.Append(); sb.AppendFormat(var json = { ok = Json(json); } { ok = ex.Message }; Json(json); } } #region 更新content页面 更新content页面 UpdateContent() { List<cms_content_ext> contentListAll = m_ContentDal.GetListAll(); in contentListAll) 遍历内容详情 有错误则跳出 #region 获取下一篇、上一篇、栏目、站点、父栏目等 cms_content_ext nextContent = m_ContentDal.GetNext(content.id); if (nextContent == ) { nextContent = cms_content_ext(); nextContent.isNull = ; } cms_content_ext preContent = m_ContentDal.GetPre(content.id); if (preContent == ) { preContent = cms_content_ext(); preContent.isNull = ; } cms_channel channel = m_ChannelDal.Get(content.channelId); cms_site site = m_SiteDal.Get(channel.siteId); cms_channel parentParentChannel; cms_channel parentChannel; if (content.isPageUrl == /{0}/content{1}.html); TemplateDal.WriteTemplate(Server,sb.ToString()); } string.IsNullOrWhiteSpace(content.template) ? content.html : content.template; /templates/{0}/content/{1} Dictionary<(); dic.Add(preContentnextContent++; } } #region 更新单个content页面 更新单个content页面 public ActionResult UpdateContentSingle( { cms_content content = m_ContentDal.Get(id); #region 更新error页面 更新error页面 UpdateError() { List<cms_site_ext> siteList =/templates/{0}/error.htmlnew cms_channel() { id = -999 }); TemplateDal.WriteTemplate(Server,1)">/{0}/error.html#region 更新comments页面 更新comments页面 UpdateComments() { List<cms_site_ext> siteList =); if (channel != ) { cms_channel parentParentChannel; cms_channel parentChannel; m_ChannelDal.Get(parentChannel.parentId); } cms_content_ext content = ModelHelper.Convert<cms_content_ext>(m_ContentDal.GetByChannelId(channel.id)); ) { content = cms_content_ext(); content.isNull = /templates/{0}/comments.html/{0}/comments.html#region GetProcess获取更新进度 ActionResult GetProcess() { .IsNullOrWhiteSpace(errMsg)) { if (total == ) { total = GetTotal(); 0% { int percent = (int)(cur / total * 100if (percent == ) { cur = ; total = return Content({0}%错误: errMsg); } } #region GetTotal获取进度总数 获取进度总数 <returns></returns> GetTotal() { int channelCount = m_ChannelDal.GetList().Count; int contentCount = m_ContentDal.GetAllCount(); return channelCount + contentCount + 4#region GetPagelist生成分页数字列表 生成分页数字列表 private List<PageNum> GetPagelist(int currentPage,1)"> pageCount) { List<PageNum> result = new List<PageNum>(); result.Add(new PageNum()); if (currentPage > ) { result.Add()); } int i = currentPage - 2; i <= currentPage + 2; i++) { if (i > 1 && i < pageCount) { result.Add( PageNum(i)); } } if (pageCount - currentPage > 3)); } result.Add( PageNum(pageCount)); } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。