绝对原创,欢迎转载。但请务必保留以上文字。
静态页面导出实例分析:
下面讨论如何使用静态页面导出技术来实现我们在前面要求的各种功能。
首先,我们来看看要导出的页面文件的结构:
所有导出的页面都将被放在一个目录名为当日期的目录下。其中有两个非导出文件index.htm和show.htm文件。其作用同cbbinput目录中的default.htm和show.htm文件相类似。都是为了满足使页面能够正常显示的需要。之所以使用index.htm而不用default.htm为文件名,是因为大多数ISP提供的主页空间的目录省缺文件的名字都是index.htm。
当日的各个版面则导出为一个名为list.htm的文件。每个版面的文章题目列表则分别按顺序导出为1~n(n为当日的版面总数)个页面文件。其文件名也为1.htm~n.htm。当日所刊载的各个文章则以其id为文件名分别进行导出。在list.htm文件中,包含到各个版面页面文件的超链接。在各个版面的页面文件中,又包含到各个文章页面文件的超连接。
在出版报的主页上,还应该有一个用来显示日期的页面文件。每个日期的超链接都将与其页面文件所在的目录中的index.htm文件相对应。点击日期后,将弹出一个新的浏览器窗口。其中显示的是相应日期的报纸内容。
此外,还应当将此日各篇文章的配图文件也拷贝到此目录之下。
我们为此建立一个任务,它会在每天下午的六点执行,将当天报纸的内容导出为静态的HTML页面文件。此任务的代码如下(可以在本书配套光盘的SQLServer目录的子目录test下找到此段代码的文件,其文件名为webout.sql。它使用的模板文件也可以在此目录下找到):
use test
go
declare
@riqi varchar(20),
@filepath varchar(255),
@listfile varchar(255),
@command varchar(255)
set @riqi=left(convert(varchar(40),getdate(),20),10)
set @filepath='d:\webout\'+@riqi+'\'
set @command='md '+@filepath
execute master.dbo.Xp_cmdshell @command
set @command='md '+@filepath+'images'
execute master.dbo.Xp_cmdshell @command
set @command ='copy d:\test\files\*.* d:\webout\'+@riqi+'\'
execute master.dbo.Xp_cmdshell @command
set @command ='copy d:\test\files\images\*.* d:\webout\'+@riqi+'\images\'
execute master.dbo.Xp_cmdshell @command
set @command ='copy d:\test\'+@riqi+'\*.* d:\webout\'+@riqi+'\'
execute master.dbo.Xp_cmdshell @command
set @listfile=@filepath+'list.htm'
execute sp_makewebtask
@outputfile=@listfile,
@query='select distinct banmian
from gaojian
where kanwu=''出版报'' and datepart(yy,riqi)=datepart(yy,getdate()) and datepart(dy,riqi)=datepart(dy,getdate())',
@templatefile='d:\test\list.tml',
@codepage=936
declare
@lists int,
@banmian varchar(64),
@filename varchar(64),
@search varchar(2000)
set @lists=0
declare point cursor for
select distinct banmian
from gaojian
where kanwu='出版报' and datepart(yy,riqi)=datepart(yy,getdate()) and datepart(dy,riqi)=datepart(dy,getdate())
for read only
open point
fetch point into
@banmian
while (@@fetch_status=0)
begin
set @lists=@lists+1
set @filename=@filepath+convert(varchar(64),@lists)+'.htm'
set @search='SELECT id,timu,laiyuan
FROM gaojian
WHERE datepart(yy,riqi)=datepart(yy,convert(datetime,'''+@riqi+'''))
and datepart(dy,riqi)=datepart(dy,convert(datetime,'''+@riqi+'''))'+
'and banmian ='''+@banmian+'''and kanwu=''出版报''order by timu'
execute sp_makewebtask
@outputfile=@filename,
@query=@search,
@templatefile='d:\test\list2.tml',
@codepage=936
fetch point into
@banmian
end
close point
deallocate point
declare @gaojianid int
declare point2 cursor for
select gaojian.id
from gaojian
where kanwu='出版报' and datepart(yy,riqi)=datepart(yy,getdate()) and
datepart(dy,riqi)=datepart(dy,getdate())
for read only
open point2
fetch point2 into
@gaojianid
while (@@fetch_status=0)
begin
set @filename=@filepath+convert(varchar(64),@gaojianid)+'.htm'
set @search='SELECT timu,laiyuan,neirong,left(pics,10)+ STUFF(pics,1,21,''''),yuanwen
FROM gaojian
WHERE id='+convert(varchar(64),@gaojianid)
execute sp_makewebtask
@outputfile=@filename,
@query=@search,
@templatefile='d:\test\outfile.tml',
@codepage=936
fetch point2 into
@gaojianid
end
close point2
deallocate point2
declare
@dy int,
@date varchar(20),
@yue varchar(2),
@yue2 varchar(2),
@ri int,
@xingqi int,
@year int,
@outchar varchar(1600),
@tt int
create table ##daylist
(out varchar(1600))
set @yue2='00'
set @tt=0
declare point3 cursor for
SELECT distinct
dy=datepart(dy,riqi),date=left(convert(varchar(40),riqi,20),10),
yue=convert(varchar(2),datepart(mm,riqi)),ri=datepart(dd,riqi),xingqi=datepart(dw,riqi),year=datepart(yy,riqi)
FROM gaojian
where kanwu = '出版报'
order by year,dy
for read only
open point3
fetch point3 into
@dy,@date,@yue,@ri,@xingqi,@year
while (@@fetch_status=0)
begin
if @yue<>@yue2
begin
set @tt=0
if @yue2=0
insert into ##daylist
values('<TABLE BORDER="BORDER" ALIGN="CENTER"><th><tr><h2>'+convert(varchar(4),@year)+
'年'+@yue+'月份</h2></tr></th><tr><td>星期日</td><td>星期一</td><td>星期二</td><td>星期三</td><td>星期四</td><td>星期五</td><td>星期六</td></tr>')
else
insert into ##daylist
values('</tr></table><TABLE BORDER="BORDER" ALIGN="CENTER"><th><tr><h2>'+
convert(varchar(4),@year)+'年'+@yue+'月份</h2></tr></th><tr><td>星期日</td><td>星期一</td><td>星期二</td><td>星期三</td><td>星期四</td><td>星期五</td><td>星期六</td></tr>')
end
if @tt<>0
if @xingqi < 7
set @outchar=@outchar+'<td><a href="'+@date+'/index.htm" TARGET="new">'+convert(varchar(2), @ri)+'</a></td>'
else
set @outchar=@outchar+'<td><a href="'+@date+'/index.htm" TARGET="new">'+convert(varchar(2), @ri)+'</a></td></tr><tr>'
else
begin
set @tt=1
set @outchar=
case
when @xingqi=1 then ''
when @xingqi=2 then '<td></td>'
when @xingqi=3 then '<td></td><td></td>'
&nbs