1. 核心概念:门户、栏目、文章
  2. 模板文件结构与存放位置
  3. 主要模板文件详解
  4. 常用模板标签与函数
  5. 自定义模板的完整流程(实战示例)
  6. 常用资源与注意事项

核心概念:门户、栏目、文章

在开始修改模板前,必须先理解 Discuz! X3 门户的三个核心元素:

discuz x3 门户 模板
(图片来源网络,侵删)
  • 门户: 指的是整个内容聚合展示系统,你的网站首页就是一个典型的“门户”页面。
  • 栏目: 门户内容的分类,你可以创建“网站公告”、“技术分享”、“最新动态”等栏目,每个栏目都有独立的设置,包括:
    • 允许发布的模型类型:文章、话题、图片等。
    • 模板:可以为每个栏目指定一个独立的显示模板。
    • 页显示方式
  • 文章: 门户上展示的具体内容,这些文章可以在后台“内容” -> “门户”中创建和发布,发布时,你需要选择它属于哪个栏目。

关系: 栏目 是内容的容器,文章 是内容本身。门户 页面通过调用不同 栏目 来聚合展示这些 文章


模板文件结构与存放位置

Discuz! X3 的模板系统采用了主题包的形式,所有与界面相关的文件都存放在主题目录下。

  • 主题目录位置: /static/ 目录下,通常会有一个名为 default 的文件夹,这是默认主题,你也可以在这里创建自己的主题文件夹,mytheme
  • 门户相关文件位置: /static/你的主题目录/portal/

portal 目录下,你会看到以下关键文件:

  • portal.htm: 最重要的文件! 这是门户首页的模板文件,你看到的大部分首页布局和样式都在这里定义。
  • list_*.htm: 单个栏目的列表页模板。 是该栏目在数据库中的 ID。list_1.htm 是 ID 为 1 的栏目的列表页。
  • view.htm: 门户文章的内容详情页模板,当用户点击一篇文章标题进入详情页时,就是调用这个模板。
  • category_*.htm: 栏目的封面页模板,如果你的栏目设置了封面页,就会调用这个模板。
  • block_*.htm: 各种功能块的模板,热门文章推荐、最新评论等,每个功能块都可能对应一个 block_ 文件。

主要模板文件详解

portal.htm - 门户首页模板

这是你工作的核心文件,打开它,你会发现它主要由三部分组成:

discuz x3 门户 模板
(图片来源网络,侵删)
  1. HTML 结构: 使用标准的 HTML 代码,定义了页面的 <head><body><header><footer> 等结构。
  2. Discuz! 模板标签: 以 包围的代码,用于动态调用数据,{loop $catlist $cat} 会循环输出所有栏目。
  3. 区块调用: 这是最关键的部分,首页通常被划分为多个区块,每个区块显示一个或多个栏目的内容。

一个典型的 portal.htm 结构示例:

<!-- ... 头部 ... -->
<div id="pt" class="bm cl">
    <div class="z">
        <a href="./" class="nvhm" title="{lang homepage}">$_G[setting][sitename]</a><em>›</em>
        <a href="portal.php">{lang portal}</a>
    </div>
</div>
<div id="ct" class="ct2_a wp cl">
    <div class="mn">
        <!-- 左侧主要内容区 -->
        <div class="bm bw0">
            <!-- 这里是区块1,通常用于显示一个指定的大栏目 -->
            {template block/portal_block_1}
        </div>
        <div class="bm bw0">
            <!-- 这里是区块2,可能是一个两栏布局,显示两个小栏目 -->
            <div class="cl">
                <div class="z xw1">
                    {template block/portal_block_2}
                </div>
                <div class="y xw1">
                    {template block/portal_block_3}
                </div>
            </div>
        </div>
        <!-- 更多区块... -->
    </div>
    <div class="sd">
        <!-- 右侧边栏 -->
        {template block/portal_block_4}
        {template block/portal_block_5}
    </div>
</div>
<!-- ... 底部 ... -->

解读:

  • {template block/portal_block_1} 是一个区块调用,它告诉 Discuz! 去加载 /static/你的主题目录/portal/block/portal_block_1.htm 这个文件的内容。
  • 你可以在后台“门户” -> “页面管理” -> “首页”中,可视化地设置每个区块显示哪个栏目、显示多少条内容、排序方式等,你设置的这些参数会传递给对应的 block_*.htm 模板文件。

常用模板标签与函数

在修改 portal.htmblock_*.htm 时,你会用到大量的模板标签。

循环输出栏目 (catlist)

这是在首页布局中放置栏目的最常用方法。

discuz x3 门户 模板
(图片来源网络,侵删)
{loop $catlist $cat}
    <!-- $cat 是一个栏目数组,包含栏目的各种信息 -->
    <div class="portal_block">
        <h2><a href="{$cat[caturl]}">{$cat[catname]}</a></h2>
        <!-- 调用该栏目的文章列表 -->
        {loop $cat['articles'] $article}
            <div class="article_item">
                <h3><a href="{$article[url]}">{$article[title]}</a></h3>
                <p class="summary">{$article[summary]}</p>
                <div class="info">
                    <span class="author">作者:{$article[author]}</span>
                    <span class="date">{$article[dateline]}</span>
                </div>
            </div>
        {/loop}
        <a href="{$cat[caturl]}" class="more">查看更多 &raquo;</a>
    </div>
{/loop}

