首页 随笔 乐走天涯 程序资料 评论中心 Tag 论坛 其他资源 搜索 消息中心 联系我 关于 RSS

新闻动态更新程序设计计划


日期: 2002-03-07 14:00 | 联系我 | 关注我: SteemIT, Twitter, Google+

  一、设计目的

  如果网站做大了,每天都需要添加许多新闻。那么如果把新闻添加到页面,然后再把页面整个的传递到服务器上,可能会在修改的过程中把页面做坏了,维护的效率也大打折扣。比如说在网上发现一条新闻,想马上发布出去,这样就没有必要小心翼翼的打开页面,改完了,再传上去。当页面中写了很多程序,这一点显得尤其重要。如果采用新闻的动态生成,那么就会完全避免以上失误。在网上把新闻连接到别的网站很正常。

  二、设计原理

  建立一个新闻数据库,把新闻的标题,内容,链接,新闻序号,或者更新时间也写入就行了。然后在打开主页面的时候,这个程序开始运作,读出所有的新闻,到页面上。如果需要添加新闻了,那么设计一个新闻维护页面。这个页面具有删除添加修改等功能,相当于一个小论坛的功能。新闻的页面也用 ASP 生成。这样就实现统一的新闻页面风格。也节省了空间,使页面管理得到极大的方便,提高工作效率。

  三、问题的关键

  设计一个比较方便安全的页面维护程序。比如说维护的人员肯定要使用口令。但是这个口令如果放入了 ASP 源程序中,那么就太不安全了。可能需要放入到数据库中。功能要够用,速度要够快才行。新闻可以根据发布的日期加上“ NEW ”的标记,提醒访问者,那是一个刚刚发布的新闻。这里可能要用到自动返回主页的功能。比如说有人利用 ASP ID=*** 的方式进入页面(一般没有这个可能),判断如果还没有记录此人的 ID 和 PASSWORD ,就强制返回主页。

  图文混排问题。图文新闻需要一个图片(如果是几个图片呢?),那么就要考虑到图文混排问题。这是一个很棘手的问题,目前能够实现这样生成广告页面的网站好象还不太多。

  四、其他问题

  关于预览问题的探讨:一般的网站发布完东西以后,都有预览功能。在输入的时候,没有必要所见及所得。这不仅在技术上不好实现,也大大的影响新闻发布的效率。用一个 TEXTAREA 来进行新闻输入,然后可以选择 [ 预览 ][ 提交 ][ 重写 ] 等功能。如果选择了预览则开一个新的窗口进行预览。我发现如卡秀等贺卡提供网站,他们的预览功能都不是很好。要么就是在同一个窗口打开,要么就是预览之后才可以选择提交或者返回修改等功能。这样很浪费用户的网时。

  关于新闻管理功能的扩充:在考虑如何给滕州日报投稿的时候,我发现新闻管理甚至需要做一个程序。但我同时也想到,在线新闻维护程序的新闻管理功能我原来想的不够全面。首先是栏目问题。新闻归属于哪一个栏目。新闻的主旨是什么。这些有助于知道当前的新闻侧重点在什么地方。

  五、进度估计

  如果不发生大规模战争的话,那么预计在两天之内完成。

  叶秋枫

2000-10-17 09:18 小楼一夜听秋雨

  

