Dedecms V5.6 模板开发全攻略

DedeCMS 的模板系统非常灵活,它使用一套独特的标签语言,将 PHP 逻辑与 HTML 前端代码分离,使得不懂 PHP 的网页设计师也能轻松制作出功能强大的网站。

dedecms教程v5.6模版
(图片来源网络,侵删)

第一部分:基础入门

什么是模板?

模板就是网站的“外衣”或“蓝图”,它定义了网站各个页面(如首页、列表页、内容页)的最终显示样式,DedeCMS 通过解析模板文件,并填充从数据库中获取的数据,最终生成用户看到的 HTML 网页。

模板文件存放位置

在 DedeCMS 安装目录下,模板文件主要存放在 /templets/ 文件夹中,这个文件夹里通常会有几个子文件夹:

  • /templets/default/:这是系统默认的模板文件夹,我们制作新模板时,最好在这里新建一个以您的模板名命名的文件夹,/templets/mynewtemplate/
  • /templets/plus/:存放系统插件(如留言板、友情链接)的模板。
  • /templets/system/:存放系统后台和一些公共组件的模板。

最佳实践:永远不要修改 /templets/default/ 里的默认文件,复制一份出来,在新文件夹里进行修改,这样既安全,也方便未来升级。

模板文件类型

一个完整的网站模板通常包含以下几种核心文件:

dedecms教程v5.6模版
(图片来源网络,侵删)
  • index.htm首页模板
  • list_*.htm列表页模板。 代表栏目ID,list_1.htm 是 ID 为 1 的栏目列表页。
  • article_*.htm页模板。 代表栏目ID,article_1.htm 是 ID 为 1 的栏目下的文章内容页。
  • head.htm头部公共模板,通常包含网站 logo、主导航栏等。
  • footer.htm底部公共模板,通常包含版权信息、友情链接等。
  • channel/栏目封面模板,当栏目设置为“频道封面”时,会调用此目录下的模板。

模板引擎与标签

DedeCMS 使用自己的模板引擎,核心就是 {dede:标签名 属性='值'} 这样的语法。

  • 单标签:用于输出一个值,如 {dede:field.title/}
  • 双标签:用于循环输出内容,如 {dede:arclist}...{/dede:arclist}

第二部分:核心标签详解

这是模板开发的重中之重,理解并熟练使用这些标签,你就能制作出任何你想要的页面。

全局通用标签

这些标签可以在任何模板文件中使用。

    • cfg_webname:网站后台设置的网站名称。
  • 网站路径

    <link href="{dede:global.cfg_cmspath/}/templets/mynewtemplate/style.css" rel="stylesheet" type="text/css" />
    • cfg_cmspath:网站的根目录路径,如 http://www.yoursite.com
  • 栏目导航

    {dede:channel type='top' row='8'}
        <a href="[field:typelink/]">[field:typename/]</a>
    {/dede:channel}
    • type='top':只调用顶级栏目。
    • row='8':调用 8 个栏目。
    • [field:typelink/]:栏目链接。
    • [field:typename/]:栏目名称。
  • 当前位置 (面包屑导航)

    {dede:field name='position'/}

    会自动生成类似 “首页 > 栏目 > 子栏目” 的导航链。

首页常用标签

  • 调用最新文章列表

    {dede:arclist titlelen='30' row='10' typeid='1'}
        <li>
            <a href="[field:arcurl/]">[field:title/]</a>
            <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
        </li>
    {/dede:arclist}
    • titlelen='30'长度限制为 30 个字符。
    • row='10':显示 10 条文章。
    • typeid='1':指定调用 ID 为 1 的栏目下的文章,不写则调用所有。
    • [field:arcurl/]:文章链接。
    • [field:title/]
    • [field:pubdate/]:发布日期。function="MyDate('Y-m-d',@me)" 是一个自定义函数,用于格式化日期。
  • 调用推荐/热门/头条文章 只需在 arclist 标签中增加属性即可:

    • flag='c':调用推荐文章。
    • flag='h':调用热门文章。
    • flag='a':调用头条文章。
    • 可以组合使用,如 flag='ch'
  • 调用友情链接

    {dede:flink row='24' type='text'}
        [field:link/]
    {/dede:flink}
    • type='text':文字链接。'image' 为图片链接。

列表页常用标签

  • 当前栏目名称

    {dede:field.typename/}
  • 列表文章循环

    {dede:list pagesize='20'}
        <li>
            <a href="[field:arcurl/]">[field:title/]</a>
            <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
        </li>
    {/dede:list}
    • pagesize='20':每页显示 20 条文章。
    • {dede:list} 是列表页专用的循环标签。
  • 分页代码

    <div class="dede_pages">
        <ul>
            {dede:pagelist listsize='4' listitem='info,index,end,pre,next,pageno'}
            </ul>
    </div>
    • listsize='4':显示 4 个页码按钮。
    • listitem:定义分页栏显示哪些部分,info(页数信息), index(首页), end(尾页), pre(上一页), next(下一页), pageno(页码)。

内容页常用标签

  • {dede:field.title/}
  • {dede:field.body/}
  • 发布时间、来源、作者

    发布时间:{dede:field.pubdate function="MyDate('Y-m-d H:i:s',@me)"/} &nbsp;
    来源:{dede:field.source/} &nbsp;
    作者:{dede:field.writer/}
  • 上下篇文章导航

    <div class="prenext">
        <p>上一篇:{dede:prenext get='pre'/}</p>
        <p>下一篇:{dede:prenext get='next'/}</p>
    </div>

第三部分:高级技巧与实战

