两者都是国内非常流行的PHP开源CMS系统,虽然底层逻辑和设计理念不同,但都采用了模板与程序分离的架构,理解它们的标签系统是进行二次开发和模板制作的关键。

帝国cms与织梦cms的模板标签
(图片来源网络,侵删)

核心思想对比

在深入具体标签前,先理解它们的核心差异,这能帮助你快速上手:

特性 帝国CMS 织梦CMS
标签哲学 函数式:标签本质上是PHP函数的封装,更像是在调用程序接口。 标签式:标签更接近一个完整的、自包含的语言块,功能强大,结构清晰。
灵活性 相对灵活:可以直接在模板中嵌入少量PHP代码(<?php ... ?>),对有PHP基础的开发者更友好。 相对封闭:官方不推荐在模板中写PHP,强调通过标签和底层函数来实现,安全性更高。
学习曲线 对于熟悉PHP的开发者来说,入门快,对于纯前端,需要理解函数参数。 标签语法更规范、统一,初学者更容易记住和使用。
适用场景 对灵活性要求高,需要快速调用各种数据接口的场景。 展示、SEO优化,以及标签化、模块化开发的场景。

帝国CMS 模板标签

帝国CMS的标签通常以 <?php 开头,以 ?> 内部调用 e 函数或直接使用PHP函数。

信息调用标签(最常用)

这是列表页、首页调用文章的核心。

