核心概念:Discuz! 模板是什么?

Discuz! 模板就是一系列 HTML 文件、CSS 样式表、JavaScript 脚本以及一些特殊指令(如模板引擎标签)的集合,它定义了论坛在用户浏览器中显示的外观和布局。

discuz 所有模板介绍
(图片来源网络,侵删)

工作原理:

  1. 前端请求:用户访问论坛的某个页面(如首页、帖子列表)。
  2. PHP 调用:Discuz! 的后端 PHP 程序接收到请求,确定需要显示哪个模板文件。
  3. 模板解析:PHP 引擎加载对应的模板文件,并使用 Discuz! 模板引擎(早期版本,现在已简化)来解析文件中的特殊标签(如 {template header})。
  4. 数据填充:模板引擎将 PHP 程序从数据库中获取的数据(如帖子标题、用户名、内容)填充到模板的相应位置。
  5. 输出 HTML:一个纯静态的 HTML 页面被生成并发送到用户的浏览器。

关键文件结构: 一个典型的 Discuz! 模板目录结构如下:

/source/plugin/模板名称/  <-- 插件型模板(旧版风格)
或
/template/模板名称/      <-- 主题型模板(新版风格,推荐)
├── index.htm              <-- 首页模板
├── forumlist.htm          <-- 版块列表页
├── viewthread.htm         <-- 帖子内容页
├── portal.htm             <-- 门户首页
├── misc.htm               --> 其他页面(如登录、注册)
├── common/                <-- 公共模板文件夹
│   ├── header.htm         <-- 公共头部
│   ├── footer.htm         <-- 公共底部
│   ├── footerjs.htm       <-- 公共底部JS
│   └── ...
├── style/                 <-- 样式文件夹
│   ├── common.css         <-- 公共样式
│   ├── forum.css          <-- 版块相关样式
│   └── ...
└── script/                <-- 脚本文件夹
    ├── common.js          <-- 公共JS
    └── ...

Discuz! 模板的类型和来源

Discuz! 的模板主要分为以下几种类型:

默认模板

  • 介绍:这是 Discuz! 安装时自带的模板,通常命名为 defaulttide(新版默认主题)。
  • 特点
    • 功能最全面,与所有官方功能完美兼容。
    • 代码规范,是学习和二次开发的最佳参考。
    • 设计通常比较朴素,以功能为导向。
  • 用途:适合作为新站点的启动模板,或作为开发新模板的基础。

官方主题

  • 介绍:由 Discuz! 官方团队设计并发布,在官方应用市场可以免费或付费下载。
  • 特点
    • 设计精美,紧跟时代潮流。
    • 经过官方测试,兼容性和稳定性有保障。
    • 通常有专门的支持渠道。
  • 用途:希望快速拥有一个专业、美观外观的站长。

第三方模板

  • 介绍:由个人开发者或设计团队制作,通过各类 Discuz! 资源网站(如 Discuz! 官方应用市场、模板之家等)发布。
  • 特点
    • 风格多样,选择极其丰富,从企业门户到个人博客、游戏社区等应有尽有。
    • 质量参差不齐,需要仔细甄别。
    • 可能存在与官方插件或其他模板不兼容的问题。
    • 部分免费,部分需要付费购买。
  • 用途:寻找特定风格,或需要高度定制化外观的站点。

自定义/二次开发模板

  • 介绍:站长或开发者基于默认模板或第三方模板进行修改,以满足自身特定需求的模板。
  • 特点
    • 独一无二:完全符合站点定位和品牌形象。
    • 高度定制:可以修改任何布局、颜色、功能模块。
    • 技术要求高:需要具备 HTML, CSS, JavaScript, 甚至 PHP 和模板引擎的知识。
  • 用途:品牌论坛、大型门户网站、有特殊功能展示需求的社区。

模板的核心文件详解

理解以下核心文件是掌握 Discuz! 模板定制的关键:

discuz 所有模板介绍
(图片来源网络,侵删)
文件名 作用说明
common/header.htm 页面头部,包含 <head> 标签(网站标题、关键词、描述、CSS/JS 引入)、顶部导航栏、Logo、用户登录信息等,几乎所有页面都会引用它。
common/footer.htm 页面底部,包含页脚版权信息、统计代码、返回顶部按钮等,几乎所有页面都会引用它。
index.htm 论坛首页,展示版块列表、今日发帖/回帖数、热门帖子、推荐主题等核心信息。
forumlist.htm 版块列表页,与 index.htm 类似,但更侧重于版块的层级展示和版块说明。
viewthread.htm ,这是论坛最重要的页面,包含帖子标题、楼层内容、作者信息、回复框、投票、附件列表等。
forumdisplay.htm 版块首页,展示特定版块下的所有帖子列表,包含版块规则、置顶帖、普通帖列表等。
portal.htm 门户首页,如果开启了门户功能,此文件定义门户首页的布局,通常包含文章列表、图片轮播、推荐内容等模块。
style/common.css 公共样式表,定义了整个网站的基础样式,如字体、颜色、链接样式、通用布局类(如 .bm, ..ptm)等。
style/forum.css 版块相关样式表,专门用于版块列表、帖子列表、帖子内容等页面的样式。