常用 $cat 数组键值:

  • $cat[catid]: 栏目 ID
  • $cat[catname]: 栏目名称
  • $cat[caturl]: 栏目链接
  • $cat[articles]: 该栏目下的文章数组(需要在前台设置中开启)

循环输出文章 (article)

block_*.htm 文件中,你通常会看到这样的循环。

{loop $articles $article}
    <li>
        <span class="ico">{if $article[isrecommend]}<em class="p">荐</em>{/if}</span>
        <a href="{$article[url]}" target="_blank" title="{$article[title]}">{if $article[thumb]}<img src="{$article[thumb]}" width="80" height="60" />{/if}{$article[title]}</a>
    </li>
{/loop}

常用 $article 数组键值:

  • $article[aid]: 文章 ID
  • $article[title]: 文章标题
  • $article[url]: 文章链接
  • $article[summary]: 文章摘要
  • $article[thumb]: 文章封面图
  • $author[author]: 作者
  • $article[dateline]: 发布时间 (时间戳)
  • $article[viewnum]: 浏览次数
  • $article[commentnum]: 评论数

其他常用标签

  • {lang xxx}: 调用语言包。{lang portal} 会显示“门户”二字。
  • $_G[setting][sitename]: 网站名称。
  • $_G[member][username]: 当前登录用户名。
  • {date 格式}: 显示当前时间。{date Y-m-d H:i:s}

自定义模板的完整流程(实战示例)

假设你想在首页添加一个新的区块,用来展示“最新公告”。

步骤 1:后台设置

  1. 创建栏目:

    • 进入后台 -> 分类 -> 添加分类
    • 名称填入“最新公告”。
    • 模型选择“文章”。
    • 提交后记下它的 栏目 ID(假设是 5)。
  2. 发布文章:

    • 进入后台 -> 文章,发布几篇属于“最新公告”栏目的文章。
  3. 首页区块设置:

    • 进入后台 门户 -> 页面管理 -> 首页
    • 在页面布局下方,点击“添加模块”。
    • 选择“指定栏目模块”。
    • 在右侧设置中,选择“最新公告”栏目,设置显示数量(如 5 条),排序方式(如发布时间倒序)。
    • 保存,后台已经为你生成了一个调用这个栏目的区块。

步骤 2:修改模板

  1. 找到区块文件:

    • 假设后台自动分配给你的区块是 portal_block_6
    • 通过 FTP 或文件管理器,打开 /static/你的主题目录/portal/block/portal_block_6.htm
  2. 编辑 portal_block_6.htm

    • 可能比较简单,你可以用下面的代码替换它,让它看起来更美观。
    <!-- portal_block_6.htm -->
    <div class="bm">
        <div class="bm_h cl">
            <h2>最新公告</h2>
        </div>
        <div class="bm_c">
            <ul class="xl xl1">
                {loop $articles $article}
                    <li>
                        <span class="num">{$article[dateline]}</span>
                        <a href="{$article[url]}" target="_blank" title="{$article[title]}">{$article[title]}</a>
                    </li>
                {/loop}
            </ul>
        </div>
    </div>
  3. 在首页布局中调用:

    • 打开 /static/你的主题目录/portal/portal.htm
    • 在你希望显示“最新公告”的位置(比如右侧边栏),添加一行代码:
      {template block/portal_block_6}
  4. 添加 CSS 样式(可选):

    • 为了让新区块更好看,你可以在主题的 CSS 文件(通常是 /static/你的主题目录/style/common.css)中添加一些样式。
    • /* 最新公告样式 */
      .xl1 li {
          padding: 8px 0;
          border-bottom: 1px dashed #eee;
      }
      .xl1 .num {
          float: right;
          color: #999;
          font-size: 12px;
      }

步骤 3:清缓存并刷新

  1. 进入后台 全局 -> 缓存设置,点击“更新全部缓存”。
  2. 清除浏览器缓存。
  3. 访问你的网站首页,你应该就能看到自定义的“最新公告”区块了。

常用资源与注意事项

  • 官方资源:

    • Discuz! 官方论坛: https://.discuz.com/ - 里面有模板讨论区,可以搜索到很多现成的模板和教程。
    • Discuz! 文档中心: 官方会提供一些开发文档,但可能不够新。
  • 第三方模板站:

    网上有很多 Discuz! X3 的免费和付费模板售卖网站,购买模板是快速搭建网站的好方法,同时你也可以下载下来研究其模板结构,学习别人的代码。

  • 注意事项:

    • 备份!备份!备份! 在修改任何文件前,务必备份原始的模板文件和数据库。
    • 使用 FTP/SFTP: 不要直接在服务器上在线编辑,使用 FTP 客户端下载、修改、上传更安全。
    • 熟悉基础: 修改模板需要一定的 HTML 和 CSS 基础,如果不懂,建议先学习相关知识。
    • 命名规范: 创建自己的主题文件夹时,不要使用中文或特殊字符。
    • 版本兼容性: 你找到的教程或模板代码可能不适用于你的 Discuz! X3 版本,注意甄别。

希望这份详细的指南能帮助你掌握 Discuz! X3 门户模板的制作和修改!祝你搭建出满意的网站。