第11章新闻发布系统(CMS)一个可动态管理内容的网站其基础核心就是新闻发布系统即ContentManageSystem简称CMS。网站各类内容的新增发布和编辑等操作无不依赖于新闻发布系统来实现。新闻发布系统实现了对网站内容的有效化和合理化管理。因此,新闻发布系统是一个成型的网站不可或缺的组成部分。借助Dreamweaver的强大功能,设计一个新闻发布系统并不是件难事。11.1新闻信息库的设计一个典型的新闻发布系统的数据库重点是其逻辑结构。在建模过程中,应尽量减少冗余数据,提高系统的可维护性。下面就具体来介绍整个新闻发布数据库(Access数据库)的设计流程。(1)单击【开始】|【程序】|【MicrosoftOffice】|【MicrosoftOfficeAccess2003】命令,打开【MicrosoftAccess】窗口。(2)单击【新建文件】|【空数据库】命令,弹出【文件新建数据库】对话框。可以根据实际情况,保存到相应位置。并在【文件名】文本框中输入数据库文件名,例如“news.mdb”,如图11.1所示。图11.1【文件新建数据库】对话框(3)单击【创建】按钮,弹出【news:数据库(Access2000文件格式)】窗口,如图11.2所示。·256·图11.2【news:数据库(Access2000文件格式)】窗口(4)单击【使用设计器创建表】按钮,弹出【表1:表】设计窗口。单击【文件】|【保存】命令,把表进行重新命名,例如“tb_news”。(5)在【tb_news:表】设计窗口中按照表11.1所示定义所有字段信息。表11.1【tb_news:表】所有字段信息字段名称数据类型说明id自动编号新闻编号Title文本新闻标题Content备注新闻内容dt日期/时间注册日期(6)选择“dt”字段,在【默认值】文本框中输入“now()”。目的是把当前时间做为记录新增时,“dt”字段的默认值,如图11.3所示。(7)右击“id”字段,选择【主键】命令,为表设置主键,如图11.4所示。图11.3“dt”字段的默认值设置图11.4为表设置主键(8)单击窗口右上角的【关闭】按钮,系统会提示保存所做的修改。返回到【news:数据库(Access2000文件格式)】窗口,会发现所设计的表“tb_news”已经存在于当中,如图11.5所示。·257·图11.5【news:数据库(Access2000文件格式)】窗口(9)在实际操作中,可以双击打开“tb_news”表记录管理窗口。在这个窗口中,可以选择录入、编辑或者删除一些记录信息,如图11.6所示。图11.6“tb_news”表记录管理窗口(10)打开Dreamweaver的设计界面。单击【文件】|【新建】命令,新建一个标准ASP文件。(11)单击【窗口】|【数据库】命令,弹出【应用程序】面板,如图11.7所示。(12)单击【+】|【自定义连接字符串】命令,弹出【自定义连接字符串】对话框。在【连接名称】文本框中输入“conn”。在【连接字符串】文本框中输入“Driver={MicrosoftAccessDriver(*.mdb)};DBQ=i:\site\data\news.mdb”。选中【Dreamweaver应连接】选项组下的【使用此计算机的驱动程序】选项,如图11.8所示。图11.7【应用程序】面板图11.8【自定义连接字符串】对话框(13)单击【测试】按钮,如果连接创建成功,将弹出如图11.9所示的对话框。图11.9连接创建成功提示·258·(14)单击【确定】按钮,关闭【自定义连接字符串】对话框。返回【应用程序】面板,向导将自动在其下拉列表中添加一条【conn】的列表选项,如图11.10所示。(15)单击【窗口】|【文件】命令,弹出【文件】面板。将看到在站点目录下会自动创建一个名为“Connections”的文件夹。在其下将会新增一个名为“conn.asp”的文件,如图11.11所示。图11.10【应用程序】面板图11.11【文件】列表面板11.2新闻分页列表的实现新闻分页列表页面以分页的形式显示每个新闻信息。这样的形式,方便访问者获取信息。本节讲解如何构建一个新闻分页列表页面。11.2.1新闻分页列表页面设计新闻分页列表页面查询所有的新闻信息,并按照分页,显示当前分页的新闻信息。该页面设计过程如下所示。(1)打开Dreamweaver的设计界面。单击【文件】|【新建】命令,新建一个名为“list.asp”的标准ASP文件。(2)单击Dreamweaver【插入】工具栏中【常用】|【表格】命令。在弹出的【表格】对话框中进行相应设置,在【文档】窗口中插入了一些表格用于定位。(3)根据实际情况,可以对特定的单元格进行宽度和背景图片的指定,来修饰表格的外观。在此基础上,再对单元格行适当的排版,录入相应的文字信息具体效果如图11.12所示。·259·图11.12新闻发布系统分页列表页面排版(4)单击【窗口】|【绑定】命令,弹出【应用程序】面板,如图11.13所示。(5)单击【+】|【记录集(查询)】命令,弹出【记录集】对话框。在【名称】文本框中输入“rs”。在【连接】下拉列表中选择【conn】选项。【表格】下拉列表中选择【tb_news】选项。然后单击在其右侧的【select】按钮。Dreamweave自动将会在【SQL】文本框中输入“SELECT*FROMtb_news”,如图11.14所示。图11.13【绑定】命令图11.14【记录集】对话框(6)单击【测试】按钮,如果记录集创建成功,将弹出如图11.15所示的对话框。(7)单击【确定】按钮,关闭【记录集】对话框。返回【应用程序】面板,向导将自动在其下拉列表中添加一条【rs】的列表选项,如图11.16所示。·260·图11.15记录集创建测试图11.16【应用程序】面板(8)在显示“标题”所对应的表格单元格中单击鼠标。在【应用程序】面板中选中【记录集(rs)】|【title】选项。单击【插入】按钮,把“title”字段插入到单元格中。用上述同样的的方法,在“时间”所对应的单元格中插入记录集字段,如图11.17所示。图11.17插入所有记录集字段(9)选中“修改”文字,在【属性】检查器中【链接】文本框中输入“edit.asp?id=%=(rs.Fields.Item(id).Value)%”,如图11.18所示。图11.18【属性】检查器(10)用上述同样的的方法,选中“删除”文字,在【属性】检查器中【链接】文本框中输入“del.asp?id=%=(rs.Fields.Item(id).Value)%”。选中“发布”按钮,在【属性】检查器中【链接】文本框中输入“add.asp”。(11)单击【窗口】|【服务器行为】命令,弹出【应用程序】面板,如图11.19所示。(12)直接通过鼠标或者借助【标签选择器】选中表格内用于显示数据的所有单元格,如图9.20所示。·261·(13)单击【+】|【重复区域】命令,弹出【重复区域】对话框。在【记录集】下拉列表中选择【rs】选项。在【显示】选项组文本框中输入“2”,如图11.21所示。图11.19【应用程序】面板图11.20【标签选择器】图11.21【重复区域】对话框(14)单击【确定】按钮,关闭对话框。启动InternetExplorer,在地址栏中输入“”。将会看到如图11.22所示的效果。图11.22查看(15)把鼠标定位到用于放置分页信息的区域。单击【插入】|【应用程序对象】|【显示记录记数】|【记录集导航状态】命令,弹出【RecordsetNavigationStates】对话框。在【Recordset】下拉列表中选择【rs】选项,如图11.23所示。图11.23【RecordsetNavigationStates】对话框(16)单击【确定】按钮,关闭对话框。Dreamweave将在文档窗口中自动插入一排用于记录统计的信息,如图11.24所示。·262·图11.24插入记录集导航状态(17)把鼠标定位到用于放置分页控制的按钮区域。单击【插入】|【应用程序对象】|【记录集分页】|【记录集导航条】命令,弹出【记录集导航条】对话框。在【记录集】下拉列表中选择【rs】选项。在【显示方式】选项组中选中【文本】选项,如图11.25所示。图11.25【记录集导航条】对话框(18)单击【确定】按钮,关闭对话框。Dreamweave将在文档窗口中自动插入一排用于翻页控制的导航条,如图11.26所示。图11.26插入记录集导航条11.2.2测试分页显示功能启动InternetExplorer,在地址栏中输入“”。将会看到如图11.27所示的效果。·263·图11.27查看“”11.2.3生成代码分析——新闻分页列表页面(list.asp)新闻分页列表页面(list.asp),完整代码如下:%@LANGUAGE=VBSCRIPTCODEPAGE=936%!--#includefile=Connections/conn.asp--%Dimrs'定义记录集变量Dimrs_numRows'定义记录当前记录位置的变量Setrs=Server.CreateObject(ADODB.Recordset)'建立记录集对象rs.ActiveConnection=MM_conn_STRING'指定数据库链接字符串rs.Source=SELECT*FROMtb_newsrs.CursorType=0rs.CursorLocation=2rs.LockType=1rs.Open()'获取记录rs_numRows=0%%DimRepeat1__numRows'定义显示记录的总数目变量DimRepeat1__index'定义显示记录的数目变量Repeat1__numRows=2Repeat1__index=0rs_numRows=rs_numRows+Repeat1__numRows%%'***RecordsetStats,MoveToRecord,andGoToRecord:declarestatsvariablesDimrs_total'定义记录总数变量Dimrs_first'定义初始行变量Dimrs_last'定义结束行变量'settherecordcountrs_total=rs.RecordCount'获取记录集总数'setthenumberofrowsdisplayedonthispageIf(rs_numRows0)Thenrs_numRows=rs_totalElseif(rs_numRows=0)Then·264·rs_numRows=1EndIf'setthefirstandlastdisplayedrecordrs_first=1'设置开始行为1rs_last=rs_first+rs_numRows-1'计算结束行'ifwehavethecorrectrecordcount,checktheotherstatsIf(rs_total-1)Then'如果记录集总数正确If(rs_firstrs_total)Thenrs_first=rs_totalEndIfIf(rs_lastrs_total)Then'如果结束行数大约记录总数rs_last=rs_totalEndIfIf(rs_numRowsrs_total)Then'如果当前记录行数大于记录总数rs_numRows=rs_totalEndIfEndIf%%'***RecordsetStats:ifwedon'tknowtherecordcount,manuallycountthemIf(rs_total=-1)Then'如果获取的记录总数为-1'countthetotalrecordsbyiterating