计划进行情况

  一、如果考虑到图文混排的话,那么就要考虑到图片的大小。然后才能决定图片会占几行几列。图像的宽度在载入的时候测试还是在输入数据库的时候输入?如果预先输入的话,对方如果改变了图片的大小,就会闹笑话。如果后来才读出来,会让速度慢一点。

  二、数据库的重新考虑。我们几乎没有现行的新闻管理程序可以考虑。也没有成熟的案例可以参考。王俊蛟先生的那个程序写的固然很棒,但是不是专门对于新闻的。他的设计思想无疑是最好的,整个事件的经过都体现着他思想的光芒。可是他不是为新闻定做的,界面也不是多么好。而我现在要建立一个新闻库了。上边初步讨论的建立新闻库需要新闻的标题,内容,链接,新闻序号,更新时间。下面具体讨论一下这些字段的必要性和还应该增删的字段。

   A 、新闻的标题可能不是新闻实际内容的标题。因为实际上新闻的标题比较麻烦。可能需要副标题和引导标题(待会我给它取个更酷的名字)。尽管现在网上这种新闻还不多,但面对《滕州日报》电子版,缺了这个功能就不好了。

   B 、标题的字型字号,应该说值得考虑。因为长的标题和短的标题不能一样。可是电子读物实在没有必要排成那些样子。所以暂且不考虑这些年。

   C 、更新日期。这个更新日期是我们发稿日期,这个日期的功能有两个。第一是可以让读者知道这个稿子是哪天写成的,第二可以。。。可以预发稿。比如说明天想请假或者下周要接别的任务,就可以用这个功能把将来要发布的“新闻”(将来要发布的“新闻”都写好了,有点象科幻小说)。我个人认为这个功能还是非常实用的。

   D 、如果存在链接,那么就直接链接,不再考虑输入的具体内容。

   E 、因为去掉了表格,困扰我多天的图片换行问题终于解决了。图片只要放好地方,可以自动实现绕排。但是我要给图片加一个新的功能,那就是 HINT 。

   F 、为了减轻服务器的负担,每个栏目的数据库都独立。下一步如果设立相关讨论的话,也将建立独立的论坛。因为本来就用的是 ACCESS 库,承受能力一般。

  模块的划分:

   1 、添加新闻模块:添加新闻算法和在留言簿添加留言的算法差不多。首先建立一个 ODBC 连接到数据库,然后给一个添加页面就可以了。

   2 、页面生成过程:

   A 、导语用于生成新闻列表。

   B 、存在直接连接。如果新闻有直接的连接的话,那么就直接读取这个连接。忽略其余的所有数据。这是最优先的一种情况。

   C 、这里存在着两种意见:是先生成 HTML 放在数据库中呢还是在用户浏览的时候才读出来生成页面呢?

  就容量考虑,前者要占用很大数据库的空间。就速度来看,如果在用户实际浏览的时候才生成页面,会影响速度。

  从技术的难度考虑,把页面生成了放在数据库中,然后再读出来变成页面。这样可能要判断该在那里换行,等等。一来二去的解析 HTML 文本,和生成 HTML 文本。。。也相差无几了。

  解析 HTML 文本,我会做个标志作为换行的标志。

  另外一个方案是生成页。这样可能一劳用逸。这样会让用户获得最快的浏览速度。但只是删除的时候一定要注意删除。否则的话,可能会造成很大的空间浪费。产生了垃圾页面。这样做成的页面也方便网友进行引用。有些事情可能我没有考虑完善。动态的生成新闻列表,到底用户开始点击的时候如何访问数据库?总不能做成一个提交吧。所以,做成页面是比较好的一个算法。无论是在用户浏览速度上还是空间占用上都比较经济。

  不能在用户浏览的时候才生成网页。不能把 HTML 放在数据库中。要在添加新闻的同时生成一个页面放在相应的目录下。这样达到最好的效果。这涉及到文件的写操作。这样和新闻连接就产生了一点冲突。新闻连接在这种情况下意义何在呢?生成新闻列表的时候,遇到连接的新闻,就只注上连接就可以了。

  我决定给新闻连接一个明确的定义:新闻连接就是新闻列表的连接。也就是说在生成新闻列表的时候,不再考虑那么多。直接读取导语,把导语连接到新闻连接就行了。而本程序保证这个连接是有效的。

   D 、生成页面。也就是说把我们的数据转成页面,做实际用途。第一个比较重要的问题就是,如何给众多的页面命名。要不要建立很多子目录来管理这些页面?首先,不能用汉字。网易用日期可能也是基于这个考虑吧。最初我是决定每个栏目的新闻都不一样的。我也没有想建立新闻组。所以定位成一个新闻库只为一个主页服务。其实别的页面引用一部分本页的新闻也是不现实的。除非手工更新。但既然写了这个程序,就没打算用手工再更新。所以把新闻都放在同一个目录下就可以了。这个程序做好以后可以放到主页上,这样不论有没有 FTP 都一样的更新主页了。

   3 、新闻的管理手段

  新闻管理主要包括新闻的删除,修改,等等。修改比较简单。调出来再存上就得了。这里包括两点,一个是原汁原味的修改,一个是和添加方式一样,傻瓜式的修改。这样做来做去越做越象论坛了。

   4 、页面生成详细设计:页面生成涉及到文件的操作。

  如果链接不为空的话,那么就认为已经存在连接了。不再生成页面。如果连接为空的话,那么就用当前的日期时间自动生成一个文件名。但这样就涉及到一件事情,那就是当这个文件被修改的时候,做一个标记,是在修改。然后当用户保存修改的时候,就把原有的页面文件已经链接字段的内容都删除。重新生成链接,生成页面。文件名的命名暂时采用日期时间。但我考虑以后使用用户的 ID 加上日期时间。这样就不会发生两个人同时获得一个文件名的现象了。用 IP 也行。但不如用用户名简单一点。

   5 、提交与预览的异同

  提交是真正的提交到数据库中。预览就不能到数据库中。这样很麻烦。所以我决定取消预览功能。提交之后生成一个页面,打开一个新的窗口,显示将来的页面的内容。同时原来的新闻添加页面返回到浏览页面上去。这个时候是修改、继续添加、删除就可以由用户决定了。

   6 、如何实现新闻记录的维护

  网易的主页在线维护在每条记录的后面都有几个操作功能项。那样比较简单。另外一个方案是在前面设定复选框,仅对打勾的记录进行操作。这两个方案我需要权衡一下。多重选择一个麻烦的地方是如果用户选中了多项的话,有些操作可能不好实现。首先说功能项包括:修改、删除。也就这两项,对于已经建立的新闻来说。因为不可能允许批量修改的,所以如果用户选择了很多新闻进行修改的话,那么就不太好了。

  这容易造成概念上的不统一。还需要解释什么时候允许修改,什么时候允许删除。所以不如采用第一种方案。第一种方案的缺点是速度可能不理想。但也应该能说得过去。。

   7 、记录的删除

  在记录被删除的时候,我们究竟要做些什么工作?我们要做的工作是首先根据页面的链接属性判断是否是本地文件。是本地文件的标志是路径的为 -..ww- 。如果此文件不是本地文件,那么程序就直接删除记录,不再进行文件查找。当用户点击了删除按钮后,那么就惊动了一个 DeleteNews.asp 程序。这个程序会调入负责把东西删除完毕。然后再返回浏览页面,把页面刷新一遍,就完成了删除的过程。

   8 、记录的修改

  记录的修改好象要把要修改的这个记录的东西调入编辑画面,编辑画面仍然采用添加画面。不同的是,它的调用的是一个 SaveNews.asp 程序。这个程序负责把用户重新提交过的东西放入数据库,达到修改的目的。修改以后,仍然也是回到浏览界面。我调用 SELECT 进行记录的定位,结果不成功。因为查询得到的 RDS 对象是不能进行再更新的。后来采用 update 直接进行更新,也不成功。只好采用从头到尾的搜索一遍,看到一个合法的记录就进行更新。这个办法虽然有点笨,但却是比较安全的一个方案。比如说,当你定位了之后,你不可能对它进行锁定。当你再进行更新的时候,用 update ,进行更新的时候,这个过程有点慢。可能这个内容会遭到另一个用户的修改。所以不如当找到它的时候,马上进行更新,这个可高效及时的把它锁定,

   9 、加上一把锁

  考虑到本程序使用的人并不多,所以只做了一把锁放上了。以后人多了再多做几把就是了。到现在这个程度,程序基本上已经完成了。

  比较高兴。

