大体思路就是:在你的后台,做一html页面生成器.点击时.循环web目录下的aspx文件(这一点应该不难实现).将他们全部生成html.这就是阻碍大家的路障.下面简单介绍一个demo
当然也可以做的跟cms一样,后台可视化管理模板页.其原理只不过把模板html读到编辑器里.然后定义一些标签来读取数据.(本人做了一个bayyter.game的cms就是用的这种方法,每个游戏专题只需要美工写页面,插入标签就OK.个人感觉速度还很快.这个站放在国外.所以要上vpn)
1方法一:根据模板生成,保持在html文件夹中
2 思路分析:
3 1.写一个自定义的HTM模板 其中需要替换的地方用$value$这样
4 包含起来
5 2.生成页面的ASPX中,用StreamReader读取HTM模板,用REPLACE
6 替换$value$
7 3.把完成的字符串用StreamWriter输出
8 参考代码如下:
9 1)定义模板emplate.htm
10 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
11 <html xmlns="http://www.w3.org/1999/xhtml" >
12 <head>
13 <title> $title$ 生成静态页的Demo|-51aspx.com</title>
14 <style type="text/css">
15 <!--
16 .STYLE1 {
17 font-size: 16px;
18 font-weight: bold;
19 }
20 -->
21 </style>
22 </head>
23 <body>
24 <br />
25 <br />
26 <table width="100%" border="0" bgcolor="#339900">
27 <tr>
28 <td height="34" align="center" bgcolor="#FFFFFF"><span class="STYLE1">$title$ </span></td>
29 </tr>
30 <tr>
31 <td height="42" bgcolor="#FFFFFF"><br />
32 <br />
33 内容:$content$ </td>
34 </tr>
35 </table>
36 <a href="#" target="_blank">版权所有</a>
37 </body>
38 </html>
39 2)在Default.aspx页面的按扭的事件处理中写如下代码:
40 //源码是替换掉模板中的特征字符
41 string mbPath = Server.MapPath("template.htm");
42 Encoding code = Encoding.GetEncoding("gb2312");
43 StreamReader sr = null;
44 StreamWriter sw = null;
45 string str = null;
46 //读取
47 try
48 {
49 sr = new StreamReader(mbPath, code);
50 str = sr.ReadToEnd();
51 }
52 catch (Exception ex)
53 {
54 throw ex;
55 }
56 finally
57 {
58 sr.Close();
59 }
60 //根据时间自动重命名,扩展名也可以自行修改
61 string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + ".htm";
62 str = str.Replace("$title{1}quot;, txtTitle.Text);//替换Title
63 str = str.Replace("$content{1}quot;, txtContent.Text);//替换content
64 //生成静态文件
65 try
66 {
67 sw = new StreamWriter(Server.MapPath("htm/") + fileName, false, code);
68 sw.Write(str);
69 sw.Flush();
70 }
71 catch (Exception ex)
72 {
73 throw ex;
74 }
75 finally
76 {
77 sw.Close();
78 Response.Write("恭喜<a href=htm/" + fileName + " target=_blank>" + fileName + "</a>已经生成,保存在htm文件夹下!");
79 }
80
81
82 方法二:根据Url地址生成静态页保持
83 思路分析:
84 直接将做好的动态页面翻译成静态页面,所以生成的内容不够灵活
85 参考代码:
86 //根据Url地址生成静态页保持
87 protected void Button2_Click(object sender, EventArgs e)
88 {
89 Encoding code = Encoding.GetEncoding("utf-8");
90 StreamReader sr = null;
91 StreamWriter sw = null;
92 string str = null;
93 //读取远程路径
94 WebRequest temp = WebRequest.Create(txtUrl.Text.Trim());
95 WebResponse myTemp = temp.GetResponse();
96 sr = new StreamReader(myTemp.GetResponseStream(), code);
97 //读取
98 try
99 {
100 sr = new StreamReader(myTemp.GetResponseStream(), code);
101 str = sr.ReadToEnd();
102 }
103 catch (Exception ex)
104 {
105 throw ex;
106 }
107 finally
108 {
109 sr.Close();
110 }
111 string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + ".htm";
112 //写入
113 try
114 {
115 sw = new StreamWriter(Server.MapPath("htm/") + fileName, false, code);
116 sw.Write(str);
117 sw.Flush();
118 }
119 catch (Exception ex)
120 {
121 throw ex;
122 }
123 finally
124 {
125 sw.Close();
126 Response.Write("恭喜<a href=htm/" + fileName + " target=_blank>" + fileName + "</a>已经生成,保存在htm文件夹下!");
127 }
128 }