PHPWind 模板制作教程

前言

PHPWind 的模板系统基于经典的 PHP + Smarty 模板引擎,理解这一点至关重要:

phpwind 模板制作教程
(图片来源网络,侵删)
  • PHP: 负责业务逻辑,从数据库读取数据、处理用户请求等。
  • Smarty: 负责表现逻辑,将 PHP 传递过来的数据展示在 HTML 页面上,它将 PHP 代码与 HTML 代码分离,使得设计师可以专注于 HTML/CSS/JS 的修改,而无需触碰复杂的 PHP 后端逻辑。

本教程将分为以下几个部分:

  1. 准备工作:了解文件结构和必备工具。
  2. 模板基础:核心变量、函数和注释。
  3. 实战演练:以修改首页为例,一步步制作模板。
  4. 常用标签与函数:一个快速参考手册。
  5. 进阶技巧:包含文件、继承与覆盖等。
  6. 注意事项与调试

第一部分:准备工作

模板文件结构

登录您的 FTP 或服务器管理工具,找到 PHPWind 的安装目录,模板文件主要位于以下路径:

/wind/
├── template/          <-- 所有模板文件都存放在这里
│   ├── default/       <-- 默认模板文件夹
│   │   ├── common/    <-- 公共组件(如头部、底部、侧边栏)
│   │   ├── forum/     <-- 论坛相关页面(首页、列表、帖子内容等)
│   │   ├── user/      <-- 用户中心相关页面
│   │   ├── portal/    <!-- 首页门户相关页面 -->
│   │   └── ...
│   └── my_template/   <-- 您自己创建的新模板文件夹(强烈建议复制一份 default 进行修改)
└── ...

最佳实践: 在制作新模板时,不要直接修改 default 文件夹,请将 default 文件夹完整复制一份,重命名为您自己的模板名称(如 my_themecompany),然后在 my_theme 文件夹内进行修改。

必备工具

  • 代码编辑器:强烈推荐使用 VS CodeSublime TextNotepad++,它们支持语法高亮,能极大提高效率。
  • FTP/SFTP 客户端:如 FileZilla,用于上传下载文件。
  • 浏览器开发者工具:按 F12 打开,用于检查页面元素、调试 CSS 和查看网络请求,是模板修改的利器。

后台模板管理

登录您的 PHPWind 后台,进入 全局 -> 界面 -> 模板风格。 在这里您可以:

phpwind 模板制作教程
(图片来源网络,侵删)
  • 安装模板:上传模板包。
  • 选择当前模板:为您的网站选择一个正在使用的模板。
  • 编辑模板:可以直接在线编辑模板文件(不推荐复杂修改,但适合快速微调)。

第二部分:模板基础

模板变量

模板变量用于显示从 PHP 后端传递过来的数据,变量名通常由英文单词、下划线和数字组成,并用一对花括号 包裹。

示例

  • {$_G['username']}:显示当前登录用户的用户名。
  • {$_G['forum']['name']}:显示当前论坛的名称。
  • {$_G['timestamp']}:显示当前服务器时间戳。

{$_G} 是一个超级全局变量数组,包含了当前环境下的所有重要信息,如用户信息、站点信息、论坛信息等。

模板函数

PHPWind 模板引擎内置了许多函数,用于处理数据、循环、条件判断等。

phpwind 模板制作教程
(图片来源网络,侵删)

语法{function_name param1="value1" param2="value2"}

示例

  • {lang ...}:语言包调用,用于实现多语言。{lang 'thread_index_title'} 会根据用户语言设置显示对应的文字。
  • {url ...}:URL 生成,用于生成站内链接,能自动带上域名和参数。{url 'forum/index'} 会生成论坛首页的链接。
  • {eval ...}:执行 PHP 代码。极其危险,请谨慎使用! 通常只在非常特殊的情况下使用。

模板注释

模板注释不会被输出到最终的 HTML 页面上,仅供开发者查看。

语法{* 这是模板注释 *}

示例{* 这里是论坛首页的头部区域 *}


第三部分:实战演练 - 修改论坛首页

我们的目标是修改论坛首页的标题和背景色。

步骤 1:定位模板文件

论坛首页的模板文件通常位于: /wind/template/my_template/forum/index.htm

步骤 2:打开并分析文件

用代码编辑器打开 index.htm,您会看到大量的 HTML 代码和 Smarty 标签混合在一起。

步骤 3:修改页面标题

通常在 <head> 标签内,或者在一个专门的头部模板文件中,我们先在 index.htm 里找找。

找到类似这样的代码:

这里的 {lang thread_index_title} 是语言包中的“首页”文字,{$_G['forum']['name']} 是您的论坛名称。

我们可以修改它,让它更个性化:

保存文件并刷新网站首页,您会看到浏览器标签页的标题已经改变。

步骤 4:修改页面背景色

