dede tag标签html如何正确调用与显示?

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

DedeCMS 的标签系统非常强大,是其灵活性的核心,它允许你在不修改 PHP 核心代码的情况下,通过在 HTML 模板中插入特定的标签来动态生成内容。

dede tag标签html
(图片来源网络,侵删)

核心概念:标签、模板、系统变量

  1. 形如 {dede:xxx} 的代码块,是 DedeCMS 的指令,它会告诉系统在页面生成时,执行某个操作(如查询数据库、循环输出内容等),并将结果替换掉标签本身。
  2. 模板.htm.html 文件,是你网站页面的静态框架,里面包含了 HTML 结构、CSS 样式,以及嵌入其中的 DedeCMS 标签。
  3. 系统变量:如 {dede:field.name/}{dede:field.seotitle/} 等,用于输出当前文档(文章、栏目等)的某个特定字段值。

常用标签详解及 HTML 模板示例

下面我们以一个常见的“文章列表页”为例,展示如何使用标签来构建 HTML 结构。

假设我们要实现一个文章列表,每篇文章包含标题、发布时间、点击量和摘要。

循环标签:{dede:arclist}

这是最最常用的标签,用于在指定栏目或条件下循环输出文章列表。

基本语法:

dede tag标签html
(图片来源网络,侵删)
{dede:arclist typeid='' row='' titlelen='' orderby=''}
    <!-- 循环体,这里的代码会对每篇文章执行一次 -->
    <li>
        <a href="[field:arcurl/]">[field:title/]</a>
        <span>[field:pubdate function="MyDate('Y-m-d', @me)"/]</span>
    </li>
{/dede:arclist}

常用属性:

属性名 作用 示例
typeid 指定栏目 ID,只显示该栏目下的文章,多个 ID 用逗号隔开。 typeid='5,6,7'
row 返回的文章数量。 row='10'
orderby 排序方式,常用值:pubdate (发布时间)、hot (点击量)、click (同 hot)、id (文章 ID)。 orderby='hot'
channelid 指定频道模型 ID,默认为 1 (文章)。 channelid='1'
limit 限制起始和结束。'start,end' limit='0,5' (从第 0 篇开始,取 5 篇)

字段标签:{field:xxx}

{dede:arclist} 的循环体内部,使用 {field:xxx/} 来输出当前文章的各个字段值。

常用字段:

字段名 说明 示例
[field:title/] <a href="[field:arcurl/]">[field:title/]</a>
[field:arcurl/] 文章链接。 <a href="[field:arcurl/]">查看详情</a>
[field:pubdate/] 发布时间,格式为 Unix 时间戳,通常需要配合 function 进行格式化。 [field:pubdate function="MyDate('Y-m-d', @me)"/]
[field:click/] 文章点击量。 <span>阅读:[field:click/]</span>
[field:shorttitle/] [field:shorttitle/]
[field:description/] <p>[field:description/]</p>
[field:litpic/] 文章缩略图。 <img src="[field:litpic/]" alt="[field:title/]">
[field:textlink/] 带链接的标题(<a href="...">标题</a>)。 [field:textlink/]

实战:构建一个完整的文章列表 HTML 模板

下面是一个完整的列表页 list_article.htm 模板示例,它结合了 HTML 结构、CSS 样式和 DedeCMS 标签。

