在使用 Dedecms 系统构建网站时,如果遇到栏目较多的情况,通常需要通过栏目嵌套标签来显示当前栏目下的二级和三级栏目。然而,在实际操作中,我们可能会遇到一个问题:当三级栏目为空时,系统会自动显示同级栏目。从用户体验的角度来看,这种情况并不理想。理想的处理方式是:如果二级栏目下的三级栏目为空,则不显示任何内容。那么,如何让 Dedecms 的 `{dede:channel type='son'}` 标签在无子栏目时不显示同级栏目呢?以下将分享两种解决方法。
### 方法一:修改核心文件 首先,我们需要打开 Dedecms 的核心文件 `include\\\\taglib\\\\channel.lib.php`。
找到以下代码片段:

if($type=='son' && $reid!=0 && $totalRow==0)
    
将其修改为以下代码:

if($type=='son' && $reid!=0 && $totalRow==0 && $noself=='')
    
完成上述修改后,还需要在模板中的 `{dede:channel}` 标签添加参数 `noself='yes'`。例如:

{dede:channel type='son' row='5' noself='yes'}
    
接下来,在模板中引用实例如下:


    
通过以上设置,可以确保当三级栏目为空时,不会显示同级栏目。
### 方法二:注释掉相关代码 另一种更为直接的方法是直接注释掉 `include\\\\taglib\\\\channel.lib.php` 文件中的相关代码。具体步骤如下:
1. 打开文件 `include\\\\taglib\\\\channel.lib.php`。
2. 找到第 110 行左右的代码块,并将其注释掉。示例代码如下:

// if($type == 'sun' && $reid != 0 && $totalRow == 0) {
//     $sql = "SELECT id, typename, typedir, isdefault, ispart, defaultname, namerule2, moresite, siteurl, sitepath
//             FROM `dede_arctype` WHERE reid='$typeid' AND ishidden<>1 ORDER BY sortrank ASC LIMIT 0, $line ";
// }
    
3. 保存文件后刷新页面即可生效。
### 总结 通过以上两种方法,我们可以有效解决 Dedecms 中 `{dede:channel}` 标签在无子栏目时不显示同级栏目的问题。第一种方法适合对代码有一定了解的用户,而第二种方法则更加简单直接,适合新手快速上手。无论选择哪种方法,请务必备份好原始文件,以免出现意外情况导致数据丢失。希望本文能帮助大家更好地优化 Dedecms 网站的功能与体验!