关于HTML静态页面(含自动分页)生成的可行性方案

首先基础的命名空间别忘记,下面是所要用到的几个命名空间
c# 代码
 
  1. using  System.IO;   
  2. using System.Text;   
  3. using System.Net;  
接下来要设定附件上传的位置设定了
c# 代码
 
  1. //文章默认存放的绝对路径   
  2.      private string FilePageDir = System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["NewsFiles"]);   
下面是生成文件的主体了,主要是生成时候的内容以及分割几块
c# 代码
 
  1. #region 生成批量新闻数据   
  2.        /// <summary>   
  3.        /// 生成批量新闻数据   
  4.        /// </summary>   
  5.        /// <param name="getData"></param>   
  6.        public void FilePageForCreate(Hashtable getData)   
  7.        {   
  8.            string strDate = getData["pStrDate"].ToString();//目录   
  9.            string strFileName = getData["pStaticPageName"].ToString();//目录及文件名   
  10.            string strTitle = getData["pTitle"].ToString();//标题   
  11.            string strContent = getData["pContent"].ToString();//内容   
  12.            string strNewsSortID = getData["pNewsSortID"].ToString();//分类ID   
  13.            string strCreateTime = getData["pCreateTime"].ToString();//创建时间   
  14.            string strCreateUserName = getData["pCreateUserName"].ToString();//发布人   
  15.            string strNewsFrom = getData["pNewsFrom"].ToString();//来源   
  16.            string strLink = getData["pLink"].ToString();//链接   
  17.            string strCreateUserID = getData["pCreateUserID"].ToString();//创建人ID   
  18.            string strAssistantTitle = getData["pAssistantTitle"].ToString();//副标题   
  19.            string strHit = getData["pHit"].ToString();//点击数量   
  20.            string strKeyword = getData["pKeyword"].ToString();//关键字   
  21.            string strNewsID = getData["pNewsID"].ToString();//新闻ID   
  22.            string strHtmlHeader = getData["pHtmlHeader"].ToString();//表头   
  23.            string strNewsSortName = getData["pNewsSortName"].ToString();//分类名   
  24.   
  25.   
  26.            strContent = strContent.Replace("$$分页$$""|");   
  27.            string[] content = strContent.Split(new Char[] { | });//对内容进行拆分,并保存到数组   
  28.            int upbound = content.Length;//数组的上限   
  29.   
  30.            ///////////////////////////创建当前日期的文件夹开始   
  31.            string dir = FilePageDir + DateTime.Now.ToString("yyMMdd");//用来生成文件夹   
  32.            if (!Directory.Exists(dir))   
  33.            {   
  34.                Directory.CreateDirectory(dir);   
  35.            }   
  36.            /**/  
  37.            ///////////////////////////创建当前日期的文件夹结束   
  38.            try  
  39.            {   
  40.                for (int i = 0; i < content.Length; i++)   
  41.                {   
  42.                    //string[] newContent = new string[4];//定义和html标记数目一致的数组   
  43.   
  44.                    StringBuilder strhtml = GetFileCode(FilePageDir + "\\NewsDetailTemplate.html");//读取模板   
  45.   
  46.   
  47.   
  48.                    //为标记数组赋值   
  49.                    string strTable = "<table><tr><td  style=\"font-size:12px\">$upUrl</td><td style=\"font-size:14px\">$Number</td><td style=\"font-size:12px\">$downUrl</td></tr></table>";//上下页表格,注意此处的$upUrl(上一页),$Number(页码分页),$downUrl(下一页)   
  50.                    //这三个是用来替换的。   
  51.   
  52.                    string filePath = "";   
  53.   
  54.   
  55.   
  56.   
  57.                    strhtml = strhtml.Replace("$NewsSortName", strNewsSortName);   
  58.                    strhtml = strhtml.Replace("$HtmlHeader", strHtmlHeader);   
  59.                    strhtml = strhtml.Replace("$NewsSortID", strNewsSortID);   
  60.                    strhtml = strhtml.Replace("$CreateUserName", strCreateUserName);   
  61.                    strhtml = strhtml.Replace("$NewsFrom", strNewsFrom);   
  62.                    strhtml = strhtml.Replace("$Link", strLink);   
  63.                    strhtml = strhtml.Replace("$CreateUserID", strCreateUserID);   
  64.                    strhtml = strhtml.Replace("$AssistantTitle", strAssistantTitle);   
  65.                    strhtml = strhtml.Replace("$Hit", strHit);   
  66.                    strhtml = strhtml.Replace("$Keyword", strKeyword);   
  67.                    strhtml = strhtml.Replace("$Title", strTitle);   
  68.                    strhtml = strhtml.Replace("$NewsId", strNewsID);   
  69.                    strhtml = strhtml.Replace("$CreateTime", DateTime.Now.ToString("yyyy/MM/dd"));   
  70.                    strhtml = strhtml.Replace("$Content", content[i]);   
  71.                    string strNumber = "";//数字分页1,2,3……   
  72.                    for (int m = 1; m <= upbound; m++)   
  73.                    {   
  74.                        if (m == 1)//如果是第一页就显示成这个样子:20070524.html而不是20070524_1.html   
  75.                            strNumber = strNumber + " [" + "<a href=" + "../" + strDate + ".html" + ">" + m + "</a>" + "] ";   
  76.                        else  
  77.                        {   
  78.                            int n = m - 1;//第三页的连接应该是20070524_2.html,以此类推   
  79.                            strNumber = strNumber + " [" + "<a href=" + "../" + strDate + "_" + n + ".html" + ">" + m + "</a>" + "] ";   
  80.                        }   
  81.                    }   
  82.                    if (upbound == 0)//如果没有分页,就直接按日期时间保存   
  83.                    {   
  84.                        filePath = FilePageDir + "//" + strDate + ".html";   
  85.                        strhtml = strhtml.Replace("$Pager""");   
  86.                    }   
  87.                    else//否则按20070524.html、20070524_1.html 这种效果保存   
  88.                    {   
  89.                        strNumber = strNumber.Replace(">" + (i + 1) + "<""><u><b>" + (i + 1) + "</b></u><");   
  90.   
  91.                        if (i == 0)   
  92.                            filePath = FilePageDir + "//" + strDate + ".html";   
  93.                        else  
  94.                            filePath = FilePageDir + "//" + strDate + "_" + i + ".html";   
  95.   
  96.                        if (i == 0)//第一页不显示上一页   
  97.                            strTable = strTable.Replace("$upUrl""");   
  98.   
  99.                        if (i <= 1)//上一页分页   
  100.                            strTable = strTable.Replace("$upUrl""<a href=" + "../" + strDate + ".html" + ">上一页</a>");   
  101.                        else  
  102.                        {   
  103.                            int p = i - 1;   
  104.                            strTable = strTable.Replace("$upUrl""<a href=" + "../" + strDate + "_" + p + ".html" + ">上一页</a>");   
  105.                        }   
  106.   
  107.                        if (upbound == 1)//如果只有一页,则不显示页码   
  108.                            //strNumber="";   
  109.                            strTable = strTable.Replace("$Number""");   
  110.                        else  
  111.                            strTable = strTable.Replace("$Number", strNumber);//页码替换   
  112.                        /**/  
  113.                        ////////////////////////   
  114.                        if (i == upbound - 1)//最后一页不显示下一页   
  115.                            strTable = strTable.Replace("$downUrl""");   
  116.   
  117.                        if (i != upbound - 1)//下一页分页   
  118.                        {   
  119.                            int q = i + 1;   
  120.                            strTable = strTable.Replace("$downUrl""<a href=" + "../" + strDate + "_" + q + ".html" + ">下一页</a>");   
  121.                        }   
  122.                        else  
  123.                        {   
  124.                            int j = upbound - 1;   
  125.                            strTable = strTable.Replace("$downUrl""<a href=" + "../" + strDate + "_" + j + ".html" + ">下一页</a>");   
  126.                        }   
  127.   
  128.                        strhtml = strhtml.Replace("$Pager", strTable);   
  129.                    }   
  130.   
  131.   
  132.                     RunFilesBuild(strhtml,filePath);//生成页面   
  133.   
  134.                }   
  135.            }   
  136.            catch (Exception ex)   
  137.            {   
  138.                //输出异常信息   
  139.                // Response.Write(err.ToString());   
  140.                ITNB.Base.Error.showError(ex.Message.ToString());   
  141.            }   
  142.   
  143.        }  
  144.        #endregion  

