Discuz门户中文章页面的修改

需求:新增聚合标签定时上架与取消 新增图片导读  新增内容分页 新增文章推送

一:新增聚合标签定时上架与取消

根据admin.php?frames=yes&action=misc&operation=cron 页面可以设置定时任务,为了服务器的性能设置每五分钟进行一次cron更新portal_article_title表操作,在表中新增上架时间satrtdateline 下架enddataline 聚合标签备份tag_bak

每隔五分钟进行一次更新操作

// 上架标签开始时间小于当前时间的

DB::query(‘update pre_portal_article_title set tag=tag_bak where startdateline!=0 and startdateline < ‘.time());

// 清除标签结束时间小于当前时间的

DB::update(‘portal_article_title’, array(‘tag’=> 0), ‘ enddateline!=0 and enddateline < ‘.time());

二:新增图片导读

Discuz本身就有cover作为封面图片的设置,改写上传pagepic存入portal_article_title中的pic中即可

三:新增内容分页

Discuz本身就有内容分页的功能,为 <strong>##########NextPage[title=xxx]##########</strong>为分割标志

改写为[NextPage]作为分页标志

四:新增文章推送

    当用户点击选择文章推送则根据标识来判断是否需要新增一条内容,并只改变了文章的标题和所属栏目。


附录:Discuz采用了MVC层架构,其路由规则如下

               1。入口PHP文件

根目录下的*.php文件分别代表用户向不同模块请求,属于网站的入口文件。如门户 (portal),家园(home), 论坛(forum)。 比如用户可以给网站发个请求指令全站博文目录页 home.php?mod=space&do=blog。当网站收到这个请求后,就会运行home.php来处理这个请求。home.php并不 直接回复用户,而是从用户提交的字符串里找到具体的请求内容,然后交给相应的程序块来处理。在上面的例子里,space意为空间,blog意为博客,所以 用户是在请求得到博文目录。所以这个请求交给了负责有关空间请求的程序块 source\module\home\home_space.php 来处理。

             2。程序块PHP文件

程序块(module)可以说是入口文件的助手, 接受入口文件指派的任务。一个入口文件一般有几个这样的助手处理不同的请求。比如家园口(home.php)就有编辑器(editor),分享 (follow),邀请(invite),道具(magic),勋章(model),空间(space)等助手,都在source/module /home文件夹里。一般每个对应着一类界面样子固定的请求。比如负责空间请求的程序块是 source\module\home\home_space.php。和入口不同的是从同一个入口有可能会看到样子完全不同的页面。但当同一个程序块来服务时,会看到样子相同的的页面。 在用户的请求指令里(如home.php?mod=space&do=blog)指明了需要哪个程序块,如mod=space表明是要空间块,mod代表module(程序块)。

程序块并不是用户请求作啥就作啥,它负责检查该用户是否有权利作做此要求。有时它会将工作分派给 某个助手。如当用户请求home.php?mod=space&do=blog时,他不光指明了处理请求的程序块(mod=space)还指明了 具体的工作(do=blog),而空间这个程序块有助手来处理各个工作,都在source\include\space里,如 space_album.php处理相册, space_blog.php处理博客, space_favorite.php处理分享。

               3。被包含PHP文件

        space_blog.php 要想生成用户要的博文目录网页需要两样东西:一是数据,在这里就是博文名单和每篇博文的一些信息如标题和作者名。二是显示的格式。前者可要封装数据库表的类(class)来提供,后者定义在一个模板(template)文件里。
4。数据库表的封装类

         Discuz 提供了很多个类(class)来封装数据库里的各个表,这样从数据库里取数据就不需要写SQL语句,而只要用相应的类里提供的方法(method)就行 了。这些类都在source\class\table文件夹里。space_blog.php要用的是table_home_blog类来得到储存在 home_blog表里的博文信息。
5HTML模版文件

数据有了,那怎样将这些数据漂亮和整齐显示在浏览器里呢?这需要定义HTML的格式。这些格式都定义在template文件夹里。特别是用来显示博文信息的格式定义在template\default\home\space_blog_list.htm里。

当网站收到用户的请求home.php?mod=space&do=blog时,网站程序内部分派工作的次序

1   home.php

2         分派给 source\module\home\home_space.php

3               分派给 source\include\space\space_blog.php

4                     数据取自source\class\table\table_home_blog.php

5                     格式定义在 template\default\home\space_blog_list.htm

从这些文件的内容和作用看,Discuz是按照MVC 架构模式将程序分割成若干逻辑部件:模型视图控制器(Model-View-Controller) 

source\include\space\space_blog.php属于服务层,source\class\table \table_home_blog.php属于数据层,二者合起来组成了模型层,template\default\home\space_blog_list.htm属于视图层,而home.phpsource\module\home\home_space.php属于控制器层。

发表评论