模板中的特殊标签(模板引擎指令)

模板文件不仅仅是 HTML,它还包含 Discuz! 模板引擎识别的特殊标签,用于实现动态内容和页面复用。

模板包含

用于引入其他模板文件,实现代码复用。

  • {template common/header}:包含公共头部模板 common/header.htm
  • {template common/footer}:包含公共底部模板 common/footer.htm
  • {subtemplate header}:一种更灵活的包含方式,常用于插件中。

变量输出

用于显示 PHP 传递过来的数据。

  • {$_G[username]}:显示当前登录用户的用户名。
  • {$_G[forum][name]}:显示当前版块的名称。
  • {$_G[setting][sitename]}:显示网站的全局设置名称。

循环

用于遍历数组,如帖子列表、用户列表等。

discuz 所有模板介绍
(图片来源网络,侵删)
{loop $threadlist $thread}
    <li>
        <a href="forum.php?mod=viewthread&tid={$thread[tid]}">{$thread[subject]}</a>
        <span>作者: {$thread[author]}</span>
    </li>
{/loop}
  • $threadlist:PHP 传递过来的帖子数组。
  • $thread:循环中的每一个元素(即一个帖子的数据)。
  • $thread[tid]:获取该帖子的 ID。

条件判断

根据条件显示不同的内容。

{if $_G['uid']}
    <!-- 如果用户已登录,显示欢迎信息 -->
    <p>欢迎, {$_G[username]}!</p>
{else}
    <!-- 如果用户未登录,显示登录表单 -->
    <a href="member.php?mod=logging&action=login">登录</a>
{/if}

函数调用

调用 PHP 中定义的函数来处理数据。

  • {eval echo date('Y-m-d');}:执行 PHP 的 echo date('Y-m-d');,显示当前日期。
  • {lang 'plugin_name'}:调用语言包,实现多语言支持。

如何管理和更换模板?

更换模板

  1. 上传模板:将下载的模板文件夹上传到 /template/ 目录下。
  2. 进入后台:登录 Discuz! 后台,进入 “界面” -> “风格管理”
  3. 选择风格:在风格列表中,你会看到所有已安装的模板,点击“启用”或“设为默认”即可。

自定义模板(二次开发)

  1. 复制一份:强烈建议先复制一份 default 模板,并重命名(如 my_custom),然后在这个副本上进行修改,这样可以保留原始模板作为备份。
  2. 修改文件:使用代码编辑器(如 VS Code, Sublime Text)打开 /template/my_custom/ 目录下的 .htm.css 文件。
  3. 修改样式:主要修改 style/ 目录下的 CSS 文件来改变颜色、字体、布局。
  4. 修改结构:修改 .htm 文件来调整页面元素的顺序和结构。
  5. 刷新缓存:每次修改模板文件后,都需要在后台 “全局” -> “更新缓存” 中刷新模板缓存,才能看到效果。

最佳实践与注意事项

  1. 备份!备份!备份!:在进行任何修改前,务必备份原始模板和数据库。
  2. 从默认模板开始:如果你是新手,最好基于 default 模板进行修改,而不是修改一个复杂的第三方模板。
  3. 善用开发者工具:浏览器的“开发者工具”(F12)是你的好朋友,它可以实时查看页面元素的 HTML 结构和对应的 CSS 样式,帮助你快速定位问题。
  4. 保持代码整洁:修改时尽量保持代码的缩进和注释,方便日后维护。
  5. 关注兼容性:修改模板时,要考虑到 Discuz! 未来版本的升级,避免对核心文件进行过度“硬编码”的修改。
  6. 性能优化:避免在模板中引入过多的外部资源(字体、图标库等),过多的 CSS 和 JS 文件会影响页面加载速度。

Discuz! 的模板系统是一个强大而灵活的工具,它将内容与表现层分离,使得非技术人员也可以通过更换模板来快速改变论坛外观,而技术人员则可以通过深度定制,打造出独一无二的社区平台,理解其工作原理、文件结构和核心标签,是每一位 Discuz! 站长和开发者必备的技能。