Dedecms 列表页获取频道页父栏目 ID 的方法


在 Dedecms 系统中,获取父栏目 ID 是一个常见的需求。然而,网上关于如何实现这一功能的信息较少,且不够全面。本文将详细介绍如何通过自定义 PHP 函数来实现这一目标。


Dedecms 的栏目信息存储在数据库表 dede_arctype 中,其中包含栏目 ID 和父栏目 ID(reid)。因此,我们可以通过编写一个自定义函数,从数据库中提取所需的父栏目 ID。


function getParentId($typeid){
    global $dsql;
    $sql = "SELECT reid FROM `dede_arctype` WHERE id=$typeid";
    $dsql->SetQuery($sql);
    $dsql->Execute();
    $row = $dsql->GetArray();
    return $row['reid'];
}
    

要使用该函数,首先需要将其定义在 Dedecms 的扩展文件中。具体步骤如下:


1. 在 include/inc/ 目录下创建一个新的文件,例如 inc_tagFuns.php


2. 打开 include/common.func.php 文件,并在其中添加以下代码以包含新创建的文件:
require_once(DEDEINC."/inc/inc_tagFuns.php");


3. 在模板中调用自定义函数,语法如下:


{dede:field name="typeid" function="getParentId(@me)"/}


此标签会返回当前栏目的父栏目 ID。如果需要显示父栏目名称或其他信息,可以结合其他 Dedecms 标签进行扩展。


另外,如果希望在页面中显示父栏目的同级栏目列表,可以使用 Dedecms 的 {dede:channel} 标签。例如:


{dede:channel typeid=9}
[field:typename/]
{/dede:channel}
    

上述代码中的 typeid=9 表示指定父栏目的父栏目 ID。通过这种方式,可以列出父栏目及其同级栏目列表。


需要注意的是,Dedecms 的 {dede:channel} 标签支持多种类型参数,如 selfsontop,但遗憾的是并未提供直接的 parent 参数。因此,在实际应用中,通常需要手动指定父栏目的父栏目 ID。


总结来说,通过自定义 PHP 函数和合理使用 Dedecms 标签,可以轻松实现获取父栏目 ID 及其同级栏目列表的功能。这种方法不仅灵活,而且能够满足大多数网站开发的需求。