织梦 当前一级栏目

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

“当前一级栏目”指的是当前所在的栏目(无论它本身是几级栏目)的顶级父栏目

织梦 当前一级栏目
(图片来源网络,侵删)

下面我将从几个方面详细解释如何获取和使用“当前一级栏目”的信息。


获取当前一级栏目的核心方法

在织梦的模板文件(.htm)中,我们主要通过PHP代码和系统内置的channel标签来实现。

使用 {dede:field name='typeid'} 获取当前栏目ID,然后通过PHP查询

这是最常用也是最灵活的方法,可以获取当前一级栏目的任何信息。

步骤:

织梦 当前一级栏目
(图片来源网络,侵删)
  1. 在模板文件中,首先获取当前页面的栏目ID。
  2. 使用PHP的GetTopid()函数(这是一个织梦自定义函数)来获取该ID对应的一级栏目ID。
  3. 使用GetOneType()函数获取该一级栏目的完整信息数组。
  4. 通过数组索引(如['typename'], ['typedir']等)来调用你需要的字段。

代码示例:

{dede:arclist typeid='topid' titlelen='30'}
    <!-- 这里可以列出当前一级栏目下的所有子栏目或文章 -->
    <li><a href="[field:arcurl/]">[field:title/]</a></li>
{/dede:arclist}
<!-- 方法一:直接在模板中嵌入PHP代码 -->
{dede:php}
    // 1. 获取当前页面的栏目ID
    $typeid = $GLOBALS['typeid'];
    // 2. 如果typeid存在(说明在栏目页或内容页)
    if ($typeid) {
        // 3. 使用GetTopid()函数获取顶级栏目ID
        $topid = GetTopid($typeid);
        // 4. 使用GetOneType()函数获取顶级栏目的完整信息
        $topType = GetOneType($topid);
        // 5. 现在你可以使用 $topType 数组中的任何字段了
        $topTypeName = $topType['typename']; // 顶级栏目名称
        $topTypeDir = $topType['typedir'];   // 顶级栏目目录
        $topTypeDescription = $topType['description']; // 顶级栏目描述
        // 输出结果(或用于其他逻辑)
        echo "<h1>当前一级栏目是:" . $topTypeName . "</h1>";
        echo "<p>目录地址:" . $topTypeDir . "</p>";
    }
{/dede:php}

使用 {dede:channel} 标签获取一级栏目

{dede:channel} 标签主要用于栏目列表,通过设置其属性,可以只显示一级栏目。

1 获取所有一级栏目

如果你想获取网站所有的顶级栏目,可以使用 typeid='0'reid='0'

{dede:channel type='top' typeid='0'}
    <li><a href="[field:typedir/]">[field:typename/]</a></li>
{/dede:channel}
  • type='top':只显示顶级栏目。
  • typeid='0':从顶级栏目开始查询。
  • reid='0':父栏目ID为0的,也就是顶级栏目。

2 高亮显示当前所在的一级栏目

这是“当前一级栏目”最经典的应用场景,结合上面的方法一,我们可以实现高亮。

织梦 当前一级栏目
(图片来源网络,侵删)

思路:

  1. 用方法一获取当前一级栏目的ID ($topid)。
  2. {dede:channel} 循环中,判断循环出来的栏目ID是否等于 $topid,如果相等,则添加高亮样式。

代码示例:

{dede:php}
    // 获取当前一级栏目ID
    $typeid = $GLOBALS['typeid'];
    $current_topid = $typeid ? GetTopid($typeid) : 0;
{/dede:php}
<ul class="nav">
    {dede:channel type='top' typeid='0'}
        <li>
            <a href="[field:typedir/]" 
               [field:id runphp='yes'] 
                   if(@me == $current_topid) echo "class='current'"; 
                   else @me = ""; 
               [/field:id]>
               [field:typename/]
            </a>
        </li>
    {/dede:channel}
</ul>
  • [field:id runphp='yes']...[/field:id]:这是一个强大的技巧,可以在标签运行时执行PHP代码。
  • if(@me == $current_topid):判断当前循环的栏目ID (@me) 是否等于我们获取到的当前一级栏目ID。
  • echo "class='current'":如果相等,就输出 class='current',你可以在CSS中定义 .current 的样式(如加粗、变色等)。

常见应用场景

面包屑导航

面包屑导航通常显示 首页 > 一级栏目 > 二级栏目 > ... > 当前页面

织梦自带的 {dede:position} 标签默认会显示所有层级的栏目,如果我们想让它只显示“首页”和“当前一级栏目”,可以结合上面的方法进行改造。

{dede:php}
    $typeid = $GLOBALS['typeid'];
    if ($typeid) {
        $topid = GetTopid($typeid);
        $topType = GetOneType($topid);
        // 手动构建面包屑
        $breadcrumb = "<a href='/'>首页</a> &raquo; <a href='{$topType['typedir']}'>{$topType['typename']}</a>";
        echo $breadcrumb;
    } else {
        // 如果不在任何栏目下(例如首页),只显示首页
        echo "<a href='/'>首页</a>";
    }
{/dede:php}

获取当前一级栏目的描述或关键词

这个需求常用于SEO优化,将当前一级栏目的描述或关键词作为页面的meta信息。

<head>
    <meta name="description" content="{dede:php}$typeid=$GLOBALS['typeid']; if($typeid){$topid=GetTopid($typeid);$topType=GetOneType($topid);echo $topType['description'];}{/dede:php}" />
    <meta name="keywords" content="{dede:php}$typeid=$GLOBALS['typeid']; if($typeid){$topid=GetTopid($typeid);$topType=GetOneType($topid);echo $topType['keywords'];}{/dede:php}" />
</head>

需求 推荐方法 关键代码/标签
获取当前一级栏目的ID GetTopid() 函数 {dede:php}$topid = GetTopid($GLOBALS['typeid']);{/dede:php}
获取当前一级栏目的信息 GetOneType() 函数 {dede:php}$topType = GetOneType($topid); echo $topType['typename'];{/dede:php}
列出所有一级栏目 {dede:channel} {dede:channel type='top'}...{/dede:channel}
高亮当前一级栏目 结合 GetTopid(){dede:channel}runphp 属性 [field:id runphp='yes']if(@me == $current_topid) echo "class='active'";[/field:id]
自定义面包屑/SEO信息 嵌入PHP代码,手动拼接 使用$topType数组中的字段

对于绝大多数“当前一级栏目”的需求,方法一(GetTopid() + GetOneType())是核心和基础,掌握它就能灵活应对各种复杂场景。

-- 展开阅读全文 --
头像
c语言getblank
« 上一篇 04-20
warning c语言
下一篇 » 04-20

相关文章

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

目录[+]