dede如何读取指定栏目的详细内容?

99ANYc3cd6
预计阅读时长 18 分钟
位置: 首页 DEDE建站 正文

下面我将从基础读取进阶应用,详细讲解如何在 DedeCMS 中实现。

dede读取栏目内容
(图片来源网络,侵删)

基础读取:获取单个栏目的基本信息

这是最常用的情况,比如在首页显示“公司简介”栏目的名称和描述。

方法1:使用 GetTopNav() 函数(推荐用于顶级栏目)

这个函数主要用于获取网站顶部的导航栏,但它也可以用来获取单个顶级栏目的信息,它通常需要一个栏目ID作为参数。

示例代码: 假设我们要获取栏目ID为 1 的栏目信息。

{dede:global name='typeid' runphp='yes'}
    // 如果当前页面已经有栏目ID(如在列表页),可以直接使用
    // $typeid = @me;
    // 否则,手动指定ID,1
    $typeid = 1;
    // 调用GetTopNav函数
    $topnav = GetTopNav($typeid);
    // 输出栏目名称
    @me = $topnav['typename'];
{/dede:global}
{dede:global name='typeid' runphp='yes'}
    $typeid = 1;
    $topnav = GetTopNav($typeid);
    // 输出栏目描述
    @me = $topnav['description'];
{/dede:global}

更简洁的写法(直接调用函数): 如果你确定栏目ID,可以直接这样写,不需要 runphp

dede读取栏目内容
(图片来源网络,侵删)
<?php
    $typeid = 1; // 目标栏目ID
    $topnav = GetTopNav($typeid);
    echo $topnav['typename']; // 输出栏目名称
    echo $topnav['description']; // 输出栏目描述
    echo $topnav['typedir']; // 输出栏目链接
?>

方法2:使用 GetOneType() 函数(通用性更强)

GetOneType() 是更底层、更通用的函数,它可以获取任意层级(顶级、子栏目)的栏目信息。

示例代码: 获取栏目ID为 1 的栏目信息。

<?php
    $typeid = 1; // 目标栏目ID
    $typeinfo = GetOneType($typeid);
    // 输出栏目名称
    echo $typeinfo['typename'];
    // 输出栏目描述
    echo $typeinfo['description'];
    // 输出栏目链接(非常重要)
    echo $typeinfo['typedir'];
    // 输出栏目封面图地址
    echo $typeinfo['typeimg'];
    // 输出栏目关键词
    echo $typeinfo['keywords'];
    // 输出栏目SEO标题
    echo $typeinfo['seotitle'];
?>

进阶应用:获取当前栏目的信息

