织梦三级栏目名调用,具体方法是什么?

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

要调用三级栏目名,你需要使用织梦的循环标签 {dede:channel} 并配合 typeid 属性来指定栏目层级。

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

下面我将为你提供几种最常用和最有效的方法,从简单到复杂,并附上详细的代码示例。


核心思路

织梦的栏目数据存储在 dede_arctype 表中,每个栏目都有一个 topid(顶级ID)、reid(父级ID)和 id(自身ID)。

  • 顶级栏目: topid 为 0。
  • 二级栏目: topid 为其父级栏目的ID。
  • 三级栏目: topid 为其顶级栏目的ID。

我们的目标是获取某个三级栏目路径,一级栏目 > 二级栏目 > 三级栏目


在列表页或内容页调用当前栏目的三级路径(最常用)

这种方法适用于在列表页list_article.htm)或内容页article_article.htm)中,获取当前栏目所在的三级路径。

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

步骤 1:修改模板文件

打开你想要显示三级路径的模板文件,list_article.htm

步骤 2:在合适的位置添加以下代码

将这段代码放在你希望显示路径的地方,<title> 标签内或面包屑导航中。

{dede:field name='title'/} - {[field:typename function='GetCatPath(@me)'/]}

或者,如果你想只显示路径,不显示当前栏目名:

{dede:field name='typename' function='GetCatPath(@me)'/}

步骤 3:在 include/extend.func.php 中添加自定义函数

这是最关键的一步,织梦的自定义函数都存放在这个文件里,如果文件不存在,请自行创建。

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

打开 /include/extend.func.php 文件,在文件末尾添加以下PHP代码:

/**
 * 获取当前栏目的完整路径(一级栏目 > 二级栏目 > 三级栏目)
 * @param int $typeid 当前栏目ID
 * @return string 完整的栏目路径
 */
function GetCatPath($typeid) {
    global $dsql;
    $arr = array();
    // 获取当前栏目的信息
    $row = $dsql->GetOne("SELECT * FROM `dede_arctype` WHERE `id` = '$typeid'");
    if (is_array($row)) {
        // 将当前栏目名加入数组
        $arr[] = $row['typename'];
        // 如果有父级栏目,则递归获取父级栏目名
        if ($row['reid'] > 0) {
            $parentPath = GetCatPath($row['reid']);
            if ($parentPath) {
                $arr[] = $parentPath;
            }
        }
    }
    // 将数组反转,并拼接成字符串
    $arr = array_reverse($arr);
    return implode(' > ', $arr);
}

代码解释:

  1. 这个函数 GetCatPath 接收一个参数 $typeid,即当前栏目的ID。
  2. 它通过 global $dsql; 获取数据库连接对象。
  3. GetOne 查询当前栏目的所有信息。
  4. 将当前栏目的 typename(栏目名)存入一个数组 $arr
  5. 判断当前栏目是否有父级(reid > 0),如果有,就递归调用自身,去获取父级栏目的路径。
  6. 递归结束后,$arr 数组里存储的是 [三级栏目名, 二级栏目名, 一级栏目名] 的顺序。
  7. 使用 array_reverse 将数组反转,变成 [一级栏目名, 二级栏目名, 三级栏目名]
  8. 最后用 implode(' > ', $arr) 将数组元素用 > 连接起来,形成最终的路径字符串。

步骤 4:更新缓存并测试

保存所有修改的文件后,登录织梦后台,点击“生成” -> “更新主页HTML” 或 “更新栏目HTML”,然后去对应的列表页或内容页查看效果。


在首页调用指定三级栏目的名称

如果你想在首页(index.htm)或任何其他页面调用一个固定的三级栏目名称,可以直接使用嵌套的 {dede:channel}

假设你知道你的三级栏目的ID是 25,它的二级栏目ID是 10,一级栏目ID是 5

<h2>指定三级栏目名称:</h2>
{dede:channel type='son' typeid='5'}
    {dede:channel type='son' typeid='10'}
        {dede:channel type='son' typeid='25'}
            <a href="[field:typelink/]">[field:typename/]</a>
        {/dede:channel}
    {/dede:channel}
{/dede:channel}

代码解释:

  1. 最外层 {dede:channel typeid='5'}: 获取ID为 5 的一级栏目下的所有直接子栏目(即二级栏目)。
  2. 中间层 {dede:channel typeid='10'}: 在上面的循环中,获取ID为 10 的二级栏目下的所有直接子栏目(即三级栏目)。
  3. 最内层 {dede:channel typeid='25'}: 在上面的循环中,获取ID为 25 的三级栏目信息,这里我们只取一个,所以它会循环一次。[field:typename/] 就是我们要的三级栏目名。

注意:这种方法硬编码了栏目ID,如果栏目结构发生变化,就需要手动修改模板,适用于栏目结构非常固定的情况。


在首页调用所有三级栏目列表

如果你想首页上展示网站中所有的三级栏目及其链接,可以使用更复杂的嵌套循环。

<h2>所有三级栏目列表:</h2>
<ul>
    {dede:channel type='top' typeid='0'}
        <!-- 循环一级栏目 -->
        <li>
            [field:typename/]
            <ul>
                {dede:channel type='son' typeid='[field:id/]'}
                    <!-- 循环当前一级栏目下的二级栏目 -->
                    <li>
                        [field:typename/]
                        <ul>
                            {dede:channel type='son' typeid='[field:id/]'}
                                <!-- 循环当前二级栏目下的三级栏目 -->
                                <li><a href="[field:typelink/]">[field:typename/]</a></li>
                            {/dede:channel}
                        </ul>
                    </li>
                {/dede:channel}
            </ul>
        </li>
    {/dede:channel}
</ul>

代码解释:

  1. {dede:channel type='top'}: 获取所有顶级栏目(一级栏目)。
  2. 对于每一个一级栏目,我们再次使用 {dede:channel type='son' typeid='[field:id/]'} 来获取它的直接子栏目(二级栏目)。
  3. 对于每一个二级栏目,我们第三次使用 {dede:channel type='son' typeid='[field:id/]'} 来获取它的直接子栏目(三级栏目)。
  4. 在最内层循环中,我们输出了三级栏目的名称和链接。

这种方法会生成一个完整的三级栏目树状菜单。


总结与推荐

方法 适用场景 优点 缺点
方法一 (自定义函数) 列表页、内容页调用当前栏目的路径 最灵活、最常用,能动态获取当前栏目的完整路径。 需要修改 extend.func.php 文件。
方法二 (嵌套调用) 首页调用固定的三级栏目名 代码直观,无需自定义函数。 硬编码ID,不灵活,栏目结构变动后需修改模板。
方法三 (嵌套循环) 首页调用所有三级栏目列表 功能强大,可生成完整的栏目树。 代码较复杂,如果栏目层级不确定(比如有四级),会更复杂。

对于绝大多数情况,方法一是最佳选择,它既强大又灵活,是织梦开发中处理多级栏目路径的“标准答案”。

-- 展开阅读全文 --
头像
数据库上传到织梦要怎么操作?
« 上一篇 04-16
C语言如何调用Mplayer播放音频视频?
下一篇 » 04-16
取消
微信二维码
支付宝二维码