织梦二次开发

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 799|回复: 0

[共用功能] 织梦网站栏目管理“内容”功能分析

[复制链接]

1046

主题

1109

帖子

5334

积分

超级版主

Rank: 8Rank: 8

金币
256
贡献
3959
发表于 2015-6-5 11:29:19 | 显示全部楼层 |阅读模式
  网站栏目管理“内容”功能:登录后台——>核心——>网站栏目管理——>内容,如下图所示。

QQ截图20150605094100.png

  当我们点击“内容”后,会打开如下图所示,内容列表。


                               
登录/注册后可看大图


  本教程就是对这当点击“内容”后,打开这个内容列表,这一过程进行分析。

  “内容”功能所在文件是:catalog_do.php,如何知道内容这一功能在这个文件里面的?方法有很多种,一是把鼠标放到“内容”就会在状态栏看到www.dedebase.com/dede/catalog_do.php?cid=1&list=listArchives,另一方法,直接查询这个页面的源代码,再一个方法是通过站长工具,直接查看。这三种方法里面最直接,最简单的就是第一种通过浏览器状态栏直接就知道,其实,这些方法在我们的教程“如果查找模板”里面详细讲解了。

  在文件catalog_do.php里面找到大约58行开始,一直到95行结束,通过这段代码执行后,最后,通过header("location:{$gurl}?channelid={$channelid}&cid={$cid}")这个header()函数,直接跳转到contnet_list.php文件管理文件里面,然后,在这个文件里面引入content_list.htm模板,然后,显示在我们在上图中看到的文档列表。

  我们先对catalog_do.php这个文件里对应的代码分析:
  1. /*--------------------------
  2. //管理文档
  3. function listArchives();
  4. ---------------------------*/
  5. else if($dopost=="listArchives")
  6. {
  7.     if(!empty($gurl))
  8.     {
  9.         if(empty($arcrank))
  10.         {
  11.             $arcrank = '';
  12.         }
  13.         $gurl = str_replace('..','',$gurl);
  14.         header("location:{$gurl}?arcrank={$arcrank}&cid={$cid}");
  15.         exit();
  16.     }
  17.     if($cid>0)
  18.     {
  19.         $row = $dsql->GetOne("SELECT #@__arctype.typename,#@__channeltype.typename AS channelname,#@__channeltype.id,#@__channeltype.mancon FROM #@__arctype LEFT JOIN #@__channeltype on

  20. #@__channeltype.id=#@__arctype.channeltype WHERE #@__arctype.id='$cid'");
  21.         $gurl = $row["mancon"];
  22.         $channelid = $row["id"];
  23.         $typename = $row["typename"];
  24.         $channelname = $row["channelname"];
  25.         if($gurl=="")
  26.         {
  27.             ShowMsg("对不起,你指的栏目可能有误!","catalog_main.php");
  28.             exit();
  29.         }
  30.     }
  31.     else if($channelid>0)
  32.     {
  33.         $row = $dsql->GetOne("SELECT typename,id,mancon FROM #@__channeltype WHERE id='$channelid'");
  34.         $gurl = $row["mancon"];
  35.         $channelid = $row["id"];
  36.         $typename = "";
  37.         $channelname = $row["typename"];
  38.     }
  39.    
  40.     if(empty($gurl)) $gurl = 'content_list.php';
  41.     header("location:{$gurl}?channelid={$channelid}&cid={$cid}");
  42.     exit();
  43. }
复制代码

  上述显示内容列表,就是通过这一段代码处理后,转到contnet_list.php文件显示的。这段代码功能最核心的就是里面的sql查询,最终的目的是查询出来对应的栏目id、栏目名称、模型id、模型名称和$row['mancon']。

  第一个条件语句是判断$gurl是否为空,若不空,再判断一下浏览权限$arcrank是否为空,也就是文档是不是需要审核的,是不是只有会员才能浏览的,是不是开放浏览的文档。若$gurl有符号“..”则去掉,因为,catalog_do.php跟contnet_list.php是同一目录,所以,把不必要的这两个去掉。

  然后通过header("location:{$gurl}?arcrank={$arcrank}&cid={$cid}")转到对应的文档管理文件,要注意,一般用header()这函数后,就要加上exit()退出,否则可能出错。

  上面这个条件判断的是当$gurl不为空时,若为空,则向下执行第二个条件$cid>0时,一般我们都是通过个来实现的,当点击“内容”时,就有对应的栏目id传到catalog_do.php这个文件里面,而且,栏目id不可能为空且不可能小于零。
  
  然后,我们通过sql联合查询表#@__arctype和#@__channeltype把栏目名称,模型id,模型名称,文档管理文件查询出来。为什么要查询出这些字段呢?因为,当点击“内容”时,在列表都要用到这些,如下图所示。


                               
登录/注册后可看大图


  如果上面二种情况都不存在,那么,执行第三个条件,这个是当模型id存在且大于零时,这个就不用联合查询了,直接查模型名,模型id,以及文档管理文件。

  但是,在这个sql查询里面有一点个人觉得有点问题,就是如果$channelid=1,如果用这个1去查询,作为条件去查询表#@__channeltype,多此一举啊,查询出来的id还是1,就相当于用1查询1,关于这一点大家讨论一下是不是我余的,也许我没有想到其它原因。

  通过上面的两个条件查询后,header()里面的问号?后面的参数是不同的,

  也就是是:
  当$cid>0时,转向了  www.dedebase.com/dede/content_list.php?channelid=1&cid=1,此时,列表出的是栏目id为1的所有文档,当然,如果这个栏目所在的模型是1,那么,channelid自然就等于1,这个程序会自动加上。

  当$channelid>0时,即www.dedebase.com/dede/content_list.php?channelid=1&cid=0,程序会把所有模型为1的栏目列出来如下图所示。

4.png

  请注意看,上图中的类目“汽车”和其它栏目"html",“Dreamweaver”是完全不同的二个栏目,如下图所示。
5.png

  但是这二个栏目却同属于同一个模型,即模型id为1的“文章模型”,所以,一起显示出来,这就是当$channelid>0时的,筛选出来的结果。

  到此,为止程序已经转到了content_list.php里面了,在这个文件里面,最后面,先初始化一个动态分页类$dlist = new DataListCP(),然后,设置一些参数,这些参数包括关于词$keyword,会员id,模型id等,如下图所示。

6.png

  然后,引入模板文件content_list.htm,显示结果$dlist->Display(),我们在后台看到的内容列表页就是这个模板文件显示的结果。
2.png
3.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|织梦二次开发

GMT+8, 2019-9-17 21:03 , Processed in 0.278368 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表