菜鸟科技网

织梦中如何提取二级栏目,织梦里二级栏目提取方法是什么?

在织梦(DedeCMS)系统中,提取二级栏目是网站开发中常见的操作,主要用于导航栏、面包屑导航或内容页面的分类展示,织梦的栏目结构采用树形层级设计,一级栏目为顶级分类,二级栏目则隶属于一级栏目之下,提取二级栏目的核心思路是通过数据库查询或调用系统标签,结合栏目ID、父级ID等字段进行筛选和输出,以下是详细的操作方法和注意事项。

织梦中如何提取二级栏目,织梦里二级栏目提取方法是什么?-图1
(图片来源网络,侵删)

通过SQL语句直接提取二级栏目

如果需要在自定义模板页面或PHP文件中获取二级栏目,可以直接执行SQL查询,织梦的栏目表(dede_arctype)中,topid字段表示顶级栏目的ID,reid字段表示父级栏目的ID,二级栏目的特征是reid不为0且topid等于一级栏目的ID,假设需要提取ID为1的一级栏目下的所有二级栏目,可使用以下代码:

$dsql = new DedeSql(false);
$sql = "SELECT id,typename,typedir FROM `dede_arctype` WHERE reid=1 And ishidden<>1 order by sortrank asc";
$dsql->SetQuery($sql);
$dsql->Execute();
while ($row = $dsql->GetArray()) {
    echo $row['typename']; // 输出栏目名称
}

此方法适用于需要灵活处理数据的场景,但需注意SQL注入防护,建议使用织梦自带的dsql类进行查询。

使用织梦标签提取二级栏目

在模板文件中,推荐使用织梦内置的channeltype标签调用二级栏目,以调用一级栏目ID为1的二级栏目为例,可通过以下标签实现:

{dede:channel type='son' typeid='1'}
    <a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}

参数说明:

织梦中如何提取二级栏目,织梦里二级栏目提取方法是什么?-图2
(图片来源网络,侵删)
  • type='son':表示调用子栏目(即二级栏目);
  • typeid='1':指定一级栏目的ID;
  • [field:typelink/]:栏目链接地址;
  • [field:typename/]:栏目名称。

若需调用多个一级栏目下的二级栏目,可结合arclist标签或循环遍历实现,调用所有一级栏目及其对应的二级栏目:

{dede:channel type='top' typeid='0'}
    <dl>
        <dt>[field:typename/]</dt>
        <dd>
            {dede:channel type='son' reid='[field:id]'}
                <a href="[field:typelink/]">[field:typename/]</a>
            {/dede:channel}
        </dd>
    </dl>
{/dede:channel}

通过后台功能批量获取

若需要导出二级栏目列表,可利用织梦后台的“SQL命令工具”执行查询,路径为:后台首页 → 系统 → SQL命令工具 → 运行SQL命令,输入以下语句:

SELECT id,typename,typedir FROM `dede_arctype` WHERE reid<>0 And ishidden<>1 ORDER BY reid,sortrank;

执行后可查看所有二级栏目,并可导出为Excel或文本格式,方便数据整理。

注意事项

  1. 栏目状态检查:若栏目被隐藏(ishidden=1),则需在SQL或标签中添加ishidden<>1条件,确保只显示有效栏目。
  2. 缓存问题:织梦栏目数据默认缓存,修改栏目后需在后台“更新系统缓存”或生成栏目HTML才能看到效果。
  3. 权限控制:部分站点对栏目设置了浏览权限,需在模板中添加channel标签的noselflink='yes'或相关权限判断。

二级栏目提取常见场景应用

场景 实现方法
导航栏下拉菜单 使用{dede:channel type='son'}嵌套在一级栏目标签中,配合CSS实现样式。
首页栏目分类展示 通过{dede:arclist}指定typeid调用二级栏目下的文章列表。

相关问答FAQs

问题1:为什么使用{dede:channel type='son'}调用不出二级栏目?
解答:可能原因包括:① 一级栏目ID错误,需确认typeid值是否正确;② 二级栏目被隐藏(ishidden=1),需在标签中添加ishidden='0';③ 模板缓存未更新,需在后台“更新HTML”并清理缓存。

问题2:如何提取二级栏目的文章数量?
解答:可通过SQL查询关联dede_archives表,统计每个二级栏目下的文章数。

SELECT t.id,t.typename,COUNT(a.id) as articleCount FROM dede_arctype t LEFT JOIN dede_archives a ON t.id=a.arctypeid WHERE t.reid=1 GROUP BY t.id;

在模板中可使用{dede:sql sql="SELECT..."}[field:articleCount/]{/dede:sql}调用结果。

分享:
扫描分享到社交APP
上一篇
下一篇