使用栏目导航标签 (e:loop)

这是最简单、最直接的方法,适用于在列表页、内容页等需要显示当前栏目或指定栏目信息的场景。

帝国cms标签模板怎么调用栏目描述
(图片来源网络,侵删)

核心函数

GetClassUrl($classid) - 获取栏目的链接。 classname - 栏目名称。 classid - 栏目ID。 bclassname - 父栏目名称。 intro - 栏目描述

语法格式

[e:loop={"select * from [!db.pre!]enewsclass where classid='$GLOBALS[navclassid]' order by myorder",0,24,0}]
    <h2>栏目名称:<?=$bqr[classname]?></h2>
    <p>栏目描述:<?=$bqr[intro]?></p>
    <p>栏目链接:<?=$bqr[classurl]?></p>
[/e:loop]

参数解释:

  • select * from [!db.pre!]enewsclass where classid='$GLOBALS[navclassid]':这是SQL查询语句。
    • [!db.pre!]enewsclass:是栏目数据表,[!db.pre!]会自动替换为你的数据库表前缀。
    • classid='$GLOBALS[navclassid]':这是关键!$GLOBALS[navclassid]是一个全局变量,自动代表当前页面的栏目ID,所以这个标签会自动获取当前栏目的信息。
  • 0,24,0:这三个参数分别是显示条数,模板ID,只显示有标题图片,这里我们只需要获取一条当前栏目的信息,所以显示条数设为0或1都可以,设为0表示按SQL查询结果来(这里只有一条),模板ID和标题图片限制对我们获取描述信息没有影响,可以设为0。

实际应用场景示例

场景1:在列表页(如 list.php)调用当前栏目描述

这是最常见的用法,通常放在列表页的顶部,用于告诉用户这个栏目是关于什么的。

示例代码:

帝国cms标签模板怎么调用栏目描述
(图片来源网络,侵删)
<!-- 在列表页模板 list.php 中 -->
<div class="class-description">
    <h1>[!--classname--]</h1> <!-- [!--classname--] 是系统内置标签,更简单,但无法获取描述 -->
    <p class="intro">[!---class.intro--]</p> <!-- 这是最简洁的系统标签,推荐使用 -->
</div>
<!-- 或者使用 e:loop 标签,功能更强大 -->
[e:loop={"select intro, classname from [!db.pre!]enewsclass where classid='$GLOBALS[navclassid]' limit 1",0,24,0}]
    <div class="class-description">
        <h2><?=$bqr[classname]?></h2>
        <p class="intro"><?=$bqr[intro]?></p>
    </div>
[/e:loop]
<!-- 循环开始输出列表内容 -->
[ecmsinfo]....[/ecmsinfo]

小提示: 帝国CMS其实为当前页面提供了一些更简单的系统变量,[!---class.intro--] 就是专门用来调用当前栏目描述的,如果你的需求只是简单显示,直接用这个最方便。

场景2:在内容页(如 show.php)调用当前栏目描述

页同样可以通过 $GLOBALS[navclassid] 获取它所属栏目的描述。

示例代码:

<!-- 在内容页模板 show.php 中 -->
<div class="breadcrumb">
    您的位置:<a href="/">首页</a> > <a href="[!--classurl--]">[!--classname--]</a> > [!--title--]
</div>
<!-- 调用当前栏目(即文章所属栏目)的描述 -->
[e:loop={"select intro from [!db.pre!]enewsclass where classid='$GLOBALS[navclassid]' limit 1",0,24,0}]
    <div class="class-description">
        <p>栏目简介:<?=$bqr[intro]?></p>
    </div>
[/e:loop]
<!-- 文章标题和内容 -->
<h1>[!--title--]</h1>
[!--newstime--] [!--author--]
[!--text--]

场景3:调用指定栏目的描述

如果你想调用不是当前栏目的某个特定栏目的描述,你需要知道那个栏目的 classid,然后在SQL语句中指定它。

帝国cms标签模板怎么调用栏目描述
(图片来源网络,侵删)

示例代码: 假设我们要调用栏目ID为 5 的栏目描述,通常用于网站首页的某个板块。

<div class="about-us">
    <h2>关于我们</h2>
    [e:loop={"select classname, intro from [!db.pre!]enewsclass where classid='5' limit 1",0,24,0}]
        <p><?=$bqr[intro]?></p>
    [/e:loop]
</div>

使用灵动标签 (sql)

灵动标签 ([!db.pre!]) 功能更强大,可以执行更复杂的SQL查询,并且有更灵活的循环输出方式,调用栏目描述和 e:loop 类似,但语法略有不同。

核心语法

[!------sql查询开始------]
    select 字段名 from [!db.pre!]enewsclass where 条件
[!------sql查询结束------]

场景示例:在首页调用指定栏目描述

假设我们要调用栏目ID为 10 的“公司动态”栏目的描述。

示例代码:

<div class="company-news">
    <h2><a href="[!--news.url--]e/public/ClassUrl/?classid=10">公司动态</a></h2>
    [!------sql查询开始------]
        select intro from [!db.pre!]enewsclass where classid='10'
    [!------sql查询结束------]
    <div class="news-intro">
        <?=$r[intro]?>
    </div>
</div>

e:loop 的区别:

  • 数据变量e:loop 使用 <?=$bqr[字段名]?>,而灵动标签使用 <?=$r[字段名]?>
  • 循环:灵动标签默认只输出查询到的第一条记录,如果有多条记录(比如查询所有顶级栏目),需要用 [loop]...[/loop] 来包裹。
  • 灵活性:灵动标签可以轻松结合其他函数,比如用 esub 截取描述字数。

进阶示例:截取描述字数 如果栏目描述很长,我们可能只想显示前100个字符。

<div class="short-intro">
    [!------sql查询开始------]
        select intro from [!db.pre!]enewsclass where classid='10'
    [!------sql查询结束------]
    <p><?=esub($r[intro], 100, '...')?></p> <!-- 截取100个字符,末尾加... -->
</div>

总结与对比

特性 栏目导航标签 (e:loop) 灵动标签 (sql)
主要用途 调用与当前页面相关的栏目信息 执行任意复杂的SQL查询,获取各种数据
调用当前栏目 非常方便,直接使用 $GLOBALS[navclassid] 方便,同样使用 $GLOBALS[navclassid]
调用指定栏目 需要写完整SQL,指定 classid 需要写完整SQL,指定 classid
数据变量 <?=$bqr[字段名]?> <?=$r[字段名]?>
循环输出 内置循环功能,适合列表 需要手动用 [loop]...[/loop] 实现循环
灵活性 较好,主要用于栏目相关 极高,可以结合各种PHP函数
推荐场景 列表页、内容页调用当前/指定栏目信息 首页调用多个栏目信息、复杂的数据统计、与其他表关联查询

给你的建议:

  1. 在列表页和内容页,优先使用 e:loop 或者更简单的系统标签 [!---class.intro--] 来调用当前栏目描述,因为它最直接、不易出错。
  2. 在首页,如果只是调用一两个指定栏目的描述,e:loopsql 灵动标签都可以,如果逻辑更复杂,或者需要循环输出多个栏目的信息,灵动标签会更显优势。
  3. $GLOBALS[navclassid] 这个神奇的变量,它是你在模板中获取当前栏目ID的关键。