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

下面我将从 核心概念、文件结构、常用标签、实例教程 四个方面进行详细说明。
核心概念
理解 PHPWind 8.7 的模板,首先要明白它的几个核心组成部分:
-
模板引擎
- PHPWind 8.7 使用的是自己开发的一套模板引擎,而非第三方引擎。
- 它的核心是解析一系列自定义的 模板标签,这些标签以
<pw>或 开头和结尾。 - 引擎会将这些标签替换成 PHP 代码执行后生成的实际 HTML 内容。
-
模板文件
- 这些是纯文本文件,通常以
.htm为后缀。 - 它们混合了 HTML 代码、CSS、JavaScript 和 PHPWind 的模板标签。
- 你不能直接在模板文件中写 PHP 代码(除了少数特定情况),所有动态数据都必须通过模板标签来获取。
- 这些是纯文本文件,通常以
-
风格
- 一个“风格”就是一个完整的主题包,它包含了所有模板文件、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:清除缓存并刷新
- 保存修改的 PHP 文件。
- 登录 PHPWind 后台。
- 进入 系统 > 数据缓存 > 更新全部缓存。
- 清除浏览器缓存。
- 刷新你的论坛首页,现在你应该能看到 20 条热门帖子了。
总结与建议
- 耐心是关键:修改 PHPWind 模板是一个“定位模板 -> 修改标签 -> 定位数据 -> 修改代码 -> 清除缓存”的过程,需要耐心。
- 善用搜索:在模板文件中用关键词(如“热门”、“最新”、“版块”)搜索,能快速定位到你想修改的地方。
- 不要怕备份:在修改任何文件(无论是
.htm还是.php)之前,务必备份原始文件,这是防止改坏后无法恢复的最佳实践。 - 学习基础:如果你想做更深入的定制,建议学习一些基础的 HTML, CSS 和 PHP 知识,这会让你事半功倍。
希望这份详细的指南能帮助你顺利上手 PHPWind 8.7 的模板开发!