dede tag标签html
(图片来源网络,侵删)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">{dede:field.title/} - {dede:global.cfg_webname/}</title>
    <meta name="keywords" content="{dede:field.keywords/}" />
    <meta name="description" content="{dede:field.description function='html2text(@me)'/}" />
    <style>
        /* 一些简单的样式 */
        body { font-family: Arial, sans-serif; line-height: 1.6; }
        .container { width: 80%; margin: 20px auto; }
        .article-list { list-style: none; padding: 0; }
        .article-list li { border-bottom: 1px solid #ccc; padding: 15px 0; }
        .article-list li:last-child { border-bottom: none; }
        .article-title { font-size: 18px; font-weight: bold; }
        .article-title a { color: #333; text-decoration: none; }
        .article-title a:hover { color: #0066cc; }
        .article-meta { font-size: 12px; color: #999; margin-top: 5px; }
        .article-summary { font-size: 14px; color: #666; margin-top: 10px; }
    </style>
</head>
<body>
    <div class="container">
        <h1>{dede:field.title/}</h1>
        <p>当前位置:{dede:field.position/}</p>
        <ul class="article-list">
            <!-- 
                arclist 标签开始:
                typeid='': 留空表示显示当前栏目及其所有子栏目的文章。
                row='10': 显示 10 篇文章。
                orderby='pubdate': 按发布时间倒序排列。
            -->
            {dede:arclist typeid='' row='10' orderby='pubdate'}
            <li>
                <div class="article-title">
                    <a href="[field:arcurl/]">[field:title/]</a>
                </div>
                <div class="article-meta">
                    发布时间:[field:pubdate function="MyDate('Y-m-d H:i', @me)"/] &nbsp;|&nbsp; 点击量:[field:click/]
                </div>
                <div class="article-summary">
                    [field:description function='cn_substr(@me, 100)'/]... 
                    <!-- 如果摘要为空,则截取正文内容 -->
                    <a href="[field:arcurl/]">[field:array runphp='yes']if(@me['description']=='')@me='阅读全文';else @me='查看更多';[/field:array]</a>
                </div>
            </li>
            {/dede:arclist}
        </ul>
        <!-- 
            分页标签 
            这会自动生成分页链接,如:首页 上一页 1 2 3 4 5 下一页 末页
        -->
        <div class="pagination">
            {dede:pagelist listsize='5' listitem='index,pre,next,end,option'}
        </div>
    </div>
</body>
</html>

高级标签与技巧

条件判断:{dede:if} / {dede:else}

用于根据条件输出不同的 HTML 结构,只有当文章有缩略图时才显示 <img>

{dede:arclist row='5'}
    <li>
        {dede:if isset([field:litpic/]) && ([field:litpic/] != '')}
            <img src="[field:litpic/]" alt="[field:title/]" style="width:100px; float:left; margin-right:10px;">
        {/dede:if}
        <a href="[field:arcurl/]">[field:title/]</a>
        <p>[field:description/]</p>
    </li>
{/dede:arclist}

注意{dede:if} 的语法比较严格,isset() 函数和 && 逻辑与的写法需要符合 PHP 规则。

自定义函数

在字段标签中使用 function 属性调用 PHP 函数来处理数据,这在上面已经展示过。

[field:pubdate function="MyDate('Y-m-d', @me)"/]
  • MyDate 是 DedeCMS 内置的日期格式化函数。
  • @me 代表当前字段的原始值。

你也可以在系统里自定义函数,然后在标签中调用。

交叉栏目标签:{dede:channel}

用于输出栏目列表。

<!-- 输出顶级栏目 -->
{dede:channel type='top'}
    <li><a href="[field:typelink/]">[field:typename/]</a></li>
{/dede:channel}
<!-- 输出当前栏目的子栏目 -->
{dede:channel type='son' noself='yes'}
    <li><a href="[field:typelink/]">[field:typename/]</a></li>
{/dede:channel}

标签的调试与问题排查

当标签不生效或输出异常时,可以按以下步骤排查:

  1. 检查标签拼写:确保标签名称、属性名拼写正确,如 {dede:arclist} 而不是 {dede:arcList}
  2. 检查标签闭合:循环标签(如 arclist, channel)必须成对出现,{dede:xxx}{/dede:xxx}
  3. 检查属性值:属性值最好用单引号 或双引号 括起来,尤其是在值中包含空格或特殊字符时。
  4. 清空缓存:这是最常见的问题!修改模板后,必须进入 DedeCMS 后台的 “生成” -> “HTML更新”“更新缓存” 菜单,重新生成页面才能看到效果。
  5. 检查标签权限:某些标签可能需要特定权限的用户才能使用。
  6. 查看源代码:在浏览器中查看页面源代码,看看标签是否被原样输出了,如果是,说明 DedeCMS 没有解析它,通常是缓存问题或标签语法错误。

掌握 DedeCMS 的标签系统,就是掌握了定制网站内容展示方式的核心技能,关键在于:

  • 理解常用标签arclist, channel, list 等是基石。
  • 熟悉字段调用[field:xxx/ 是填充内容的关键。
  • 结合 HTML/CSS:将标签嵌入到你设计的 HTML 结构中,并用 CSS 美化样式。
  • 善用属性和函数:通过属性和函数让标签更灵活、更强大。

通过不断地练习和查阅官方文档,你会越来越熟练地运用这些标签来构建出功能丰富、样式美观的网站。

-- 展开阅读全文 --
头像
C语言findsecmin函数如何实现?
« 上一篇 01-30
分页为何竖排显示?
下一篇 » 01-30
取消
微信二维码
支付宝二维码