关于.net生成静态页面的方法总结
- 格式:doc
- 大小:72.50 KB
- 文档页数:14
前端开发中的静态网页生成和优化技术随着互联网的发展,网页的加载速度成为了用户体验的重要指标之一。
在前端开发中,静态网页生成和优化技术成为了提升网页性能的关键。
一、静态网页生成的意义静态网页生成是指在网页请求到达服务器时,将动态生成的内容事先保存成静态文件,并将其缓存在服务器上,再由服务器直接提供给用户。
相比动态生成网页,在静态网页生成的过程中,服务器没有多余的数据库查询等操作,可以显著减少服务器响应时间,提高网页加载速度。
静态网页生成的核心是将动态内容缓存成静态文件,以便下次请求时直接提供给用户,无需重新生成,从而减少对服务器资源的消耗。
这种技术适用于内容更新频率较低,但访问量较大的网站,例如新闻网站、企业官网等。
二、静态网页生成的实现方式静态网页生成的实现方式有多种,其中较为常见的是使用静态网页生成器和编译器。
1. 静态网页生成器静态网页生成器是一种工具,可以将动态内容转化为静态文件,并提供一些辅助功能,例如自动化部署、资源优化等。
目前比较流行的静态网页生成器有Jekyll、Hugo、Gatsby等。
这些工具通常基于模板语言和标记语言,开发者可以通过编写模板和写文章的方式,生成静态网页。
这样,每次更新内容时,只需要重新生成相关的静态文件,提高了网页更新的效率。
2. 编译器编译器是将一种源代码语言转化为另一种目标代码语言的工具。
在前端开发中,常见的使用编译器的方式是将高级语言(例如TypeScript、Less等)编译为浏览器可识别的低级语言(例如JavaScript、CSS)。
通过使用编译器,开发者可以更灵活地使用一些新的语言特性和语法糖,而无需担心浏览器的兼容性问题。
同时,编译器还可以对代码进行一些优化,从而提高网页的加载速度。
三、静态网页优化技术静态网页生成只是提升网页性能的一个环节,还需要进一步优化以达到更好的效果。
以下是一些静态网页优化的技术。
1. 图片压缩和懒加载图片通常是网页中占用带宽和加载时间最多的资源之一。
前端开发中的静态页面生成与预渲染技术随着互联网的普及和发展,前端开发的重要性也日益突出。
而在前端开发中,静态页面生成与预渲染技术成为了热门话题。
本文将探讨静态页面生成的概念、作用以及与预渲染技术的关系。
一、静态页面生成的概念静态页面生成是一种将动态内容提前生成为静态 HTML 文件的技术。
传统的网站开发中,页面内容一般是通过后端服务器动态生成的。
然而,随着前端框架的兴起,前端开发逐渐与后端分离,前端工程师承担了更多的责任。
这时,静态页面生成就成为了一种解决方案。
静态页面生成的基本原理是在构建过程中,通过调用数据接口获取动态内容,将这些内容预先渲染为静态 HTML 文件。
这样,用户在访问网站时就可以直接获取到已经生成好的静态页面,无需再依赖后端服务器进行动态生成。
二、静态页面生成的作用1.提高性能和加载速度静态页面生成提前将动态内容生成为静态 HTML 文件,减少了访问时的服务器负载,并且加快了页面的加载速度。
因为用户访问时直接获取到静态页面,而不需要等待后端服务器的响应和动态生成过程。
2.提升SEO效果搜索引擎爬虫更容易获取并索引静态页面内容,因此静态页面生成能够有效提升网站在搜索引擎上的排名。
相比动态生成的页面,静态页面的可读性更强,更易于搜索引擎的抓取和解析。
3.实现内容的缓存和CDN加速通过静态页面生成,可以将生成好的静态文件存储在 CDN(内容分发网络)上,实现内容的缓存和分发。
这样可以进一步提升网站的性能和加载速度,减少带宽消耗,提高用户体验。
三、静态页面生成与预渲染技术的关系静态页面生成与预渲染技术有着一定的联系和区别。
预渲染技术是指在构建过程中,通过运行 JavaScript 代码获取动态内容,并将其预先渲染为静态 HTML 文件,存储在生成过程中。
这样,在用户访问页面时,就直接获取到已经渲染好的静态页面,而不需要再依赖前端 JavaScript 的执行。
与传统的静态页面生成相比,预渲染技术更加灵活,能够灵活利用前端框架的优势,同时又能够提供静态页面生成的性能优势和SEO优势。
前端开发技术中的静态网页生成与预渲染随着互联网技术的高速发展,前端开发工作成为了越来越重要的一部分。
在网页开发中,静态网页生成和预渲染是两个十分重要的概念。
本文将介绍静态网页生成和预渲染的定义、作用以及在前端开发中的应用。
静态网页生成(Static Site Generation,SSG)是指在服务器端将动态内容提前生成为静态文件并保存之后,再把这些静态文件传输给客户端进行访问。
与动态网页相比,静态网页不需要在访问时通过服务端渲染,因此可以大大提高网页加载速度和用户体验。
静态网页生成的最大优势在于缓存,只需要在页面内容更新时重新生成,其他情况下直接从缓存中读取即可。
与静态网页生成相比,预渲染(Prerendering)是指在用户访问网页之前,将网页在服务器端预先渲染为静态文件,并将其传输给客户端。
预渲染可以在构建时阶段进行,也可以在运行时动态生成。
通过预渲染,可以在用户请求页面时,直接返回已经渲染好的静态文件,而不需要进行服务端渲染,进一步提高了页面的加载速度和用户体验。
静态网页生成和预渲染在前端开发中的应用广泛而且重要。
在大型网站中,随着访问量的增大,服务端渲染的压力也会增加。
采用静态网页生成和预渲染技术可以将一部分内容提前生成并缓存,有效减轻了服务端的压力,提高了网站的性能和稳定性。
此外,静态网页生成和预渲染还可以被用于构建静态博客、文档网站以及电商网站等具有大量静态内容的网站。
通过将动态内容提前生成为静态文件,可以保证页面的加载速度,提供更好的用户体验。
而且在构建静态网站时,可以使用各种前端框架和工具,如Gatsby、Hugo等,来生成静态文件,使开发更加高效,同时还可以享受到一些前端框架和工具提供的其他功能。
当然,静态网页生成和预渲染也有一些限制。
因为是提前生成静态文件,所以对于那些拥有动态内容和频繁更新内容的网站来说,静态网页生成和预渲染可能并不适用。
此外,由于静态网页生成和预渲染需要提前生成静态文件,所以对于实时性要求较高的网站,可能需要重新考虑这些技术的使用。
[转]网站生成静态页面的几种策略2008-02-02 11:13网站生成静态页面,及网站数据采集的攻、防原理和策略目前很多人都开始注重动态页面生成HTML页了,但选择哪种生成HTML的方法和防采集却不防搜索引擎的问题却经常困扰大家。
解决此问题则是本文产生的原因。
首先祥细说一下常用的几种生成HTML的方法:生成HTML方法主要步骤只有两个:一、获取要生成的html文件的内容二、将获取的html文件内容保存为html文件我在这里主要说明的只是第一步:如何获取要生成的html文件的内容:目前常用获取html文件的内容的方法有几下几种:1、str="内容"str=str&"内容数据库读取内容........."这种方法与是在脚本内写要生成的html内容,不太方便预览生成页面的内容,无法可视化布局页面,更改html模板时会更加复杂。
用这种方法的人很多,但我感觉这种方法是最不方便的。
2、制作单独的HTML模板页,动态的内容用特定的字符作为标记(如:有人用$title$标记为网页标题),用ADODB.Stream或者Scripting.FileSystemObject 将其模板内容载入,然后再用替换方法把原先定好的标记替换为动态内容(如:Replace(载入的模板内容,"$title$",rs("title" ) ) )。
3、用XMLHTTP或serverXMLHTTP获取动态页所显示的HTML内容,我常用的生成html文件的实例:'weburl是要获取的动态页地址'getHTTPPage(weburl)是获取动态页内容的函数weburl="http://"&Request.ServerVariables("SERVER_NAME")&"/contact.asp ?id="&rs("id")&""‘指定动态页地址body=getHTTPPage(weburl)'用函数取到动态页地址的内容此方法最大的好处就是不用费力气专门去写静态的模板页面,只是将原来就有的动态页面转换为HTML静态页面,但生成速度不是太快。
浅谈生成静态网页技术作者:卢晓阳来源:《数字化用户》2013年第22期【摘要】本文针对动态网页和静态网页作一比较,提出一种自动生成静态网页的技术,网站管理者通过在后台更新网数据库时,调用生成静态网页的函数即可自动生成静态网页。
并分析了生成静态网页的优势。
【关键词】生成静态静态网页一、引言随着互联网技术的不断发展,越来越多的企业都拥有自己的网站,网站或用来展示他们的产品,或用来宣传他们的业务,网站架起了用户之间的桥梁。
而网站主要有网页组成,网页大体上可分为动态网页和静态网页。
动态网页指的是采用ASP,,JSP,PHP,Cold Fusion,CGI等程序动态生成的页面,一般以·asp,·jsp,·php,·per,·cgi等形式为后缀。
静态网页是利用启事本直接使用html语言编写的 , 也可使用 Microsoft FrontPage 或Macromedia Dreamweaver等可视化开发软件制作网页。
一般以.htm,.html等形式为人后辍。
用动态网页开发技术开发的网站可以极大的提高开发效率及网站规模, 但由于其与数据库紧密相联, 必须依靠数据库才能正常运行, 如果后台数据库发生故障, 整个网站马上瘫痪。
如何才能使得网站既具备静态网页高速和稳定, 又具备动态网页的规模和高效?需要我们探索自动生成静态网页的技术。
二、一种生成静态网页的技术动态生成静态网页基本的原理是: 客户所访问的网站与使用静态网页开发技术开发的网站一样都是由静态的页面组成, 客户与数据库没有联系 , 这就保证了网站的高速和稳定 ;但这些静态的页面不是由开发人员手工完成, 而通过后台自动生成, 这就保证了网站的规模与高效。
常见的一种生成静态网页的技术是利用模板文件与数据替换的方法,是先建立一个或者多个以html 为基础的模板文件,在文件中用特殊字符串代表要替换的变量值,然后用查询与替换的方法把数据库中的值替换相应字符串,生成.html的全静态页面。
静态页面快速构建方法说实话静态页面快速构建这件事,我一开始也是瞎摸索。
我就想啊,怎么能简单又快速地把一个静态页面整出来呢。
我试过一种方法,就是纯手写HTML和CSS。
但这个真的是很麻烦,特别是样式那块。
你想啊,就像建房子,我得一块砖一块砖地垒,那CSS 各种样式属性就像是不同形状的砖,什么颜色啊、大小啊、排列方式啊,搞得我头都大了。
要是想调整一下布局,那就跟把建好的房子一部分拆了重新搭一样,超级麻烦。
这算是我一个失败的尝试吧。
后来呢,我又发现了一些模板网站。
这就方便多了,就好比是房子已经有了一个基本的框架,你只要稍微装修一下就好。
你在这些模板网站上,能找到各种风格的模板,挑一个差不多的,然后修改修改内容。
不过这里也有个小问题,有时候那些模板的结构可能很复杂,不好改,就像那种特别华丽但是很复杂的房子,你想把它改成自己想要的简约风,可难了。
再后来啊,我知道了像Bootstrap这样的前端框架。
这东西可太有用了。
它就像是一套标准的建筑材料和设计规范。
很多元素都已经写好样式和功能了,你直接拿过来用就行。
比如说,你想做个导航栏,在Bootstrap 里就有现成的代码结构,你稍微改改字什么的就可以用了。
不过呢,要真用好也不是那么容易的,我就犯过错。
我一开始没有仔细看它的文档,好多类名的用法都弄错了,结果页面显示得乱七八糟的,就好像房子搭歪了一样。
还有啊,现在不是有很多可视化的页面构建工具吗?像是Adobe Dreamweaver这种,它有点像堆积木的感觉。
你直接在界面上拖拖拉拉,把你想要的元素堆到合适的位置就行。
但是呢,这种工具生成的代码有时候会比较冗余,就像房子里有很多不必要的柱子一样,可能会影响页面加载速度。
我总结了一下哦。
要是你想快速构建静态页面,先看看有没有合适的模板先拿来用,要是模板不太符合要求,你可以借助像Bootstrap这样的框架去调整或者自己加东西。
可视化工具也可以拿来打个基础,不过最后得优化下代码。
网上找到的几种静态化方法,时间长了,也忘了出处,不过大家还是可以学习一下。
几种静态化方法:1. 使用IIS_ReWrite 静态化处理,适合PHP、ASP、 程序。
A. isapi_rewrite.isapi_rewrite分精简(lite)和完全(full)版.精简版不支持对每个虚拟主机站点进行重写,只能进行全局处理,精简版下载地址ISAPI_Rewrite 2.7 For IIS 。
B. 打开IIS,选择网站,右键菜单属性,添加过滤器。
如图:C. 打开文件:开始菜单->程序->Helicon->ISAPI_Rewrite->httpd.iniD. 将RewriteRule /user/(\d+).htm /user.asp\?id=$1 [I,O] 加入内容中。
E. 在浏览器地址栏输入:/user/1.htm 页面将指向/user.asp?id=1。
2. 使用虚拟主机的ASP 网站,需要使用404 错误操作实现静态化。
A. 下载404 处理页面。
404_Rewrite_GB2312.rarB. 解压后将Rewrite.asp、error.asp 放在网站的根目录。
C. 设置网站自定义错误信息如图:D. 在error.asp 里添加处理命令:Call ParaseUrl("/(\d+).htm","/user.asp?User=$1")E. 在需要静态化的实例user.asp 页面中添加代码:<!-- #include virtual="/rewrite.asp" --> 引用文件<%response.wri te "<li>Para=" & session("Para") ‘变量是通过Session 传递‘原来使用request(“user”)获得参数的命令,需要修改成request_(“user”)调用response.write "<li>request_(""User"")=" & request_("User")‘原用request.querystring (“user”)获得参数命令,修改为request__.querystring (“user”)调用response.write "<li>request__.querystring(""User"")=" & request__.querystring("User")%>F. 在地址栏输入/1.htm ,实际调用/user.asp?user=13. 使用 开发的网页程序,使用URLRewriter.dll 实现静态化。
1)做一个比较好的模板temp1.html,并在模板中写好题目,内容,作者以及发布日期的标记,如果还有其他列表的话也要写好其他列表的标记,如题目可以用标记:$Title$,内容可以用$cont$,发布日期$PubDate,最新发布新闻列表$DtNewest$;2)设计数据库,可以设置两张表,一张表存放模板,一张用于存放发布新闻的内容如模板表:TempTable :ID ,classid,TempPath(存放模板的路径);新闻表:NesTable: ID,ClassID,title,cont,Filepath(发布后存放静态页面的路径),pubdate,author,status;3)添加新闻时,现在记录添加到新闻表中,然后再根据栏目的ID找到该栏目的模板,把模板中的内容读取到一个字符串变量中,并用新闻表中的字段替换模板中的相应标记,然后调用c#中的读写文件的类,写到一个静态文件中如:News.HTml,写成功后再更新数据中静态文件路径filepath;这样一个静态文件就写好了另外本人也从网络上搜集了一些资料,供大家参考(关于新闻内容分页的情况下次叙述)一、类似的模板模板页Text.html代码<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" ><HTML><HEAD><title>$ShowArticle$</title><body>$title$<br>$author$<br>$content$<br></body></HTML>二、C#生成静态页类代码|支持列表生成代码using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Web.UI.HtmlControls;using zj123.Model;using System.IO;using System.Text.RegularExpressions;using System.Runtime.InteropServices;using System.Text;using System.Collections;namespace WebUI.html{public class EasyHtml{public bool MakeHtml(string artid){bool succ = false;int len =Convert.ToInt32(Convert.ToString(System.Configuration.ConfigurationMa nager.AppSettings["titlelength"]) ?? "20");//读取数据string sql = string.Format("selecta.*,b.ClassName,b.Depth,b.OrderBy,b.isTop,b.isList,b.IsLinks,b.Links,b.PicURL,b.ParentID,b.TemplateoutId,b.TemplateinNeiId,b.TemplateinLis tId from article a,zone b where a.classid=b.classid and a.Status=3 and a.articleid={0}", artid);DataTable dt = DbHelperOleDb.Query(sql).Tables[0];if(dt.Rows.Count>0){//外模板string waitemp = "";DataTablewaidt =DbHelperOleDb.Query(string.Format("select * from template where TemplateID={0}",Convert.ToString(dt.Rows[0]["TemplateoutId"]).Trim()) ).Tables[0];if (waidt.Rows.Count > 0){waitemp =Convert.ToString(waidt.Rows[0]["TemplateContent"]);}//内模板string neitemp = "";DataTable neidt = DbHelperOleDb.Query(string.Format("select * from template where TemplateID={0}", Convert.ToString(dt.Rows[0]["TemplateinNeiId"]).Trim())).Tables[0];if (neidt.Rows.Count > 0){neitemp = Convert.ToString(neidt.Rows[0]["TemplateContent"]);}//替换模板waitemp = waitemp.Replace("$intemplate$", neitemp);//替换类型string tempclassname =mon.GetP(Convert.ToString(dt.Rows[0]["classid"]));waitemp = waitemp.Replace("$ClassName$", tempclassname);#region "文章列表"//最新的文章System.Text.StringBuilder sbneartitle = new System.Text.StringBuilder("<div align=\"left\">");DataTable nearTitledt = DbHelperOleDb.Query("select top 10 case whenlen(title)>" + len + " then substring(title,1," + len + ") else title end as Title,HtmlPath from article where iscreate=1 order by updatetime desc").Tables[0];for (int i = 0; i < nearTitledt.Rows.Count; i++){sbneartitle.AppendFormat("<li><ahref=\"{0}\">{1}</a></li>",Convert.ToString(nearTitledt.Rows[i]["HtmlPath"]),Convert. ToString(nearTitledt.Rows[i]["Title"]));}sbneartitle.Append("</ol></div>");waitemp = waitemp.Replace("$NearTitle$", sbneartitle.ToString());sbneartitle.Remove(0,sbneartitle.ToString().Length);if (waitemp.Contains("$OnTopTitle$")){sbneartitle.Append("<div align=\"left\">");//固定nearTitledt = DbHelperOleDb.Query("select top 10 case when len(title)>" + len + " then substring(title,1," + len + ") else title end as Title,HtmlPath from article where iscreate=1 and OnTop=1 order by updatetime desc").Tables[0];for (int i = 0; i < nearTitledt.Rows.Count; i++){sbneartitle.AppendFormat("<li><a href=\"{0}\">{1}</a></li>", Convert.ToString(nearTitledt.Rows[i]["HtmlPath"]),Convert.ToString(nearTitledt.Rows[i]["Title"]));}sbneartitle.Remove(0, sbneartitle.ToString().Length);sbneartitle.Append("</ol></div>");waitemp = waitemp.Replace("$OnTopTitle$", sbneartitle.ToString());sbneartitle.Remove(0, sbneartitle.ToString().Length);}if (waitemp.Contains("$HitsTitle$")){sbneartitle.Append("<div align=\"left\">");//热门nearTitledt = DbHelperOleDb.Query("select top 10 case when len(title)>" + len + " then substring(title,1," + len + ") else title end as Title,HtmlPath from article where iscreate=1 and Hits>1000 order by Hits desc,updatetime desc").Tables[0];for (int i = 0; i < nearTitledt.Rows.Count; i++){sbneartitle.AppendFormat("<li><a href=\"{0}\">{1}</a></li>", Convert.ToString(nearTitledt.Rows[i]["HtmlPath"]),Convert.ToString(nearTitledt.Rows[i]["Title"]));}sbneartitle.Append("</ol></div>");waitemp = waitemp.Replace("$HitsTitle$", sbneartitle.ToString());sbneartitle.Remove(0, sbneartitle.ToString().Length);}if (waitemp.Contains("$Elite$")){sbneartitle.Append("<div align=\"left\">");//推荐ElitenearTitledt = DbHelperOleDb.Query("select top 10 case when len(title)>" + len + " then substring(title,1," + len + ") else title end as Title,HtmlPath from article where iscreate=1 and Elite=1 order by updatetime desc").Tables[0];for (int i = 0; i < nearTitledt.Rows.Count; i++){sbneartitle.AppendFormat("<li><a href=\"{0}\">{1}</a></li>", Convert.ToString(nearTitledt.Rows[i]["HtmlPath"]),Convert.ToString(nearTitledt.Rows[i]["Title"]));}sbneartitle.Append("</ol></div>");waitemp = waitemp.Replace("$Elite$", sbneartitle.ToString());sbneartitle.Remove(0, sbneartitle.ToString().Length);}//相关Classidif (waitemp.Contains("$ClassTitle$")){sbneartitle.Append("<div align=\"left\">");nearTitledt = DbHelperOleDb.Query("select top 10 case when len(title)>" + len + " then substring(title,1," + len + ") else title end as Title,HtmlPath from article where iscreate=1 and classid=" + Convert.ToString(dt.Rows[0]["classid"]) + " order by updatetime desc").Tables[0];for (int curr = 0; curr < nearTitledt.Rows.Count; curr++){sbneartitle.AppendFormat("<li><a href=\"{0}\">{1}</a></li>", Convert.ToString(nearTitledt.Rows[curr]["HtmlPath"]),Convert.ToString(nearTitledt.Rows[curr]["Title"]));}sbneartitle.Append("</ol></div>");waitemp = waitemp.Replace("$ClassTitle$", sbneartitle.ToString());sbneartitle.Remove(0, sbneartitle.ToString().Length);}//相关Classidif (waitemp.Contains("$LikeTitle$")){sbneartitle.Append("<div align='left'>");DataTable dtlike = zj123.Model.Article.GetLike(artid);for (int likei = 0; likei < dtlike.Rows.Count; likei++){sbneartitle.AppendFormat("<li><a href=\"{0}\">{1}</a></li>", Convert.ToString(dtlike.Rows[likei]["HtmlPath"]),Convert.ToString(dtlike.Rows[likei]["Title"]));}sbneartitle.Append("</ol></div>");waitemp = waitemp.Replace("$LikeTitle$", sbneartitle.ToString());sbneartitle.Remove(0, sbneartitle.ToString().Length);}///////////////////////////////////////////////////////////////////////////////////// ////////#endregion//替换最新的数据for (int j = 0; j < dt.Columns.Count; j++){if (dt.Columns[j].ColumnName.Trim() == "Title"){string temp1 = "";string temp2 = "";string typefont = Convert.ToString(dt.Rows[0]["TitleFontType"]);if (typefont == "0"){temp1 = "<strong>";temp2 = "</strong>";}else if (typefont == "1"){temp1 = "<em>";temp2 = "</em>";}else if (typefont == "2"){temp1 = "<strong><em>";temp2 = "</strong></em>";}else{}//System.Text.RegularExpressions.Regex reg = newSystem.Text.RegularExpressions.Regex();//Match match = Regex.Matches();//reg.Replace(waitemp,Convert.ToString(dt.Rows[0][dt.Columns[j].ColumnName.Trim()]), 1,waitemp.IndexOf("$Title$"));string temp11 = waitemp.Substring(0, waitemp.IndexOf("$Title$") + 8);string temp22 = waitemp.Substring(waitemp.IndexOf("$Title$") + 8);temp11 = temp11.Replace("$Title$",Convert.ToString(dt.Rows[0][dt.Columns[j].ColumnName.Trim()])+"---"+Regex.Replace(R egex.Replace(tempclassname,"<[^>]*>",""),"[>|<]*",""));temp22 = temp22.Replace("$Title$", "<font color='" +Convert.ToString(dt.Rows[0]["TitleFontColor"]) + "'>" + temp1 +Convert.ToString(dt.Rows[0][dt.Columns[j].ColumnName.Trim()]) + temp2 + "</font>");waitemp = temp11 + temp22;temp11 = null;temp22 = null;//waitemp = waitemp.Replace("$" + dt.Columns[j].ColumnName.Trim() + "$", "<font color='" + Convert.ToString(dt.Rows[0]["TitleFontColor"]) + "'>" +temp1+Convert.ToString(dt.Rows[0][dt.Columns[j].ColumnName.Trim()]) +temp2+ "</font>");}else if (dt.Columns[j].ColumnName.Trim().ToLower() == "hits"){waitemp = waitemp.Replace("$" + dt.Columns[j].ColumnName.Trim() + "$", Convert.ToInt16(dt.Rows[0][dt.Columns[j].ColumnName.Trim()]) > 1000 ? ("热门") : (""));}else if (dt.Columns[j].ColumnName.Trim().ToLower() == "ontop"){waitemp = waitemp.Replace("$" + dt.Columns[j].ColumnName.Trim() + "$", Convert.ToString(dt.Rows[0][dt.Columns[j].ColumnName.Trim()]).ToLower() == "true" ? ("置顶") : (""));}else if (dt.Columns[j].ColumnName.Trim().ToLower() == "elite"){waitemp = waitemp.Replace("$" + dt.Columns[j].ColumnName.Trim() + "$",Convert.ToString(dt.Rows[0][dt.Columns[j].ColumnName.Trim()]).ToLower().ToString()== "true" ? ("推荐") : (""));}else{waitemp = waitemp.Replace("$" + dt.Columns[j].ColumnName.Trim() + "$", Convert.ToString(dt.Rows[0][dt.Columns[j].ColumnName.Trim()]));}}//替换链表信息//$typejs$waitemp = waitemp.Replace("$typejs$", Convert.ToString(dt.Rows[0]["ClassID"]));//$numjs$waitemp = waitemp.Replace("$numjs$", "10");//$setjs$waitemp = waitemp.Replace("$setjs$","");///js脚本信息//根据路径生成页面//路径检查string path =System.Web.HttpContext.Current.Request.PhysicalApplicationPath.Trim() +Convert.ToString(dt.Rows[0]["Links"]) + "\\" +Convert.ToDateTime(dt.Rows[0]["CreateTime"]).ToString("yyyy-MM");if(!Directory.Exists(path))Directory.CreateDirectory(path);string filename = "\\"+ Convert.ToString(dt.Rows[0]["ArticleID"]) + ".html";using(StreamWriter sw = newStreamWriter(path+"\\"+filename,false,System.Text.Encoding.GetEncoding("gb2312"))) {sw.Write(waitemp);sw.Flush();sw.Close();}//修改文章转台try{if (artid == null)return false;int j = int.Parse(artid);}catch{return false;}string sql1 = string.Format("update article set iscreate=1,htmlpath='{0}' where articleid={1}", "/" + Convert.ToString(dt.Rows[0]["Links"]).Replace("\\\\", "/") + "/" + Convert.ToDateTime(dt.Rows[0]["CreateTime"]).ToString("yyyy-MM") + filename, artid);DbHelperOleDb.ExecuteSql(sql1);}else{return false;}return succ;}/// <summary>/// 生成列表页/// </summary>/// <param name="classid"></param>/// <returns></returns>public bool MakeList(string classid){int len =Convert.ToInt32(Convert.ToString(System.Configuration.ConfigurationManager.AppSetting s["titlelength"]) ?? "20");bool succ = false;try{int i = int.Parse(classid);}catch{return false;}DataTable dt = DbHelperOleDb.Query(string.Format("selecta.*,b.ClassName,b.Depth,b.OrderBy,b.isTop,b.isList,b.IsLinks,b.Links,b.PicURL,b.ParentID,b.TemplateoutlistId,b.TemplateoutId,b.TemplateinNeiId,b.TemplateinListId,b.keywords,b.[ description] from article a,zone b where a.classid=b.classid and iscreate=1 anda.Status=3 and a.classid={0} order by a.UpdateTime desc,OnTop desc,Elite desc,Hits desc", classid)).Tables[0];if (dt.Rows.Count > 0){string classpath = HttpContext.Current.Request.PhysicalApplicationPath + @"\" + Convert.ToString(dt.Rows[0]["Links"]).Trim();//读取外模板信息string templatewai = "";DataTable templatewaidt = DbHelperOleDb.Query(string.Format("select * from template where TemplateID={0}",Convert.ToString(dt.Rows[0]["TemplateoutlistId"]))).Tables[0];if (templatewaidt.Rows.Count > 0){templatewai =Convert.ToString(templatewaidt.Rows[0]["TemplateContent"]);}//根据类型替换标题string tempclassname = mon.GetP(classid);templatewai = templatewai.Replace("$Title$",Convert.ToString(dt.Rows[0]["ClassName"]).Trim()+"--"+Regex.Replace(Regex.Replace(tempclassname,"<[^>]*>",""),"[<|>]*",""));templatewai = templatewai.Replace("$ClassTitleTop$",Convert.ToString(dt.Rows[0]["ClassName"]).Trim());templatewai = templatewai.Replace("$ClassName$", tempclassname);templatewai = templatewai.Replace("$Keyword$",Convert.ToString(dt.Rows[0]["Keywords"]).Trim());templatewai = templatewai.Replace("$Description$",Convert.ToString(dt.Rows[0]["Description"]).Trim());int zong = dt.Rows.Count;int size = 10;try{size =Convert.ToInt16(System.Configuration.ConfigurationManager.AppSettings["pagesize"]);}catch{size = 10;}int pagecount = zong % size == 0 ? (zong / 10) : (zong / 10 + 1);string listcontent = "";DataTable dtlist = DbHelperOleDb.Query(string.Format("select * from template where TemplateID={0}", Convert.ToString(dt.Rows[0]["TemplateinListId"]))).Tables[0];if (dtlist.Rows.Count > 0){listcontent = Convert.ToString(dtlist.Rows[0]["TemplateContent"]);}//// Match mat = Regex.Match(this.rtbconten.Text.Trim(),"<tablehead>(?<content>.*)<tableheadend><tablebody></tablebodyend><tablepage> </tablepage><tablebottom></tablebottomend>", RegexOptions.Multiline | RegexOptions.IgnoreCase);//// MessageBox.Show(mat.Groups["content"].Value);////<tablehead>(?<content>.*)<tableheadend><tablebody></tablebodyend> <tablepage></tablepage><tablebottom></tablebottomend>////Match mat = Regex.Match(listcontent,"<tablehead>(?<head>.*)<tableheadend><tablebody>(?<body>.*)</tablebodyend><ta blepage>(?<page>.*)</tablepage><tablebottom>(?<bottom>.*)</tablebottomend>",Re gexOptions.IgnoreCase|RegexOptions.Multiline);string head = Convert.ToString(mat.Groups["head"]);string body = Convert.ToString(mat.Groups["body"]);string page = Convert.ToString(mat.Groups["page"]);string bottom = Convert.ToString(mat.Groups["bottom"]);//循环生成分页for (int i = 0; i < pagecount; i++){//System.Text.StringBuilder sbneilist = newSystem.Text.StringBuilder("<TABLE cellSpacing=0 cellPadding=0 width=760border=0><TBODY>");System.Text.StringBuilder sbneilist = new System.Text.StringBuilder(head);int l = 0;for (int j = (i * size < zong) ? (i * size) : (zong); j < ((i + 1) * size < zong ? ((i + 1) * size) : (zong)); j++){//sbneilist.Append(" <TR><TD vAlign=top align=centerbgColor=#f7f7f7 >");//string temp = listcontent;string temp = body;for (int k = 0; k < dt.Columns.Count; k++){temp = temp.Replace("$" + dt.Columns[k].ColumnName.Trim() + "$", Convert.ToString(dt.Rows[j][dt.Columns[k].ColumnName.Trim()]));}if ((++l) % 5 == 0){sbneilist.Append(temp).Append("<dd class=\"l\"></dd>");}else{sbneilist.Append(temp);}//sbneilist.Append("</td></tr>");}//sbneilist.Append("<TR><TDheight=36>").Append(mon.GetPage(i + 1, size, zong)).Append("</td></tr>");sbneilist.Append(page.Replace("¥pages¥", mon.GetPage(i + 1, size, zong)));// sbneilist.Append("</tbody></table>");sbneilist.Append(bottom);#region "文章列表"//最新的文章System.Text.StringBuilder sbneartitle = new System.Text.StringBuilder("");DataTable nearTitledt = DbHelperOleDb.Query("select top 10 case whenlen(title)>" + len + " then substring(title,1," + len + ") else title end as Title,HtmlPath fromarticle where iscreate=1 order by updatetime desc").Tables[0];for (int curr = 0; curr < nearTitledt.Rows.Count; curr++){sbneartitle.AppendFormat("<li>·<a href=\"{0}\">{1}</a></li>", Convert.ToString(nearTitledt.Rows[curr]["HtmlPath"]),Convert.ToString(nearTitledt.Rows[curr]["Title"]));}sbneartitle.Append("");templatewai = templatewai.Replace("$NearTitle$", sbneartitle.ToString());sbneartitle.Remove(0, sbneartitle.ToString().Length);sbneartitle.Append("");//固定nearTitledt = DbHelperOleDb.Query("select top 10 case when len(title)>" + len + " then substring(title,1," + len + ") else title end as Title,HtmlPath from article where iscreate=1 and OnTop=1 order by updatetime desc").Tables[0];for (int curr = 0; curr < nearTitledt.Rows.Count; curr++){sbneartitle.AppendFormat("<li>·<a href=\"{0}\">{1}</a></li>",Convert.ToString(nearTitledt.Rows[curr]["HtmlPath"]),Convert.ToString(nearTitledt.Rows[curr]["Title"]));}sbneartitle.Remove(0, sbneartitle.ToString().Length);sbneartitle.Append("");templatewai = templatewai.Replace("$OnTopTitle$", sbneartitle.ToString());sbneartitle.Remove(0, sbneartitle.ToString().Length);sbneartitle.Append("");//热门nearTitledt = DbHelperOleDb.Query("select top 10 case when len(title)>" + len + " then substring(title,1," + len + ") else title end as Title,HtmlPath from article where iscreate=1 and Hits>1000 order by Hits desc,updatetime desc").Tables[0];for (int curr = 0; curr < nearTitledt.Rows.Count; curr++){sbneartitle.AppendFormat("<li>·<a href=\"{0}\">{1}</a></li>", Convert.ToString(nearTitledt.Rows[curr]["HtmlPath"]),Convert.ToString(nearTitledt.Rows[curr]["Title"]));}sbneartitle.Append("");templatewai = templatewai.Replace("$HitsTitle$", sbneartitle.ToString());sbneartitle.Remove(0, sbneartitle.ToString().Length);sbneartitle.Append("");//推荐ElitenearTitledt = DbHelperOleDb.Query("select top 10 case when len(title)>" + len + " then substring(title,1," + len + ") else title end as Title,HtmlPath from article where iscreate=1 and Elite=1 order by updatetime desc").Tables[0];for (int curr = 0; curr < nearTitledt.Rows.Count; curr++){sbneartitle.AppendFormat("<li>·<a href=\"{0}\">{1}</a></li>", Convert.ToString(nearTitledt.Rows[curr]["HtmlPath"]),Convert.ToString(nearTitledt.Rows[curr]["Title"]));}sbneartitle.Remove(0, sbneartitle.ToString().Length);sbneartitle.Append("");templatewai = templatewai.Replace("$Elite$", sbneartitle.ToString());sbneartitle.Append("");//相关ClassidnearTitledt = DbHelperOleDb.Query("select top 10 case when len(title)>" + len + " then substring(title,1," + len + ") else title end as Title,HtmlPath from article where iscreate=1 and classid=" + classid + " order by updatetime desc").Tables[0];for (int curr = 0; curr < nearTitledt.Rows.Count; curr++){sbneartitle.AppendFormat("<li>·<a href=\"{0}\">{1}</a></li>", Convert.ToString(nearTitledt.Rows[curr]["HtmlPath"]),Convert.ToString(nearTitledt.Rows[curr]["Title"]));}sbneartitle.Append("");templatewai = templatewai.Replace("$ClassTitle$", sbneartitle.ToString());sbneartitle.Remove(0, sbneartitle.ToString().Length);//sbneartitle.Append("<div align='left'>");//DataTable dtlike = zj123.Model.Article.GetLike(artid);//for (int likei = 0; likei < dtlike.Rows.Count; likei++)//{// sbneartitle.AppendFormat("<li><a href=\"{0}\">{1}</a></li>", Convert.ToString(dtlike.Rows[likei]["HtmlPath"]),Convert.ToString(dtlike.Rows[likei]["Title"]));//}//sbneartitle.Append("</ol></div>");//waitemp = waitemp.Replace("$LikeTitle$", sbneartitle.ToString());//sbneartitle.Remove(0, sbneartitle.ToString().Length);///////////////////////////////////////////////////////////////////////////////////// ////////#endregion//替换链表信息//$typejs$templatewai = templatewai.Replace("$typejs$", classid);//$numjs$templatewai = templatewai.Replace("$numjs$", "10");//$setjs$templatewai = templatewai.Replace("$setjs$", "");string tempzong = templatewai.Replace("$intemplate$", sbneilist.ToString()); string indexshow = (i + 1).ToString() == "1" ? ("") : ((i + 1).ToString());。