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)为例,它可能包含以下模板文件:

  1. header.htm: 整个网站的公共头部,包含 logo、导航栏等。
  2. space_profile.htm: 个人空间左侧的用户信息面板。
  3. space.htm: 个人空间的主要内容区域,包含动态、日志等。
  4. space_comment.htm: 评论列表模板。
  5. 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.htmfooter.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 传递过来的变量名是否在模板中存在。

重要提示与注意事项

  1. 版本差异:不同版本的 UCHome(如 1.5, 2.0, 2.5)在模板标签和系统变量上可能存在细微差异,请务必以你当前版本的源码为准。
  2. 变量来源:模板中使用的变量(如 $space, $feed)都是由对应的 PHP 文件(如 space.php)在执行时生成并传递给模板的,如果你想在模板中使用一个新变量,必须先去修改对应的 PHP 文件。
  3. 安全性绝对不要在模板文件中直接写 <?php ?> 代码来执行 PHP,这会破坏模板分离的原则,带来巨大的安全风险。
  4. CSS 和 JavaScript
    • CSS 文件通常存放在 ./template/yourtheme/style/ 目录。
    • JavaScript 文件通常存放在 ./template/yourtheme/js/ 目录。
    • 在模板文件中,通过 <link><script> 标签引入它们,路径要写对。
  5. 兼容性:UCHome 是一个非常古老的程序,基于 PHP 5.x 和旧的 MySQL 扩展,在新的服务器环境(如 PHP 7/8, MariaDB, Nginx)下可能会遇到各种兼容性问题,制作模板时,也要考虑这些环境因素。

UCHome 的模板系统虽然简单,但功能足够满足基本需求,掌握上述核心语法和流程,你就可以自由地修改或创建属于自己的 UCHome 主题了。