dede列表页如何调用当前栏目名称?

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

使用 {dede:field} 标签(最推荐、最简洁)

这是最直接、最简单的方法,适用于绝大多数情况。

dede列表页调用当前栏目名称
(图片来源网络,侵删)

代码:

{dede:field name='typename'/}

说明:

  • {dede:field} 是DedeCMS用于调用文档或栏目基本属性的标签。
  • name='typename' 指定了要调用的属性是“栏目名称”(type name)。
  • 这段代码可以直接放在列表页模板文件(通常是 list_article.htm)的任何您想显示栏目名称的位置。

示例: 假设您的列表页模板标题部分希望显示“产品分类 - 公司动态”这样的格式,您可以这样写:

<h1>{dede:field name='typename'/}</h1>
<p>您正在浏览的是 <strong>{dede:field name='typename'/}</strong> 栏目下的所有文章。</p>

使用 {dede:channel} 标签(适用于需要链接的情况)

如果您想在显示栏目名称的同时,让这个名称可以点击跳转到该栏目的列表页(虽然当前就在列表页,但有时会用于导航或面包屑),可以使用 {dede:channel}

代码:

dede列表页调用当前栏目名称
(图片来源网络,侵删)
<a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a>

说明:

  • {dede:field name='typeurl'} 会调用当前栏目的URL地址。
  • 这种方法和方法一的核心 {dede:field name='typename'/} 是一样的,只是外面加了一个 <a>

示例: 在面包屑导航中使用:

您的位置:<a href="{dede:global name='cfg_cmsurl'/}/">首页</a> > 
<a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a>

使用PHP代码(最灵活、最强大)

当您需要进行一些复杂的判断或处理时,直接使用PHP代码会非常灵活,这种方法几乎适用于所有场景,包括列表页、文章页甚至首页。

代码:

<?php 
    $thisid = $typeid; // 在列表页,$typeid 变量直接保存了当前栏目ID
    $typename = GetTopTypename($thisid); // 获取栏目名称
    echo $typename;
?>

说明:

  • $typeid:这是DedeCMS在列表页模板中预设的全局变量,直接存储了当前栏目的ID。
  • GetTopTypename($id):这是DedeCMS的一个核心PHP函数,用于根据栏目ID获取该栏目的名称。
  • 注意:在某些特殊模板或自定义列表页中,$typeid 可能未定义。echo $typename 没有输出,可以尝试以下更严谨的写法:
<?php 
    // $typeid 不存在,尝试从 $_GET 中获取
    if(empty($typeid)){
        $typeid = isset($_GET['typeid']) ? intval($_GET['typeid']) : 0;
    }
    if($typeid > 0){
        $typename = GetTopTypename($typeid);
        echo $typename;
    }else{
        echo "未知栏目";
    }
?>

重要注意事项和常见问题排查

  1. 模板文件位置

    • 确保您修改的是正确的列表页模板文件,通常位于 /templets/您的文件夹名称/ 目录下,文件名为 list_*.htmlist_article.htm)。
  2. 栏目名称为空

    • 检查缓存:修改模板后,请务必到后台的【生成】->【更新HTML】中,重新生成一下对应的列表页,很多时候问题出在模板缓存没有更新。
    • 检查变量:使用方法三的PHP代码,看看 $typeid 的值是否能正常获取。$typeid 为空,说明页面没有正确识别当前栏目。
    • 检查栏目:去后台确认一下,您正在浏览的列表页所对应的栏目,是否确实设置了“栏目名称”。
  3. 调用上级栏目名称 如果您想调用的是当前栏目的上一级栏目的名称,可以使用下面的PHP代码:

    <?php
        $thisid = $typeid;
        $row = $dsql->GetOne("SELECT reid FROM `#@__arctype` WHERE id = $thisid");
        $parentid = $row['reid'];
        if($parentid > 0){
            $parent_name = GetTopTypename($parentid);
            echo $parent_name;
        }
    ?>
方法 代码 优点 缺点 适用场景
方法一 {dede:field name='typename'/} 最简单、最直接、代码少 功能单一,只能获取名称 绝大多数列表页需求,首选方法。
方法二 <a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a> 简单,且能生成链接 比方法一多一个标签 需要名称可点击时(如面包屑)。
方法三 <?php echo GetTopTypename($typeid); ?> 最灵活、最强大,可处理复杂逻辑 需要写PHP代码,对新手稍难 需要条件判断、或PHP原生函数支持时。

对于99%的列表页调用当前栏目名称的需求,使用方法一 {dede:field name='typename'/} 就完全足够了,如果遇到问题,再尝试使用方法三进行排查。

-- 展开阅读全文 --
头像
kindeditor 织梦
« 上一篇 01-03
dede自定义字段如何实现搜索功能?
下一篇 » 01-03
取消
微信二维码
支付宝二维码