您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > 无限分类在新闻系统中的应用研究
无限分类在新闻系统中的应用研究董瑞志1,陈震21.常熟理工学院软件工程系,江苏苏州(215500);2.吉林大学计算机科学与技术学院,吉林长春(130012)E-mail:hello_u@eyou.com摘要:为了响应用户的系统功能类目变更请求、降低产品后期维护成本,我们在新闻系统OpenNews开发中借鉴、引入了无限分类思想,并采用递归算法实现了无限分类的组件化,并达到了很好的系统预期。关键词:PHP;组件;模块化;JavaScript中图分类号:TP301文献标识码:A1.引言功能分解和模块化是新闻系统工程化、产品化的研发的关键,而充分理解用户需求则是功能分解和模块化的前提[1]。软件工程的经验告诉我们,用户的需求以及他们对目标系统的认识是一个渐进的过程[2],这也使得作为功能分解结果的(系统)类目经常处于变动之中。为了适应这种变化,我们在产品研发中结合新闻系统自身特点,引入、借鉴了无限分类思想,并将之组件化,最终达到了很好的产品预期。2.新闻系统产品的特点深入理解和把握新闻系统的特征,是新闻系统产品化的关键。我们通过参阅有关文献资料,并结合自身产品研发经验,产品化、正式的新闻系统特征归纳如下:(1)产品化、正式的新闻系统是一种以文章为中心的、B/S架构的信息系统;(2)系统界面按照所承担的功能,可以划分为三种类别—顶级页面、二级页面和三级页面。其中,顶级页面多用来导航,内容上一般只显示有限的新闻标题等信息;二级页面则作为某类目下文章标题列表的容器;新闻具体内容仅在三级页面显示;(3)产品化的新闻系统拥有完善的系统前后台。系统前台面向系统终端用户,用来显示新闻;系统后台则为系统维护人员、管理人员提供入口及一整套的管理、维护子系统。3.无限分类思想分类是人们归纳思维的直接结果,通过归纳我们把具有相同属性的事物组织起来,并把它们和其他类别的事物有效区分开来。无限分类通过归类把具有不同属性的事物区分开来,形成类目的树形结构—类目树。用户的信息查找可以通过无限分类的类目树方便的实现。但是随着类目划分的深入,无限分类的程序实现、控制、管理必将更加困难。∗作者简介:董瑞志(1980-),男,江苏徐州人,硕士,助教,主要研究领域为面向对象软件工程、软件测试、制造执行性系统;陈震(1949-),男,教授,,硕士生导师,吉林长春人,,主要研究领域为数据库、数据仓库、决策支持系统、网络安全。-1-产品背景为了适用不同用户的需求,我们在PHPArticle[3]基础上,开发了OpenNews,并将OpenNews先后在吉林大学政策法规办公室(OpenNewsV1.1.1)、常熟理工学院软件工程系(OpenNewsV1.1.2)、常熟理工学院化学实验教学中心(OpenNewsV1.2.1)部署和应用。OpenNews基于PHP、Apache、MySQL[4]实现,它包含前台子系统、后台管理子系统两大部分组成,产品层次方框图如图1所示。OpenNews前台子系统后台管理子系统系统设置文章管理分类管理用户管理管理日志变量管理模板管理数据库选项管理员选项图1OpenNews层次方框图OpenNews后台管理子系统相对较为稳定,各版本上仅有微小差异。但前台子系统V1.1.1、V1.1.2均采用静态类目划分机制,对用户的类目变更请求响应比较困难;V1.2.1前台子系统开始引入无限分类思想,支持类目的动态生成。OpenNewsV1.2.1部署、应用效果反映了该版本能较好相应用户类目变动,有效降低系统维护成本。4.2无限分类的组件化在OpenNewsV1.2.1中,无限分类的组件化工作主要包含数据库规划、算法设计、组件实现三个方面的工作,下面我们逐一讲述:4.3数据库规划无限分类中,涉及到类目的两种亲缘关系:父子关系和兄弟关系,所以在数据库中如何处理好这两种关系是数据库规划的关键。4.3.1类目的基本信息存储数据库中,所有类目信息都存储在表sort中,其中sortid字段唯一标识一个类目。任一类目的基本信息包括title、description、perpage(perpage表示该类目下每一页面显示的文章标题数),其数据库字段分别为title、description、perpage。4.3.2类目亲缘关系的存储(1)父子关系表sort中,我们为每一类目添加了parentid字段,用以标识该类目的直接父类。如果某类目无父类,设定其父类为-1。此外,我们设定了parentlist字段,以便于新闻系统跟接。parentlist记录了该类目的父子关系树。例如:类目全职教师的类目树如图2所示,则parentlist字段内容为“132,130,3,-1”。-2-类目管理队伍的类目树(2)兄弟关系某层级下类目的兄弟关系,则通过displayorder字段记录。displayorder字段存储某特定层级下,各类目的排列顺序,以便用户对该层级下类目进行优先排序。综合上述分析,得到的表sort的sql脚本[5]如下:CREATETABLE`sort`(`sortid`int(10)unsignedNOTNULLauto_increment,`title`varchar(50)NOTNULLdefault'',`description`varchar(250)NOTNULLdefault'',`displayorder`int(10)unsignedNOTNULLdefault'1',`parentid`int(11)NOTNULLdefault'-1',`parentlist`varchar(255)NOTNULLdefault'',`perpage`tinyint(3)unsignedNOTNULLdefault'25',……PRIMARYKEY(`sortid`),KEY`displayorder`(`displayorder`))TYPE=MyISAMAUTO_INCREMENT=1;4.3.3无限分类的基本算法在上述数据库规划工作基础上,我们采用递归机制实现了无限分类的基本算法如下[6][7][8][9]:?php$conn=mysql_connect(localhost,root);//定义数据源连接mysql_select_db(ecc,$conn);$i=0;//提取所有根类目,并按照displayorder排序。$result1=mysql_query(SELECT*FROM`sort`WHERE`parentid`=-1orderbydisplayorder,$conn);if($myrow1=mysql_fetch_array($result1)){do{$i=1;//输出根类目echo$i.级类目;echobr;//调用递归函数menu()menu($myrow1[0],$i);}while($myrow1=mysql_fetch_array($result1));}-3-();?functionmenu($m,$n){$db=mysql_connect(localhost,root);mysql_select_db(ecc,$db);//列出当前类目的所有直接子类$result=mysql_query(SELECT*FROM`sort`WHERE`parentid`=$morderbydisplayorder,$db);$n=$n+1;while($myrow=mysql_fetch_array($result)){for($j=0;$j$n;$j++){echo+;}echo$n.级类目;echobr;menu($myrow[sortid],$n);}}?4.3.4组件的实现无限分类的基本算法在OpenNewsV1.2.1有两种变式:第一种变式用于管理后台的类目管理,被封装在后台管理子系统的sort.php组件之中;第二种变式被封装在前台子系统组件menu.php。限于篇幅关系,文章仅对前台子系统组件menu.php详细阐述。menu.php是内嵌于系统前台一级、二级页面中的组件,用来产生系统前台的导航菜单。因为采用的无限分类算法基于递归实现,当整个系统类目层次较深、类目树庞大复杂的时候,菜单导航处理较慢,为此我们在menu.php中使用php、JavaScript混合编程,实现下拉菜单效果(下拉菜单效果如图3所示)。点选菜单“师资队伍”后的下拉菜单效果图3下拉菜单效果menu.php中的JavaScript代码用来控制下拉菜单效果,核心脚本由functionShows(),functionHide(),functionHideMenu_mmc(),functionShowMenu_mmc(),functionmakeRectangularDropShadow()组成[10]。组件menu.php中PHPScript主函数核心代码如下:-4-提取数据库中所有根类目,并按照用户设定的displayorder排序$result1=mysql_query(SELECT*FROM`sort`WHERE`parentid`=-1orderbydisplayorder,$conn);/*判定任一根类目是否具有子类:如果不包含子类,则为该类目设定链接;若包含子类,则使用下拉菜单递归调用functionmenu($m,$n),显示该类目下的所有子类目。*/if($myrow1=mysql_fetch_array($result1)){do{$i=1;echo ;echoimgsrc='images/icon.gif';echo ;$sql12=SELECT`sortid`,`title`,`parentid`FROM`sort`WHERE`parentid`=$myrow1[0];$conn12=mysql_connect($servername,$dbusername,$dbpassword);$res12=mysql_db_query($dbname,$sql12,$conn12);if(!$row12=mysql_fetch_row($res12)){?ahref=type.php?sortid=?=$myrow1[0]??echo$myrow1[1];?/a?echobr;echobr;}else{?aonMouseOver='ShowMenu_mmc(?menu($myrow1[0],$i);?,100)';?echo$myrow1[1];?/a?echobr;echobr;}}while($myrow1=mysql_fetch_array($result1));//在类目导航菜单中显示搜索本站菜单,并设定相应链接echo ;echoimgsrc='images/icon.gif';echo ;?ahref=search.php?echo搜索本站;mysql_free_result($result1);}在组件化封装无限分类思想基础上,我们在常熟理工学院化学实验教学中心部署和应用了OpenNewsV1.2.1。经过通过一个多月的产品试运行,用户对系统可用性、灵活性较为满意。5.总结与展望本文结合新闻系统自身特点,使用递归机制实现了无限分类的组件化。通过OpenNewsV1.2.1开发、部署、应用,我们发现无限分类组件化对提高新闻系统产品的通用性、降低后期维护成本具有重要作
本文标题:无限分类在新闻系统中的应用研究
链接地址:https://www.777doc.com/doc-1480065 .html