基本语法: <?php $ecms_bq_sql=sys_ReturnEcmsLoopBq("查询条件"); $bqno=0; while($bqr=$empire->fetch($ecms_bq_sql)) { $bqsr=$empire->fetch1("select * from {$dbtbpre}enewsuser where userid='$bqr[userid]'"); $bqno++; ?> ** [!--class.title--] (栏目名) [!--bq.title--] (文章标题) [!--bq.titleurl--] (文章链接) [!--bq.smalltext--] (文章简介) [!--bq.newstime--] (发布时间) [!--bq classname--] (栏目名) [!--bq.userid--] (发布者ID) [!--bq.username--] (发布者名)

帝国cms与织梦cms的模板标签
(图片来源网络,侵删)

示例:调用最新10条资讯

<ul>
<?php
$ecms_bq_sql = sys_ReturnEcmsLoopBq("select * from [!db.pre!]ecms_news order by newstime desc limit 10");
$bqno = 0;
while($bqr = $empire->fetch($ecms_bq_sql)) {
    $bqno++;
?>
    <li>
        <a href="[!--bq.titleurl--]">[!--bq.title--]</a>
        <span>[!--bq.newstime--]</span>
    </li>
<?php
} // 结束while循环
?>
</ul>

常用查询条件说明:

  • select * from [!db.pre!]ecms_news:从新闻数据表查询。
  • order by newstime desc:按发布时间倒序。
  • limit 10:限制输出10条。
  • where classid in (1,2,3):指定栏目ID。
  • where title like '%关键词%'包含关键词。

栏目导航标签

父栏目循环:

<?php
$ecms_bq_sql = sys_ReturnEcmsLoopBq("select * from [!db.pre!]enewsclass where bclassid=0 order by myorder");
while($bqr = $empire->fetch($ecms_bq_sql)) {
?>
    <a href="[!--bq.classurl--]">[!--bq.classname--]</a>
    <!-- 调用子栏目 -->
    <?php
    $s_ecms_bq_sql = sys_ReturnEcmsLoopBq("select * from [!db.pre!]enewsclass where bclassid={$bqr[classid]} order by myorder");
    while($s_bqr = $empire->fetch($s_ecms_bq_sql)) {
    ?>
        <a href="[!--s_bqr.classurl--]">[!--s_bqr.classname--]</a>
    <?php } ?>
<?php } ?>

变量与系统变量

  • 全局变量$GLOBALS$public_r
    • $GLOBALS[newsurl]:网站首页地址
    • $public_r[newsurl]:同上
  • 页面变量
    • : <?=$GLOBALS[navinfor]['title']?>
    • 栏目名: <?=$GLOBALS[navclassid]?'栏目名':''?>

织梦CMS 模板标签

织梦的标签结构化更强,以 {dede:} 开头,以

信息调用标签(最常用)

基本语法: {dede:arclist 标签属性1='值1' 标签属性2='值2'} ... {/dede:arclist}

常用标签属性:

  • typeid: 栏目ID,多个用逗号隔开。
  • row: 调用条数,len`: 标题长度。
  • infolen: 内容摘要长度。
  • orderby: 排序方式,如 click (点击量), pubdate (发布时间), id (ID)。
  • orderway: 排序方式,desc (降序), asc (升序)。

字段说明(在标签内使用):

  • field.title: 文章标题
  • field.titleurl: 文章链接
  • field.description: 文章摘要
  • field.pubdate: 发布时间 (时间戳)
  • field.click: 点击量
  • field.typeid: 栏目ID
  • field.typename: 栏目名

示例:调用最新10条资讯

<ul>
    {dede:arclist typeid='1' row='10' titlelen='30' orderby='pubdate' orderway='desc'}
    <li>
        <a href="[field:titleurl/]" title="[field:title/]">[field:title/]</a>
        <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
    </li>
    {/dede:arclist}
</ul>

注意:织梦的时间戳通常需要用 function 进行格式化,如 MyDate('Y-m-d', @me)

栏目导航标签

一级栏目循环:

{dede:channel type='top' row='8'}
    <a href="[field:typelink/]">[field:typename/]</a>
{/dede:channel}

带子栏目的二级菜单:

{dede:channelartlist typeid='top'}
    <li>
        <a href="{dede:field name='typeurl'/}">{dede:field name='typename'/}</a>
        <ul>
            {dede:channel type='son' noself='yes'}
                <li><a href="[field:typelink/]">[field:typename/]</a></li>
            {/dede:channel}
        </ul>
    </li>
{/dede:channelartlist}

变量与系统变量

  • 全局变量:通过 global 标签获取。
    • {dede:global.cfg_webname/}:网站名称
    • {dede:global.cfg_weburl/}:网站首页地址
  • 页面变量页模板中直接使用。
    • : {dede:field.title/}
    • 栏目名: {dede:field.typename/}
    • : {dede:field.body/}

其他常用标签

  • 分页标签{dede:pagelist listsize='4' listitem='info,index,end,pre,next,pageno'}/}
  • 调用友情链接{dede:flink row='24' linktype='image'/}
  • 调用指定广告位{dede:myad name='广告位标识'/}

对比总结与选择建议

功能点 帝国CMS 写法 织梦CMS 写法 特点对比
调用文章列表 <?php $ecms_bq_sql=...; while($bqr=...) { ... } ?> {dede:arclist typeid='' row='' ...} ... {/dede:arclist} 帝国:PHP循环,灵活但代码量大。
织梦:单标签,简洁易读。
获取文章标题 [!--bq.title--] [field:title/] 织梦的 field: 前缀更明确。
获取文章链接 [!--bq.titleurl--] [field:titleurl/] 功能一致,形式不同。
获取栏目列表 sys_ReturnEcmsLoopBq("select... from enewsclass") {dede:channel type='top' ...} ... {/dede:channel} 帝国:需要写SQL,灵活性高。
织梦:专用标签,安全且方便。
获取网站名称 <?=$GLOBALS[newsurl]?> {dede:global.cfg_webname/} 织梦的变量系统更统一和规范。
时间格式化 <?=date('Y-m-d', $bqr[newstime])?> [field:pubdate function="MyDate('Y-m-d',@me)"/] 织梦通过 function 属性调用底层函数,不破坏模板结构。

如何选择?

  • 选择帝国CMS,如果你:

    • 是一名PHP开发者,习惯于用代码思维解决问题。
    • 项目有复杂的数据查询需求,需要直接操作SQL。
    • 需要极高的模板灵活性,不排斥在模板中写少量PHP。
    • 追求极致的性能,因为其标签开销极小。
  • 选择织梦CMS,如果你:

    • 是一名前端或网页制作者,希望模板代码干净、易维护。
    • 展示为主,如企业官网、新闻门户、博客等。
    • 非常注重SEO,织梦的标签系统对SEO非常友好。
    • 希望团队协作时,模板和程序分离得更彻底,降低安全风险。

两者都是非常优秀的CMS系统,标签系统的差异反映了它们不同的设计哲学:帝国CMS更偏向“程序工具”,而织梦CMS更偏向“内容框架”,根据你的技术背景和项目需求来选择最合适的即可。