在列表页(list_article.htm页(article_article.htm)的模板中,我们常常需要获取当前栏目本身的信息。

在列表页 (list_article.htm) 中

DedeCMS 在列表页中已经定义了全局变量 typeid,它存储了当前列表页的栏目ID,我们可以直接利用这个变量。

dede读取栏目内容
(图片来源网络,侵删)

示例代码(在 list_article.htm 中):

<h1>{dede:field name='typename'/}</h1>
<p>{dede:field name='description'/}</p>
<a href="{dede:field name='typedir'/}">查看更多</a>

这里的 {dede:field name='typename'} 等标签是 DedeCMS 为列表页预设的,它们会自动获取当前栏目 ($typeid) 对应的信息,这是最简单、最推荐的方式。

页 (article_article.htm) 中

页,获取当前栏目信息也很常见,比如面包屑导航。

示例代码(在 article_article.htm 中):

同样,DedeCMS 在内容页也预设了 {dede:field name='typename'/} 等标签来直接获取文章所属栏目的信息。

<!-- 面包屑导航 -->
{dede:field name='position'/}
<!-- 文章标题 -->
<h1>{dede:field name='title'/}</h1>
<!-- 所属栏目名称 -->
<p>栏目:<a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a></p>

获取子栏目列表

有时候我们不仅需要读取栏目的信息,还需要显示它下面的所有子栏目。

方法1:使用 {dede:channel} 标签(推荐)

{dede:channel} 是专门用于获取栏目列表的标签,功能非常强大。

示例代码: 获取栏目ID为 2 的所有一级子栏目。

<ul>
    {dede:channel type='son' typeid='2'}
        <li>
            <a href="[field:typedir/]">[field:typename/]</a>
        </li>
    {/dede:channel}
</ul>

{dede:channel} 标签常用属性:

  • typeid='2': 指定从哪个栏目下获取子栏目,如果省略,默认从顶级栏目获取。
  • type='son': 获取指定栏目的直接子栏目(一级子栏目)。
  • type='self': 获取指定栏目本身(不常用,通常用 {dede:field})。
  • type='top': 获取顶级栏目。
  • row='10': 显示的栏目数量。
  • currentstyle='<li class="active"><a href~class="this">~</a></li>': 高亮当前样式。

方法2:使用 {dede:sql} 自定义查询(灵活性最高)

{dede:channel} 无法满足你的需求(比如需要复杂的条件筛选),你可以直接写 SQL 查询。

示例代码: 获取顶级栏目(topid=0)且排序号大于 5 的栏目。

<ul>
    {dede:sql sql='SELECT id,typename,typedir FROM `dede_arctype` WHERE topid=0 AND sortrank > 5 ORDER BY sortrank ASC'}
        <li>
            <a href="[field:typedir/]">[field:typename/]</a>
        </li>
    {/dede:sql}
</ul>

注意: 使用 {dede:sql} 需要对数据库表结构非常熟悉,并且要注意SQL注入风险,不要直接使用用户提交的变量。


获取栏目封面图并显示

很多模板会用到栏目封面图,获取方法和获取普通字段一样。

在模板中直接调用:

<!-- 方法1:在列表页或内容页直接调用当前栏目的封面图 -->
<img src="{dede:field.typeimg/}" alt="{dede:field.typename/}">
<!-- 方法2:在自定义页面或首页,通过PHP调用指定ID的封面图 -->
<?php
    $typeid = 3; // 目标栏目ID
    $typeinfo = GetOneType($typeid);
    $typeimg = $typeinfo['typeimg'];
    // 判断封面图是否存在,如果不存在则使用默认图
    if(empty($typeimg)){
        $typeimg = '/images/default.jpg';
    }
    echo '<img src="' . $typeimg . '" alt="栏目封面">';
?>

总结与最佳实践

需求场景 推荐方法 备注
获取当前列表页/内容页的栏目信息 {dede:field name='typename'} 最简单,直接使用DedeCMS内置标签。
获取指定ID的栏目信息(顶级或子栏目) GetOneType() 函数 灵活,可在任何模板文件中通过PHP调用。
获取指定栏目的子栏目列表 {dede:channel type='son' typeid='X'} 功能专一,代码简洁,是获取栏目列表的首选。
获取网站顶部导航栏 GetTopNav() 函数 主要用于顶部导航,也可用于获取顶级栏目信息。
需要自定义复杂查询时 {dede:sql} 灵活性最高,但需要SQL知识,注意安全。

核心要点:

  1. 利用好DedeCMS的内置标签:在列表页和内容页,优先使用 {dede:field name='...'},它已经为你处理好了当前栏目ID的获取。
  2. PHP函数用于灵活场景:在首页、自定义页面等非标准页面,使用 GetOneType()GetTopNav() 等PHP函数可以让你自由地获取任何栏目的信息。
  3. 理解标签属性:特别是 {dede:channel}typeidtype 属性,它们决定了你获取的是哪个栏目的哪种类型的栏目(顶级、子级、自身)。

希望这份详细的指南能帮助你熟练地在 DedeCMS 中读取和使用栏目内容!

-- 展开阅读全文 --
头像
织梦手机端跳转如何设置?
« 上一篇 今天
C语言入门经典为何难理解?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]