2000-10-25 12:38

  第二部分

  新闻的利用 到目前为止,我们基本上实现了在线维护新闻。但新闻的利用还没有解决。当网页开始调入的时候,程序开始打开数据库读入新闻,然后象显示新闻列表的时候一样把它们读出来,放置到新闻栏目中。

  但是最好是把目标空间设成页框,也就是说把新闻那一栏设成单独的页面。这样就会比较好一些。经过叶秋枫的稍稍试验,框架中是允许放置 ASP 的。有意思的是从框架页中打开这个功能里面, DW 竟然没有“ .asp ”这个选项。但毕竟拧不过 IE 。如果放进去了 IE 还是照样儿的显示出来。这样在实际上使用的时候,无论是用“ .asp ”即时生成列表还是每次提交都重新生成“ HTM ”备用,都比较方便。我认为还是生成“ HTM ”备用比较合适。这样在用户看来,是一个早已存在的页面。感觉不到速度的慢。因为在生成新闻页面的时候已经解决了生成页面的问题,所以可以说技术上已经比较成熟。

  原来我计划在提交的时候或者修改完毕提交的时候就开始生成新闻列表页面,但我在实际实践中发现这个方案不合理。频繁的修改,创建和删除,则需要反复的生成,生成,生成。这样会使效率大打折扣。而新闻主控页面正好功能也有点少,正好添加一个“生成新闻列表”的功能。每次维护的时候务必把这一项完成。否则的话,你的更新网友会看不到。

  要不要添加一个退出的功能?一般来说,用户是不喜欢从退出的地方退出的。因为这样速度太慢,不如点击一下关闭按钮关闭。之所以有这个想法,是觉着添加一个退出功能可以在用户退出的时候检测一下用户是否已经重新生成页面。如果没有重新生成则开始给予提示,或者默默的给完成这件事。

  既然决定这个功能项的添加了。那么下一步就开始具体的讨论一下如何生成这个页面。应该说把新闻列表“ lookfornews.asp ”生成的新列表不再本页显示,而是存放到一个“ HTM ”中。这样就行了。“ lookfornews.asp ”的“ lookfornews ”是检索所有的新闻。所以简直是天造地设的。:)

  结束语:

  这个程序的功能比较简单。但目前够用,将来也好扩展。

  天下无狗。

  叶秋枫

2000-10-26 9:25


 文章评论
目前没有任何评论.

↓ 快抢占第1楼,发表你的评论和意见 ↓

发表你的评论
如果你想针对此文发表评论, 请填写下列表单:
姓名: * 必填 (Twitter 用户可输入以 @ 开头的用户名, Steemit 用户可输入 @@ 开头的用户名)
E-mail: 可选 (不会被公开。如果我回复了你的评论,你将会收到邮件通知)
网站 / Blog: 可选
反垃圾广告: 为了防止广告机器人自动发贴, 请计算下列表达式的值:
5 x 5 + 1 = * 必填
评论内容:
* 必填
你可以使用下列标签修饰文字:
[b] 文字 [/b]: 加粗文字
[quote] 文字 [/quote]: 引用文字

 
首页 随笔 乐走天涯 猎户星 Google Earth 程序资料 程序生活 评论 Tag 论坛 资源 搜索 联系 关于 隐私声明 版权声明 订阅邮件

程序员小辉 建站于 1997 ◇ 做一名最好的开发者是我不变的理想。
Copyright © XiaoHui.com; 保留所有权利。