UCHome 2.0 是一个经典的 PHP 社区程序,其模板系统采用了类似 Smarty 的模板分离思想,但实现方式更为轻量级和直接,理解它的模板机制对于二次开发、修改界面和制作主题至关重要。
UCHome 模板系统核心思想
UCHome 的核心思想是 “数据逻辑(PHP)与页面表现(HTML)分离”。
- PHP 文件(后端逻辑):负责数据处理、数据库查询、业务逻辑判断。
space.php负责处理个人空间的所有逻辑。 - 模板文件(前端表现):负责将 PHP 传递过来的数据以 HTML 的形式展示出来,它只包含 HTML、CSS 和一些简单的模板标签。
这样做的好处是:
- 分工明确:程序员专注于 PHP 逻辑,美工或前端开发者专注于 HTML/CSS,互不干扰。
- 安全:模板文件无法直接执行 PHP 代码,提高了安全性。
- 易于维护:修改界面时,只需改动模板文件,无需触碰核心 PHP 代码。
模板文件的存放位置
UCHome 的模板文件都存放在 ./template/ 目录下。
- 默认模板:默认情况下,系统会加载
./template/default/目录下的模板文件。 - 自定义模板:你可以创建一个新的文件夹(
./template/mytheme/),然后通过后台或修改配置文件来切换主题。
一个典型的页面由多个模板文件组合而成,以个人空间首页(space.php?uid=123)为例,它可能包含以下模板文件:
header.htm: 整个网站的公共头部,包含 logo、导航栏等。space_profile.htm: 个人空间左侧的用户信息面板。space.htm: 个人空间的主要内容区域,包含动态、日志等。space_comment.htm: 评论列表模板。footer.htm: 整个网站的公共底部。
这些文件通过 PHP 代码 include 的方式组合成一个完整的 HTML 页面。
模板语法(核心标签)
UCHome 模板引擎定义了一套自己的标签,用于在 HTML 中嵌入动态数据和控制逻辑。
变量输出
这是最常用的标签,用于显示 PHP 传递过来的变量。
- 语法:
{$变量名} - 示例:
<h1>{$space[username]}的个人空间</h1> <p>他的最新动态是:{$feed['title']}</p>$space和$feed是 PHP 文件中通过assign或直接定义的变量数组。
条件判断
根据条件选择性地显示 HTML 代码。
- 语法:
{if condition} ... HTML ... {elseif condition} ... HTML ... {else} ... HTML ... {/if} - 示例:
{if $space['gender'] == 1} <span>男</span> {elseif $space['gender'] == 2} <span>女</span> {else} <span>保密</span> {/if}
循环输出
用于遍历数组,如文章列表、好友列表等。
- 语法:
{loop $数组名 $key $value} ... HTML ... {/loop}$key是可选的,代表当前元素的键名。$value代表当前元素的值。
- 示例:
<ul> {loop $bloglist $blog} <li> <a href="space.php?do=blog&id={$blog['blogid']}">{$blog['subject']}</a> <span>{$blog['dateline']}</span> </li> {/loop} </ul>
包含其他模板
用于复用公共模块,如头部、底部、侧边栏等。
-
语法:
{template 模板文件名} -
示例: 在
space.php对应的模板文件space.htm中,可以这样写:{template header} <div class="content"> <!-- 个人空间主要内容 --> </div> {template footer}- 系统会自动在当前主题目录下查找
header.htm和footer.htm并包含进来。
- 系统会自动在当前主题目录下查找
内置函数
UCHome 提供了一些实用的内置函数来简化模板代码。
lang(): 调用语言包。- 语法:
{lang key} - 示例:
<button>{lang submit}</button>会根据当前语言显示“提交”或“Submit”等。
- 语法:
date(): 格式化时间戳。- 语法:
{date 时间戳, '格式'} - 示例:
{date $feed['dateline'], 'Y-m-d H:i:s'}会将时间戳格式化为2025-10-27 15:30:00。
- 语法:
avatar(): 获取用户头像 URL。- 语法:
{avatar 用户数组, '大小'} - 示例:
<img src="{avatar $space, 'small'}" />会获取该用户的小尺寸头像地址。
- 语法:
如何制作或修改一个 UCHome 2.0 模板?
假设你要制作一个新的主题,步骤如下:
步骤 1:准备素材
- 设计好网站的 HTML、CSS 和图片(通常存放在
./template/yourtheme/images/目录)。 - 确保你的 HTML 结构清晰,便于后续替换变量。
步骤 2:复制默认模板
- 将
./template/default/整个文件夹复制一份,重命名为你自己的主题名,./template/mynewtheme/。 - 这是你修改的基础,所有改动都在这个新文件夹内进行。
步骤 3:修改模板文件
- 打开
mynewtheme文件夹下的.htm文件。 - 将你设计好的 HTML 代码粘贴进去。
- 使用UCHome的模板标签替换掉静态内容。
- 把用户名
{$space[username]}放在<h1>标签里。 - 用
{loop $list $item}循环来展示你的列表。 - 用
{if}判断来控制某些元素的显示/隐藏。
- 把用户名
步骤 4:切换主题
- 方法一(后台):登录UCHome后台,找到“界面风格”或“主题设置”选项,选择你新建的
mynewtheme主题并保存。 - 方法二(代码):如果后台没有选项,可以直接修改数据库,找到
uchome_spacefields表(或类似名称的表),找到你自己的用户记录,修改theme字段的值为mynewtheme,或者修改配置文件./config.inc.php,找到$_SC['theme']变量,将其值改为mynewtheme。
步骤 5:测试和调试
- 清理浏览器缓存,访问网站查看效果。
- 如果页面显示异常,检查模板标签的语法是否正确,PHP 传递过来的变量名是否在模板中存在。
重要提示与注意事项
- 版本差异:不同版本的 UCHome(如 1.5, 2.0, 2.5)在模板标签和系统变量上可能存在细微差异,请务必以你当前版本的源码为准。
- 变量来源:模板中使用的变量(如
$space,$feed)都是由对应的 PHP 文件(如space.php)在执行时生成并传递给模板的,如果你想在模板中使用一个新变量,必须先去修改对应的 PHP 文件。 - 安全性:绝对不要在模板文件中直接写
<?php ?>代码来执行 PHP,这会破坏模板分离的原则,带来巨大的安全风险。 - CSS 和 JavaScript:
- CSS 文件通常存放在
./template/yourtheme/style/目录。 - JavaScript 文件通常存放在
./template/yourtheme/js/目录。 - 在模板文件中,通过
<link>和<script>标签引入它们,路径要写对。
- CSS 文件通常存放在
- 兼容性:UCHome 是一个非常古老的程序,基于 PHP 5.x 和旧的 MySQL 扩展,在新的服务器环境(如 PHP 7/8, MariaDB, Nginx)下可能会遇到各种兼容性问题,制作模板时,也要考虑这些环境因素。
UCHome 的模板系统虽然简单,但功能足够满足基本需求,掌握上述核心语法和流程,你就可以自由地修改或创建属于自己的 UCHome 主题了。