假设我们想把整个页面的背景色改成浅灰色。

  1. 使用浏览器开发者工具

    • 在首页任意位置点击右键,选择“检查”。
    • 在弹出的开发者工具中,找到 <body>
    • 您会看到 <body> 标签上有很多 classid 属性,<body class="pg_index">
  2. 添加自定义 CSS: 直接在 index.htm 里修改 <body>style 属性是最直接的方法,但更好的做法是创建一个独立的 CSS 文件。

    • 方法 A:直接修改 HTML (简单但不推荐) 找到 <body> 标签,直接添加 style 属性:

      <body class="pg_index" style="background-color: #f0f0f0;">
    • 方法 B:创建并引入 CSS 文件 (推荐) a. 在 /wind/template/my_template/ 目录下新建一个文件夹 css。 b. 在 css 文件夹里新建一个文件 style.css。 c. 在 style.css 中写入您的 CSS 规则:

          .pg_index {
              background-color: #f0f0f0;
          }

      d. 打开 index.htm,找到引入 CSS 的地方(通常在 <head> 标签内),添加您的 CSS 文件链接:

          <link rel="stylesheet" type="text/css" href="{url 'template/my_template/css/style.css'}" />

      e. 保存文件并刷新页面,背景色已改变。

通过这个简单的例子,您应该已经掌握了模板修改的基本流程:定位文件 -> 分析结构 -> 修改代码 -> 刷新查看


第四部分:常用标签与函数速查手册

条件判断 if

{if $user['uid']}
    欢迎您,{$_G['username']}!
{else}
    您尚未登录,请 <a href="{url 'user/login'}">登录</a> 或 <a href="{url 'user/register'}">注册</a>。
{/if}

循环 foreach

用于遍历一个数组,比如帖子列表。

<!-- {loop $threadlist $thread} -->
<div class="thread-item">
    <h3><a href="{url 'thread/read/meid/'.$thread['tid']}">{$thread['subject']}</a></h3>
    <p>作者:{$thread['author']} | 回复:{$thread['replies']} | 最后回复:{$thread['lastpost']}</p>
</div>
<!-- {/loop} -->

<!-- {loop ...} --> 这种注释形式的循环是 PHPWind 的传统写法,功能与 {foreach} 类似。

包含文件 include

用于引入其他模板文件,实现代码复用,比如头部和底部。

<!-- 引入公共头部 -->
{include file="common/header.htm"}
<!-- 页面主要内容 -->
<div class="main-content">
    <!-- 这里是首页内容 -->
</div>
<!-- 引入公共底部 -->
{include file="common/footer.htm"}

common/header.htmcommon/footer.htm 通常位于 /wind/template/my_template/common/ 目录下。

截取字符串 sub

{$thread['subject']|sub=20} <!-- 截取 subject 字符串的前20个字符 -->

格式化时间 date

{date format='Y-m-d H:i:s' $thread['posttime']} <!-- 格式化发帖时间 -->

第五部分:进阶技巧

模板继承 (PHPWind 9.x 及以后版本)

新版 PHPWind 引入了类似 Twig 的模板继承机制,让主题定制更灵活。

  • base.htm: 模板的“骨架”,定义了页面的整体结构(如头部、底部、内容块占位符)。
  • 子模板: 继承 base.htm,只修改自己需要改变的部分,而不需要重复编写整个页面结构。

base.htm 示例:

<!DOCTYPE html>
<html>
<head>{block name="page_title"}默认标题{/block}</title>
</head>
<body>
    {include file="common/header.htm"}
    <div class="main">
        {block name="main_content"}
            <!-- 默认内容,子模板不覆盖时会显示 -->
            <p>这是默认的主要内容区域。</p>
        {/block}
    </div>
    {include file="common/footer.htm"}
</body>
</html>

forum/index.htm (继承 base.htm):

{extend name="forum/base.htm"}
{block name="page_title"}
    论坛首页 - {$page_title}
{/block}
{block name="main_content"}
    <!-- 这里只写首页特有的内容,会替换掉 base.htm 中的默认内容 -->
    <h1>欢迎来到论坛首页!</h1>
    <!-- 循环输出帖子列表 -->
    <!-- {loop $threadlist $thread} -->
    <!-- ... -->
    <!-- {/loop} -->
{/block}

这种方式结构更清晰,推荐在新版本中使用。

覆盖公共模板

如果您想修改所有页面都使用的头部 header.htm,但不想影响默认模板,只需在您自己的模板文件夹(my_template)下创建一个相同路径的文件即可,创建 /wind/template/my_template/common/header.htm,系统会优先加载您模板中的文件,而不是默认模板中的。


第六部分:注意事项与调试

  1. 缓存问题:修改模板后,如果页面没有更新,请清除浏览器缓存和 PHPWind 的模板缓存,后台通常有“清除缓存”的按钮。
  2. 文件权限:确保您的模板文件具有正确的读写权限(通常是 755 或 644),否则无法保存修改。
  3. 安全第一
    • 永远不要从不可信的来源下载模板。
    • 谨慎使用 {eval} 和自定义 PHP 标签,它们可能引入安全漏洞(如 XSS)。
  4. 调试技巧
    • 如果不确定某个变量是否存在或其值是什么,可以在模板中临时使用以下代码打印出来:
      <pre>
      {print_r($_G)}
      </pre>

      这会以格式化的方式打印出 $_G 数组的所有内容,方便您查找所需变量。


PHPWind 模板制作的核心在于理解 “数据分离” 的思想,通过不断地练习和查阅官方文档或现有模板,您会越来越熟练,从修改一个标题、一张图片开始,逐步尝试修改布局、添加新功能,您就能成为一名出色的 PHPWind 模板制作者,祝您成功!