[[IT知识]] 帝国CMS与织梦CMS中获取当前栏目及其所有子栏目信息的方法

[复制链接]
查看: 21|回复: 0
发表于 8 小时前 | 显示全部楼层 | 阅读模式
易博V9下载

帝国CMS和织梦CMS的栏目都支持无限级分类,这也带来了不少问题。去年我实现了一个功能,用来获取当前栏目的最顶级栏目。这相对简单,只需编写一个无限循环查询,逐层查找当前栏目的上级栏目,直到找到顶级栏目为止。今天我们讨论的是一个更复杂的功能:不仅要读取当前栏目的下级栏目,还要读取所有的子栏目,无论这些子栏目有多少层级。这里以帝国CMS和织梦CMS为例来说明。(个人比较推崇帝国CMS,它的标签和PHP混编非常好用,甚至可以在模板中定义PHP函数来使用),先看效果:


帝国CMS与织梦CMS中获取当前栏目及其所有子栏目信息的方法


帝国CMS与织梦CMS中获取当前栏目及其所有子栏目信息的方法

这个效果图是以帝国CMS为例的,可以看到我已经将当前栏目的所有子栏目中最终级栏目的ID读了出来。我们可以根据自己的需要调整这个函数。

实现方法是这样的:查看帝国CMS的数据库,其栏目表名为`phome_enewsclass`。所有无限级分类都会存储每个记录的父类信息。我们通过这一点来获取所有子栏目。代码如下:

  1. function sonclass1($cid, $dbtbpre){
  2. $sql="SELECT classid, classname, islast FROM {$dbtbpre}enewsclass WHERE bclassid = '$cid'";
  3. $query=mysql_query($sql);
  4. $id = '';
  5. while($c = mysql_fetch_array($query)){
  6. if('1'==$c['islast']){
  7. $id .=$c['classid'].',';
  8. }else{
  9. $id .=sonclass2($c['classid'],$dbtbpre);
  10. }
  11. }
  12. if($id){
  13. return $id;
  14. }else{
  15. return false;
  16. }
  17. }
  18. function sonclass2($cid, $dbtbpre){
  19. $sql="SELECT classid, classname, islast FROM {$dbtbpre}enewsclass WHERE bclassid = '$cid'";
  20. $query=mysql_query($sql);
  21. $id = '';
  22. while($c = mysql_fetch_array($query)){
  23. if('1'==$c['islast']){
  24. $id .=$c['classid'].',';
  25. }else{
  26. $id .=sonclass2($c['classid'],$dbtbpre);
  27. }
  28. }
  29. return $id;
  30. }
复制代码

将上述代码添加到帝国CMS的函数库文件`e/class/functions.php`中。

我们来看这段代码的意思:调用`sonclass1`函数,传递两个参数,第一个是当前栏目的ID,第二个是数据表的前缀。这些参数都可以直接从前端模板中获取。

接着我们来看看前端模板的写法。

通常我们在列表页使用,以列表模板为例。帝国CMS的封面模板不能发布文章,但可以使用列表页模板,并且模板中可以直接写PHP代码。

我是这样写的:


帝国CMS与织梦CMS中获取当前栏目及其所有子栏目信息的方法

  1. <?php
  2. echo sonclass1($GLOBALS['navclassid'], $dbtbpre);
  3. ?>;
复制代码

模板中已经加载了函数库文件,因此可以直接使用这个函数。`$GLOBALS['navclassid']`和`$dbtbpre`分别是获取当前栏目的ID和数据表的前缀。这样就能实现读取所有子栏目中的最终级栏目的ID。根据需要可以进行修改。

有人可能会问既然可以直接写PHP代码,为什么不在模板中定义这个函数?原因在于,如果模板被多次调用,函数就会被多次定义,而我们知道,一个同名函数不能被多次定义。除非这个模板只使用一次,否则需要在函数库中定义。

织梦CMS实现相同功能的方法类似,只需找到其函数库文件并调整函数内的字段即可。

易博软件介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1、请认真发帖,禁止回复纯表情,纯数字等无意义的内容!帖子内容不要太简单!
2、提倡文明上网,净化网络环境!抵制低俗不良违法有害信息。
3、如果你对主帖作者的帖子不屑一顾的话,请勿回帖。谢谢合作!
3、问答求助区发帖求助后,如有其他用户热心帮您解决问题后,请自觉点击设为最佳答案按钮。

 
 
QQ在线客服
QQ技术支持
工作时间:
8:00-18:00
软著登字:
1361266号
官方微信扫一扫
weixin

QQ|小黑屋|Archiver|慈众营销 ( 粤ICP备15049986号 )|网站地图

自动发帖软件 | 自动发帖器 | 营销推广软件 | 网络营销工具 | 网络营销软件 | 网站推广工具 | 网络推广软件 | 网络推广工具 | 网页推广软件 | 信息发布软件 | 网站推广工具 | 网页推广软件

Powered by Discuz! X3.4   © 2012-2020 Comsenz Inc.  慈众科技 - Collect from 深圳吉宝泰佛文化有限公司 公司地址:罗湖区黄贝街道深南东路集浩大厦A1403

返回顶部 返回列表