dede模板标签有哪些常用功能与用法?

99ANYc3cd6
预计阅读时长 29 分钟
位置: 首页 DEDE建站 正文

第一部分:核心概念 - DedeCMS 模板是如何工作的?

在开始学习标签之前,你必须理解 DedeCMS 的工作流程,这就像做菜,你需要知道食材(数据)、菜谱(模板)和厨师(程序)是如何协作的。

dede模板标签讲解
(图片来源网络,侵删)
  1. 数据: 你的网站内容,比如文章、商品、图片等,都存储在 MySQL 数据库中,每个内容条目(一篇文章、一个产品)都是一个数据记录。
  2. 模板: 这就是你网站的“骨架”和“皮肤”,它是一个 HTML 文件,里面混合了静态的 HTML/CSS/JavaScript 和动态的 DedeCMS 标签,模板文件通常存放在 /templets/ 目录下。
  3. 这是 DedeCMS 的核心,它们是特殊的指令,告诉 DedeCMS 程序:“请从数据库里取出符合条件的数据,然后按照我指定的格式显示在这里”,当用户访问一个页面时,DedeCMS 程序会解析模板文件,执行标签指令,将动态数据填充到模板中,最终生成一个完整的 HTML 页面发送给用户的浏览器。

模板 + 标签 + 数据 = 最终的网页


第二部分:最核心的几类标签

DedeCMS 的标签非常多,但 90% 的场景都离不开以下几类,我们先从最常用、最重要的开始。

全局标签

这类标签用于获取网站的全局信息,通常不受 {dede:} 包围。

  • {dede:global.cfg_webname/}: 获取网站后台设置的“网站名称”。
  • {dede:global.cfg_weburl/}: 获取网站后台设置的“网站根网址”。
  • {dede:global.cfg_keywords/}: 获取网站关键词。
  • {dede:global.cfg_description/}: 获取网站描述。

示例 (在 head 标签中使用):

dede模板标签讲解
(图片来源网络,侵删)
<head>{dede:global.cfg_webname/} - {dede:field.title/}</title>
    <meta name="keywords" content="{dede:global.cfg_keywords/}" />
    <meta name="description" content="{dede:global.cfg_description/}" />
</head>

文章列表标签

这是网站首页、列表页的“灵魂”,用于循环输出文章列表。

  • {dede:list}: 列表页专用标签,它本身是一个循环开始和结束的标记,必须成对出现。

基本结构:

{dede:list pagesize='10'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
    </li>
{/dede:list}

常用属性:

  • pagesize='10': 每页显示的文章数量,这是最常用的属性。
  • titlelen='30': 标题显示的字符长度,超出部分用省略号代替。
  • infolen='100': description)的显示字符长度。
  • orderby='hot': 排序方式。
    • sortrank (默认): 按发布日期排序。
    • hot: 按点击量排序。
    • pubdate: 按发布时间排序。
    • lastpost: 按最后评论时间排序。
  • orderway='desc': 排序顺序。desc 为降序(从大到小),asc 为升序(从小到大)。

内部字段 (使用 [field:xxx/] 调用):

dede模板标签讲解
(图片来源网络,侵删)
  • [field:title/]: 文章标题。
  • [field:arcurl/]: 文章的完整链接URL。非常重要!
  • [field:pubdate/]: 文章发布时间,格式为 Unix 时间戳。
  • [field:pubdate function="MyDate('Y-m-d', @me)"/]: 对发布时间进行格式化,Y-m-d 是目标格式,@me 代表原始值,这是最常用的写法。
  • [field:description/]:
  • [field:click/]: 文章点击量。
  • [field:litpic/]: 文章的缩略图URL。

第三部分:常用列表标签详解

除了 {dede:list},还有几个功能相似的列表标签,用于不同的场景。

{dede:arclist} - 万能列表标签

{dede:arclist}{dede:list} 更强大、更灵活,可以应用于任何地方,包括首页、列表页,甚至文章内容页。

基本结构:

{dede:arclist titlelen='30' row='10' orderby='pubdate'}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
{/dede:arclist}

{dede:arclist} 的独有属性:

  • typeid: 指定栏目ID,只显示该栏目及其子栏目的文章,这是实现“指定栏目调用”的关键。
  • row='10': 同 pagesize,表示输出多少条记录。
  • channelid: 指定模型ID。channelid='1' 表示调用文章模型。
  • flag='h': 指定特定属性的文章。h代表头条,c代表推荐,p代表图片,s代表幻灯片,可以组合使用,如 flag='hc'

示例:调用“产品展示”栏目下的5条推荐文章

{dede:arclist typeid='5' row='5' flag='c' titlelen='20'}
    <div class="product-item">
        <img src="[field:litpic/]" alt="[field:title/]" />
        <h3><a href="[field:arcurl/]">[field:title/]</a></h3>
    </div>
{/dede:arclist}

{dede:loop} - 自由循环标签

{dede:loop} 是一个“无中生有”的标签,它不依赖于 DedeCMS 的任何数据表,你需要自己指定数据表、查询条件和字段。

基本结构:

{dede:loop table='dede_archives' sort='pubdate' row='10' if=''}
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
    </li>
{/dede:loop}

属性说明:

  • table: 要查询的数据表名,如 dede_archives (文章表)、dede_arctype (栏目表)。
  • sort: 排序字段。
  • row: 循环次数。
  • if: 查询条件 (SQL 的 WHERE 子句)。

示例:直接从文章表里调用10篇最新文章

