织梦如何调用父级栏目名称?

99ANYc3cd6
预计阅读时长 14 分钟
位置: 首页 织梦建站 正文

使用 GetTopTypename() 函数(最推荐、最简单)

这是织梦官方提供的、专门用于获取顶级栏目名称的函数,如果你需要获取当前栏目的顶级父级名称,这是最佳选择。

织梦调用父级栏目名称
(图片来源网络,侵删)

语法:

<?php echo GetTopTypename($typeid); ?>
  • $typeid:当前栏目的ID,在列表页或内容页,这个变量通常可以直接使用 {dede:field.id/}{dede:global.artid/} 获取。

适用场景:

  • 列表页 (list_article.htm) 调用。
  • 内容页 (article_article.htm) 调用。
  • 首页或其他自定义页面调用(需要知道当前栏目的ID)。

示例:

在列表页 (list_article.htm) 中调用

假设你的栏目结构是:首页 -> 技术文章 -> PHP教程,当你在 "PHP教程" 这个列表页时,想显示它的顶级父级 "技术文章" 的名称。

在列表页模板的相应位置加入以下代码:

<h2>当前位置:首页 > <strong>{dede:field.typename/}</strong></h2>
<p>本栏目隶属于顶级栏目:<strong><?php echo GetTopTypename($typeid); ?></strong></p>
  • {dede:field.typename/} 会显示当前栏目的名称,即 "PHP教程"。
  • GetTopTypename($typeid) 会向上查找,直到找到顶级栏目,并返回其名称,即 "技术文章"。

页 (article_article.htm) 中调用 页,你想显示这篇文章所属栏目的顶级父级名称。 页模板的相应位置加入:

织梦调用父级栏目名称
(图片来源网络,侵删)
<div class="breadcrumb">
    首页 > <a href="{dede:field name='typelink'/}">{dede:field.typename/}</a>
</div>
<div class="info">
    本文所属顶级栏目:<strong><?php echo GetTopTypename($GLOBALS['artid']); ?></strong>
</div>
```页,当前栏目的ID通常通过 `$GLOBALS['artid']` 获取,或者直接使用 `{dede:field.id/}`。
*   `GetTopTypename()` 会根据文章ID找到它所在的栏目,然后返回该栏目的顶级父级名称。
---
### 方法二:使用 `{dede:field.typeid/}` 和 `GetOneType()` 函数(更灵活,可获取任意父级)
如果你需要获取**直接父级**的名称,或者更复杂的层级关系,可以使用这个方法,它需要结合PHP和织梦的数据查询函数。
#### 适用场景:
*   获取**直接父级**栏目名称。
*   获取**任意层级**的父级栏目名称。
#### 示例:
**1. 获取直接父级栏目名称**
假设你的栏目结构是:`首页 -> 技术文章 -> PHP教程`,在 "PHP教程" 列表页,你想显示它的直接父级 "技术文章" 的名称。
在列表页模板中加入以下代码:
```php
<?php
    // 1. 获取当前栏目的ID
    $currentTypeId = $typeid;
    // 2. 获取当前栏目的完整信息
    $currentType = GetOneType($currentTypeId);
    // 3. 从当前栏目的信息中获取其父级ID
    $parentId = $currentType['reid']; // 'reid' 字段存储的就是父级栏目的ID
    // 4. 如果存在父级ID (reid不为0),则获取父级栏目的名称
    if ($parentId > 0) {
        $parentType = GetOneType($parentId);
        $parentName = $parentType['typename'];
        echo $parentName;
    } else {
        echo "这是顶级栏目";
    }
?>

代码解释:

  • GetOneType($id):根据栏目ID获取该栏目的所有信息,返回一个数组。
  • $currentType['reid']:这个数组中的 reid 键对应的值就是当前栏目的父级栏目IDreid 为0,则表示它本身就是顶级栏目。
  • GetOneType($parentId):再次调用函数,用父级ID获取父级栏目的信息。
  • $parentType['typename']:从父级信息数组中获取 typename,即父级栏目的名称。

在首页或自定义页面调用(需指定栏目ID)

如果你想在首页的某个位置显示指定栏目(比如ID为5的栏目)的父级名称,可以这样写:

<?php
    $targetTypeId = 5; // 你想查询的栏目的ID
    $targetType = GetOneType($targetTypeId);
    if ($targetType['reid'] > 0) {
        $parentType = GetOneType($targetType['reid']);
        echo "栏目ID为 {$targetTypeId} 的父级是:" . $parentType['typename'];
    } else {
        echo "栏目ID为 {$targetTypeId} 是顶级栏目";
    }
?>

使用SQL直接查询(适用于高级用户)

如果你对SQL比较熟悉,也可以直接执行数据库查询来获取名称,这种方法性能最高,但可读性稍差。

示例:获取直接父级名称

<?php
    $currentTypeId = $typeid; // 当前栏目ID
    // 1. 先查出当前栏目的父级ID
    $query = "SELECT reid FROM `#@__arctype` WHERE id = $currentTypeId";
    $row = $dsql->GetOne($query);
    $parentId = $row['reid'];
    // 2. 如果有父级ID,再查出父级名称
    if ($parentId > 0) {
        $query2 = "SELECT typename FROM `#@__arctype` WHERE id = $parentId";
        $row2 = $dsql->GetOne($query2);
        echo $row2['typename'];
    }
?>

代码解释:

  • $dsql 是织梦的数据库操作对象。
  • GetOne($sql) 执行一条SQL查询并返回第一条结果。
  • #@__ 是织梦的数据表前缀,如果你的前缀不是 dede_,会自动替换成你设置的前缀。

总结与推荐

方法 优点 缺点 推荐场景
GetTopTypename() 代码最简单,官方函数,稳定可靠 只能获取顶级父级,无法获取中间层级的父级 绝大多数情况下,这是你的首选,特别是只需要显示顶级分类时。
GetOneType() 非常灵活,可以获取任意层级的父级,逻辑清晰 代码稍多,需要理解 reid 字段 需要显示直接父级或进行复杂层级判断时。
SQL查询 性能最高 代码可读性差,不够“织梦化”,硬编码了表名 对性能有极致要求,且不介意写原生SQL的高级用户。

对于99%的需求,直接使用方法一 GetTopTypename() 就足够了,也是最规范和最容易维护的做法。

-- 展开阅读全文 --
头像
织梦文章详情消失,数据去哪了?
« 上一篇 03-08
dede网站换源码具体步骤是什么?
下一篇 » 03-08

相关文章

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

目录[+]