首先,我们来看一下导致该问题的代码示例:
{dede:channelartlist typeid="192"}
-
{dede:field name='typename'/}
{dede:channel noself="yes"}
[field:typename/]
{/dede:channel}
{/dede:channelartlist}
上述代码的功能是先循环输出顶级栏目,再输出其子栏目。然而,在实际应用中,如果顶级栏目下没有子栏目,理论上应该返回空值,但系统却调用了同级栏目。这显然不符合我们的预期。
为了解决这个问题,我们需要对DedeCMS的核心文件进行修改。具体步骤如下: 1. 打开 **include/taglib/channel.lib.php** 文件。 2. 找到以下代码(通常位于第108行附近):
if($type=='son' && $reid!=0 && $totalRow==0)
3. 将其修改为:
if($type=='son' && $reid!=0 && $totalRow==0 && $noself=='')
通过以上修改,我们可以实现以下功能:当某个栏目存在子栏目时,正常调用子栏目;如果没有子栏目,则输出为空,避免了重复调用同级栏目的情况。
以下是修改后的效果对比图:
通过这样的调整,您的网站将更加符合设计初衷,同时提升用户体验。如果您正在使用DedeCMS 5.6及以上版本,可以尝试按照上述方法进行操作。希望这篇文章能帮助您解决问题!