模板继承与公共头尾

为了提高开发效率和代码复用性,DedeCMS V5.7 之后引入了模板继承,但 V5.6 更多是手动引入。

  • 手动引入 (在 V5.6 中最常用)index.htm, list_*.htm, article_*.htm 等文件的开头和结尾分别引入 head.htmfooter.htm

    <!-- index.htm -->
    {dede:include filename="head.htm"/}
    <!-- 这里是首页的主要内容 -->
    {dede:include filename="footer.htm"/}
    • {dede:include filename="文件名"/} 是引入文件的标签。

自定义函数

页调用文章时,有时需要对内容进行特殊处理,比如截取摘要、去除图片等。

  • 修改 include/helpers/extend.helper.php 文件 这个文件是专门用来存放自定义函数的,你想添加一个函数来截取 200 字符的摘要:
    // 在 extend.helper.php 中添加如下代码
    if ( ! function_exists('SubContent'))
    {
        function SubContent($string, $start=0, $length=200, $charset="utf-8", $dot="...")
        {
            $content = cn_substr($string, $length, $charset);
            return $content;
        }
    }
  • 在模板中调用
    {dede:field.body function='SubContent(@me, 0, 200)'/}

条件判断 if

if 标签用于根据条件显示不同的内容,非常实用。

  • 语法
    {dede:if condition='表达式'}
        <!-- 成立时显示的内容 -->
    {else}
        <!-- 不成立时显示的内容 -->
    {/dede:if}
  • 示例:判断是否有缩略图
    {dede:if condition="@me['litpic'] != '/images/defaultpic.gif' && @me['litpic'] != ''"}
        <img src="{dede:field name='litpic'/}" alt="{dede:field.title/}" />
    {else}
        <img src="/images/no_thumb.jpg" alt="暂无缩略图" />
    {/dede:if}
    • @me 在这里代表当前正在循环的单条记录(如 arclist 中的某篇文章)。

修改文章内容页的发布信息

页发布信息是固定的,但你可以通过修改模板来让它更灵活,打开 article_*.htm,找到类似这样的代码:

<div class="info">
    <span>发布时间:{dede:field.pubdate function="MyDate('Y-m-d',@me)"/}</span>
    <span>来源:{dede:field.source/}</span>
    <span>作者:{dede:field.writer/}</span>
    <span>点击:<script src="{dede:field name='phpurl'/}/count.php?view=yes&aid={dede:field.aid/}&mid={dede:field.mid/}" type='text/javascript' language="javascript"></script>次</span>
</div>

你可以直接在这里修改 HTML 结构和标签,或者使用 if 标签来判断某些字段是否为空再显示。


第四部分:制作一个简单模板的完整流程

  1. 准备素材:准备好 logo、背景图片、CSS 样式表、JavaScript 文件等。
  2. 创建模板文件夹:在 /templets/ 下创建一个新文件夹,mydemo
  3. 复制并修改核心文件
    • /templets/default/ 下的 index.htm, head.htm, footer.htm 复制到你的 /templets/mydemo/ 文件夹中。
    • 打开 head.htm,修改 logo 的链接和图片路径,修改 CSS 和 JS 的引用路径(将 /templets/default/ 改为 /templets/mydemo/)。
    • 打开 footer.htm,修改版权信息等。
  4. 设计首页布局:打开 index.htm,使用 HTML + CSS 搭建首页的整体框架(header, main, footer)。
  5. 填充标签:在框架的相应位置填入 DedeCMS 标签。
    • <title> 中填入 {dede:global.cfg_webname/}
    • 在主导航栏填入 {dede:channel type='top' row='8'}...{/dede:channel}
    • 区填入 {dede:arclist row='10'}...{/dede:arclist}
    • 在页脚填入 {dede:include filename='footer.htm'/}
  6. 后台设置
    • 登录 DedeCMS 后台。
    • 进入 【系统】-> 【系统基本参数】-> 【核心设置】,将“模板默认目录”设置为你的模板文件夹名 mydemo
    • 进入 【系统】-> 【系统基本参数】-> 【站点设置】,确保网站名称等信息正确。
  7. 生成网站
    • 进入 【生成】-> 【一键生成网站】**,点击“开始生成”。
    • 系统会根据你的模板和数据库内容,静态化生成所有页面。

第五部分:常见问题与资源

  • Q: 为什么我的首页不显示内容?

    A: 1. 检查标签是否写错,2. 检查后台对应栏目是否设置了“生成HTML”,3. 检查数据库中是否有文章,4. 确保已经执行了“生成网站”操作。

  • Q: 如何修改列表页的分页样式?

    • A: 分页的样式由 CSS 控制,找到你的模板文件夹下的 CSS 文件,根据分页代码的 HTML 结构(通常是 .dede_pages 里的 ulli)编写相应的 CSS 样式即可。
  • Q: 模板标签和变量有什么区别?

    • A: 是具有特定功能的指令,如 {dede:arclist},它会执行一段代码并返回结果。变量通常是标签内部用来获取具体值的属性,如 arclist 标签里的 row 属性,或者 field 标签里的 title

学习资源推荐:

  • 官方论坛DedeCMS 官方论坛 是解决问题的最佳去处,有大量高手和教程。
  • 模板下载织梦模板堂 等网站提供大量免费和付费的模板,可以下载下来研究学习。
  • 标签手册:在后台的 【开发】-> 【模板标签手册】** 中有最权威的标签说明。

希望这份详尽的教程能帮助您顺利掌握 DedeCMS V5.6 的模板开发,祝您学习愉快!