{dede:loop table='dede_archives' sort='pubdate' row='10'}
    <a href="/plus/view.php?aid=[id]">[title]</a>
{/dede:loop}

注意: 在 loop 标签中,直接使用字段名(如 id, title),而不是 [field:id/]


第四部分:文章内容页标签

页(article_article.htm)的标签用于显示单篇文章的详细信息。

  • {dede:field.title/}: 当前文章的标题。
  • {dede:field.pubdate function="MyDate('Y-m-d H:i:s', @me)"/}: 当前文章的发布时间。
  • {dede:field.source/}: 文章来源。
  • {dede:field.writer/}: 文章作者。
  • {dede:field.click/}: 文章点击量。
  • {dede:field.body/}: 最重要的标签,输出文章的正文内容。
  • {dede:field.description/}:

第五部分:栏目导航标签

用于网站的导航栏,实现栏目循环和当前栏目高亮。

{dede:channel}

基本结构:

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

属性:

  • type='top': 调用顶级栏目,如果改为 type='son',则调用当前栏目的子栏目。
  • row='8': 调用8个栏目。
  • currentstyle='active': 设置当前栏目的样式。'active' 是样式类名。

示例 (带当前栏目高亮的导航):

<ul class="nav">
    {dede:channel type='top' currentstyle="<li class='active'><a href='~typelink~'>~typename~</a></li>"}
        <li><a href="[field:typeurl/]">[field:typename/]</a></li>
    {/dede:channel}
</ul>

currentstyle 的语法: ~typename~ 会被替换为栏目名,~typelink~ 会被替换为栏目链接。


第六部分:分页标签

列表页和文章列表都需要分页。

  • {dede:pagelist listsize='4'/}: 显示分页的页码列表,如 上一页 1 2 3 4 5 下一页
  • {dede:pagebreak/}: 在文章内容中,用于手动分割长文章,生成“下一页”链接。

第七部分:实战演练 - 制作一个首页

让我们用学到的知识来构建一个典型的首页。

index.htm 模板文件示例:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">{dede:global.cfg_webname/}</title>
    <meta name="keywords" content="{dede:global.cfg_keywords/}" />
    <meta name="description" content="{dede:global.cfg_description/}" />
</head>
<body>
    <!-- 顶部导航 -->
    <div class="header">
        <ul class="nav">
            {dede:channel type='top' currentstyle="<li class='active'><a href='~typelink~'>~typename~</a></li>"}
                <li><a href="[field:typeurl/]">[field:typename/]</a></li>
            {/dede:channel}
        </ul>
    </div>
    <!-- 幻灯片区域 (假设用 arclist 调用 flag='p' 的文章) -->
    <div class="slider">
        {dede:arclist flag='p' row='5'}
            <img src="[field:litpic/]" alt="[field:title/]" />
        {/dede:arclist}
    </div>
    <!-- 网站主内容区 - 文章列表 -->
    <div class="main-content">
        <h2>最新文章</h2>
        <ul class="article-list">
            {dede:list pagesize='10'}
                <li>
                    <a href="[field:arcurl/]" title="[field:title/]" target="_blank">[field:title/]</a>
                    <span class="date">[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
                </li>
            {/dede:list}
        </ul>
        <!-- 分页 -->
        <div class="page">
            {dede:pagelist listsize='4'/}
        </div>
    </div>
    <!-- 页脚 -->
    <div class="footer">
        <p>Copyright &copy; {dede:global.cfg_webname/} All Rights Reserved.</p>
    </div>
</body>
</html>

第八部分:进阶技巧与注意事项

  1. 自定义函数: 在 listarclist 中,我们使用了 function="MyDate(...)",你可以在 /include/extend.func.php 文件里编写自己的 PHP 函数,然后在模板中调用,实现更复杂的数据处理。
  2. SQL 查询标签 ({dede:sql}): 当内置标签无法满足需求时,可以直接执行 SQL 语句。
    {dede:sql sql='SELECT * FROM dede_archives ORDER BY click DESC LIMIT 10'}
        <a href="/plus/view.php?aid=[id]">[title]</a>
    {/dede:sql}

    警告: 使用此标签有安全风险,请务必对用户输入进行过滤,不要直接将变量拼接到 SQL 语句中。

  3. 嵌套循环: 你可以在一个循环内部再使用另一个循环,例如调用一个栏目的文章列表,然后每个栏目下面再调用其子栏目的文章。
  4. 缓存机制: DedeCMS 默认会对页面进行缓存以提高性能,在后台修改模板后,可能需要清除缓存才能看到效果。

DedeCMS 的模板标签系统虽然看起来有些“古老”,但它的设计思想非常清晰,通过标签将数据与表现层分离,使得网站维护和内容更新变得非常简单。

  • 记住核心流程: 数据 -> 模板 -> 标签 -> 最终页面。
  • {dede:list}{dede:arclist} 开始: 这两个列表标签是日常开发中使用最频繁的,务必熟练掌握它们的属性和字段调用。
  • 善用官方文档: DedeCMS 自带了一份标签手册,遇到不熟悉的标签可以去查阅。
  • 多看、多练、多模仿: 最好的学习方法就是分析现有的优秀模板,然后自己动手去搭建和修改。

希望这篇详细的讲解能帮助你真正掌握 DedeCMS 模板制作!

-- 展开阅读全文 --
头像
wcsncmp函数如何比较宽字符字符串?
« 上一篇 04-22
dede怎么更改主页
下一篇 » 04-22

相关文章

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

目录[+]