PHPWind 8.7 是一个非常经典的社区论坛程序,其模板系统虽然与现代的框架(如 Laravel Blade, Twig)相比显得有些老旧,但其核心思想清晰,对于二次开发和主题定制来说,理解它至关重要。

phpwind 8.7 模板
(图片来源网络,侵删)

下面我将从 核心概念、文件结构、常用标签、实例教程 四个方面进行详细说明。


核心概念

理解 PHPWind 8.7 的模板,首先要明白它的几个核心组成部分:

  1. 模板引擎

    • PHPWind 8.7 使用的是自己开发的一套模板引擎,而非第三方引擎。
    • 它的核心是解析一系列自定义的 模板标签,这些标签以 <pw> 或 开头和结尾。
    • 引擎会将这些标签替换成 PHP 代码执行后生成的实际 HTML 内容。
  2. 模板文件

    • 这些是纯文本文件,通常以 .htm 为后缀。
    • 它们混合了 HTML 代码、CSS、JavaScript 和 PHPWind 的模板标签。
    • 你不能直接在模板文件中写 PHP 代码(除了少数特定情况),所有动态数据都必须通过模板标签来获取。
  3. 风格

    • 一个“风格”就是一个完整的主题包,它包含了所有模板文件、CSS、JavaScript、图片等资源。
    • 默认风格通常位于 template/wind/ 目录下。
    • 你可以复制这个默认风格文件夹,重命名(template/my_custom_theme/),然后在后台进行切换,这样就不会破坏原始主题。
    • 这是模板系统的灵魂,用于调用数据、执行逻辑、包含其他文件等。
    • 常用标签格式
      • <pw>...</pw>:这是最核心的标签,用于数据循环、条件判断等。
      • 通常用于简单的变量输出、函数调用或包含外部文件。

模板文件结构

当你进入 template/wind/ 目录,你会看到以下结构:

template/
└── wind/                  // 默认风格主题目录
    ├── css/               // 样式文件
    │   └── base.css       // 基础样式
    │   └── ...            // 其他模块样式
    ├── images/            // 图片资源
    │   └── logo.png
    │   └── ...
    ├── js/                // JavaScript 文件
    │   └── ...
    ├── header.htm         // 全局头部模板
    ├── footer.htm         // 全局底部模板
    ├── index.htm          // 首页模板
    ├── read.htm           // 帖子内容页模板
    ├── ...                // 其他各个页面模板
    └── admin/             // 后台管理相关的模板
        └── ...

关键模板文件说明:

  • header.htm:定义了网页的 <head> 部分(包含 meta、title、CSS/JS 引入)、网站顶部导航栏、Logo 等,几乎所有页面都会包含它。
  • footer.htm:定义了网页底部的版权信息、统计代码、页面底部链接等,几乎所有页面都会包含它。
  • index.htm:论坛首页模板,用于展示版块列表、热门帖子、新会员等。
  • read.htm:帖子阅读页模板,用于显示帖子标题、楼层、回复内容等。
  • 其他模板:如 forumlist.htm (版块列表), login.htm (登录页), register.htm (注册页) 等,分别对应不同的功能页面。

常用模板标签

这是最核心的部分,你需要熟悉这些标签才能进行修改。

变量输出

  • 简单变量:直接用 {变量名} 输出。

    <div>欢迎您,{$_username}</div>      // 输出当前登录用户名
  • 数组/对象成员:用 {变量名.成员名} 输出。

    <pw>$thread</pw>  // 假设 $thread 是一个帖子对象
    <div>
        <h3>{$thread.subject}</h3>     // 帖子标题
        <p>作者:{$thread.author}</p>   // 帖子作者
        <p>发布时间:{$thread.postdate}</p>
    </div>

包含文件

  • {template}:包含一个模板文件,常用于包含公共头部或底部。
    {template header}  // 包含 template/wind/header.htm 文件
    <!-- 页面主体内容 -->
    {template footer}  // 包含 template/wind/footer.htm 文件

循环

这是最常用的功能,用于遍历一个数据数组(如帖子列表、版块列表)。

  • <pw:loop> 标签:
    <pw>$threadList</pw>  // 假设 $threadList 是一个包含多个帖子的数组
    <ul>
        <pw:loop $threadList $key $thread>
            <li>
                <a href="read.php?tid={$thread.tid}">{$thread.subject}</a>
                <span>作者:{$thread.author}</span>
            </li>
        </pw:loop>
    </ul>
    • $threadList:要循环的数组变量。
    • $key:当前元素的键(可选)。
    • $thread:当前元素的值(变量名可以自定义,这里用 $thread 代表单个帖子对象)。