最后当然是文件输出的方法了,这个相对来说比较的简单点了,大陆通用的方法

c# 代码
 
  1. #region 生成文件   
  2.        /// <summary>   
  3.        /// 生成文件   
  4.        /// </summary>   
  5.        /// <param name="strhtml">数据内容</param>   
  6.        /// <param name="filePath">路径</param>   
  7.        public void RunFilesBuild(StringBuilder strhtml, string filePath)   
  8.        {   
  9.            //创建文件信息对象--------------------------------------------   
  10.            FileInfo finfo = new FileInfo(filePath);   
  11.            //以打开或者写入的形式创建文件流   
  12.            using (FileStream fs = finfo.OpenWrite())   
  13.            {   
  14.                //根据上面创建的文件流创建写数据流   
  15.                StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);   
  16.                //把新的内容写到创建的HTML页面中   
  17.                sw.WriteLine(strhtml);   
  18.                sw.Flush();   
  19.                sw.Close();   
  20.            }   
  21.   
  22.        }  
  23.       
  24.        #endregion  

一点建议:
生成文件最好是SHTML的,当然这个前提是要服务器允许且支持SSI,至于如何做网上有很多的教程的,自己去搜索一下吧,来说说好处吧:
shtml和asp 有一些相似,以shtml命名的文件里,使用了ssi的一些指令,就像asp中的指令,你可以在SHTML文件中写入SSI指令,当客户端访问这些shtml文件时,服务器端会把这些SHTML文件进行读取和解释,把SHTML文件中包含的SSI指令解释出来
换句话说:就是可以使用一些类似ASP的特性的功能,例如文件包含,文件调用等!

目前,主要有以下几种用用途:

1、显示服务器端环境变量<#echo>

2、将文本内容直接插入到文档中<#include>

3、显示WEB文档相关信息<#flastmod #fsize> (如文件制作日期/大小等)

4、直接执行服务器上的各种程序<#exec>(如CGI或其他可执行程序)

5、设置SSI信息显示格式<#config>(如文件制作日期/大小显示方式) 高级SSI<XSSI>可设置变量使用if条件语句。 

例子:<!--#include file="info.htm"--> 

具体如何做,关于这方面的资料网上随便搜罗都一堆,就不详细说明了!

posted @ 2008-06-09 17:14  大牛博客  阅读(1221)  评论(0编辑  收藏  举报