条件判断

  • <pw:if> 标签:
    <pw:if $_username eq ''>
        <!-- 如果用户未登录 -->
        <a href="login.php">请登录</a>
    <pw:else>
        <!-- 如果用户已登录 -->
        <a href="profile.php">{$_username}</a>
        <a href="logout.php">退出</a>
    </pw:else>
    </pw:if>
    • eq:等于 (equal)
    • neq<>:不等于 (not equal)
    • gt:大于 (greater than)
    • lt:小于 (less than)
    • gte>=:大于等于
    • lte<=:小于等于

其他常用标签

  • <pw:func>:调用 PHPWind 内置的函数。

    {pw::date('Y-m-d H:i:s', $timestamp)}  // 调用日期格式化函数
  • URL 生成:使用 url() 函数生成规范的链接。

    <a href="{url:read/index/tid/$thread.tid}">阅读帖子</a>
    <!-- 等同于 read.php?tid=123 -->

实例教程:修改首页显示的热门帖子数量

假设你希望论坛首页显示的“热门帖子”从 10 条增加到 20 条。

步骤 1:定位模板文件

热门帖子通常在首页 index.htm 中被调用,你需要打开 template/wind/index.htm 文件。

步骤 2:查找相关代码

index.htm 文件中,搜索与“热门帖子”相关的代码块,你可能会找到类似这样的 <pw:loop> 循环代码,它被包裹在一个条件判断中,用于判断是否显示该模块。

<!-- 在 index.htm 中找到类似代码 -->
<pw:if $hotThreadList>
<div class="hot-threads">
    <h2>热门帖子</h2>
    <ul>
        <pw:loop $hotThreadList $key $thread>
            <li><a href="{url:read/index/tid/$thread.tid}">{$thread.subject}</a></li>
        </pw:loop>
    </ul>
</div>
</pw:if>

步骤 3:定位数据来源

模板本身不决定数据量,数据是由 PHP 代码在后台传递给模板的。$hotThreadList 这个变量是在某个 PHP 控制器文件中生成的。

你需要找到生成这个变量的 PHP 文件,对于首页,通常是 src/applications/entry/controllers/EntryController.php 文件(路径可能因版本略有不同)。

在这个文件中,查找类似 $this->setOutput($hotThreadList, 'hotThreadList'); 的代码,在这行代码之前,会有一个查询数据库的代码,

// 在 EntryController.php 中
$hotThreadList = $_cache['hot_thread_list'] = $this->threadService->getHotThreadList(10); // 关键在这里!
$this->setOutput($hotThreadList, 'hotThreadList');

步骤 4:修改 PHP 代码

找到 getHotThreadList(10) 这个方法调用,将参数 10 修改为你想要的 20

// 修改前
$hotThreadList = $_cache['hot_thread_list'] = $this->threadService->getHotThreadList(10);
// 修改后
$hotThreadList = $_cache['hot_thread_list'] = $this->threadService->getHotThreadList(20);

步骤 5:清除缓存并刷新

  1. 保存修改的 PHP 文件。
  2. 登录 PHPWind 后台。
  3. 进入 系统 > 数据缓存 > 更新全部缓存
  4. 清除浏览器缓存。
  5. 刷新你的论坛首页,现在你应该能看到 20 条热门帖子了。

总结与建议

  • 耐心是关键:修改 PHPWind 模板是一个“定位模板 -> 修改标签 -> 定位数据 -> 修改代码 -> 清除缓存”的过程,需要耐心。
  • 善用搜索:在模板文件中用关键词(如“热门”、“最新”、“版块”)搜索,能快速定位到你想修改的地方。
  • 不要怕备份:在修改任何文件(无论是 .htm 还是 .php)之前,务必备份原始文件,这是防止改坏后无法恢复的最佳实践。
  • 学习基础:如果你想做更深入的定制,建议学习一些基础的 HTML, CSS 和 PHP 知识,这会让你事半功倍。

希望这份详细的指南能帮助你顺利上手 PHPWind 8.7 的模板开发!