PHPCMS(特指其经典版本,如 V9)的模板系统非常灵活且强大,理解其默认模板的结构和工作原理是进行二次开发和定制化的基础。

phpcms 默认模板
(图片来源网络,侵删)

默认模板的核心思想:MVC 分离

PHPCMS 的模板系统严格遵循 MVC(Model-View-Controller) 设计模式:

  • Model (模型): 对应 phpcms/model/ 目录下的 PHP 文件,负责数据处理和业务逻辑,文章模型 content_model.php
  • View (视图): 对应 phpcms/templates/ 目录下的 HTML 文件,负责数据展示,也就是我们所说的“模板文件”。
  • Controller (控制器): 对应 phpcms/modules/ 目录下的 PHP 文件,负责接收用户请求,调用 Model 获取数据,并加载 View 将数据渲染后呈现给用户。

这种分离使得代码结构清晰,逻辑和表现分离,便于维护和扩展。


默认模板的目录结构

PHPCMS 的默认模板文件都存放在 phpcms/templates/ 目录下,这个目录的结构通常如下:

phpcms/
└── templates/
    ├── default/          # 默认模板文件夹
    │   ├── content/      # 内容模块的模板
    │   │   ├── index/    # 首页相关模板
    │   │   │   ├── index.html      # 网站首页
    │   │   │   └── category.html   # 栏目首页
    │   │   ├── show/     # 内容详情页模板
    │   │   │   └── show.html       # 文章/内容详情页
    │   │   └── ...       # 其他内容相关页面
    │   ├── member/       # 会员中心模块的模板
    │   │   ├── index/    # 会员中心首页
    │   │   └── ...       # 其他会员相关页面
    │   ├── search/       # 搜索模块的模板
    │   │   └── index.html
    │   └── ...           # 其他模块的模板
    │
    └── ...               # 其他自定义模板文件夹

关键点

phpcms 默认模板
(图片来源网络,侵删)
  • default 是默认的模板名称,你在后台设置的模板风格就是指向这个文件夹。
  • 每个模块(如内容模块 content,会员模块 member)都有自己的子目录。
  • 每个模块下又根据页面类型(如首页 index、列表页 category、详情页 show)再创建子目录。

默认模板的核心文件解析

我们以最常见的 网站首页文章详情页 为例,来解析默认模板的结构。

网站首页 (phpcms/templates/default/content/index/index.html)

一个典型的首页模板文件通常由三部分组成:头部主体底部,这通过 include 标签来实现。

{template "content","header"} <!-- 加载头部模板 -->
<!-- 主体内容开始 -->
<div class="main">
    <!-- 调用首页推荐位内容 -->
    {pc:get sql="SELECT * FROM v9_news WHERE posid=5 order BY id DESC" num="5" return="data"}
    {loop $data $r}
    <a href="{$r.url}">{$r.title}</a>
    {/loop}
    {/pc}
    <!-- 调用指定栏目下的文章列表 -->
    {pc:content action="lists" catid="10" num="10" order="id DESC" page="$page"}
    {loop $data $r}
    <li><a href="{$r.url}">{$r.title}</a></li>
    {/loop}
    <!-- 分页代码 -->
    <div class="page">{$pages}</div>
    {/pc}
</div>
<!-- 主体内容结束 -->
{template "content","footer"} <!-- 加载底部模板 -->

代码解析

  • {template "content","header"}: 这是一个模板包含标签,用于加载 phpcms/templates/default/content/header.html 文件,头部通常包含网站 logo、主导航菜单等。
  • {pc:get ...}{pc:content ...}: 这是 PHPCMS 最核心的 数据调用标签
    • pc:get: 用于执行任意 SQL 查询,灵活性高。
    • pc:content: 专门用于调用内容模型的数据,功能更强大,推荐使用。
    • action="lists": 表示调用列表数据。
    • catid="10": 指定要调用的栏目 ID。
    • num="10": 指定获取的数据条数。
    • order="id DESC": 指定排序方式。
    • page="$page": 启用分页功能。
    • return="data": 将查询结果存入 $data 变量。
  • {loop $data $r}: 循环标签,用于遍历 pc 标签获取到的数据。$data 是数据数组,$r 是当前循环到的数据元素(一个数组)。
  • {$r.title}{$r.url}: 变量输出标签。$r.title 输出文章标题,$r.url 输出文章的 URL 地址,PHPCMS 会自动处理相对路径,生成完整的 URL。
  • {$pages}: 分页标签,输出分页链接。
  • {template "content","footer"}: 加载底部模板,通常包含版权信息、友情链接等。

文章详情页 (phpcms/templates/default/content/show/show.html)

详情页的模板结构相对简单,主要就是展示单条内容。

{template "content","header"}
<div class="main">
    <!-- 获取当前文章的信息 -->
    {pc:content action="show" catid="$catid" id="$id" num="1"}
    {loop $data $r}
    <h1>{$r.title}</h1>
    <div class="info">作者:{$r.author} &nbsp;&nbsp; 发布时间:{date('Y-m-d H:i:s', $r.inputtime)} &nbsp;&nbsp; 点击:{$r.hits}</div>
    <div class="content">
        {$r.content}
    </div>
    {/loop}
    {/pc}
    <!-- 上一篇/下一篇 -->
    {pc:content action="relation" catid="$catid" id="$id" num="2" return="data"}
    {loop $data $r}
    <a href="{$r.url}">{$r.title}</a>
    {/loop}
    {/pc}
</div>
{template "content","footer"}

代码解析

  • {pc:content action="show" ...}: 这是调用单条内容详情的标签。
    • action="show": 表示调用详情数据。
    • catid="$catid"id="$id": 这两个变量是系统自动传递的,代表当前栏目 ID 和内容 ID,无需手动赋值。
  • {$r.content}: 输出文章的正文内容,正文内容中如果包含图片、视频等多媒体,它们也会被原样输出。
  • {date('Y-m-d H:i:s', $r.inputtime)}: 日期格式化标签,用于将时间戳转换为可读的日期格式。
  • {pc:content action="relation" ...}: 调用相关文章,如“上一篇”和“下一篇”。

模板引擎与常用标签

PHPCMS 使用自己的模板引擎,支持丰富的标签和函数。

用途 示例
{template "模块名","文件名"} 包含其他模板文件 {template "content","header"}
{pc:content ...} 核心标签,用于调用内容数据 {pc:content action="lists" catid="10" num="5"}
{pc:get ...} 核心标签,用于执行自定义 SQL {pc:get sql="..." num="5" return="data"}
{loop $数组 $变量} 循环遍历数组 {loop $data $r} ... {/loop}
{$变量.字段} 输出变量值 {$r.title}, {$r.content}
{if condition}...{else}...{/if} 条件判断 {if $r.iscommend}推荐{/if}
{date('格式', 时间戳)} 格式化日期 {date('Y-m-d', $r.inputtime)}
{function name="函数名" ...} 调用PHP函数 {function name="str_cut" v="$r.title" len="20"}
{$pages} 输出分页 -

如何修改默认模板?

  1. 通过后台修改(推荐):

    • 登录 PHPCMS 后台。
    • 进入 ” -> “模板管理”
    • 在这里你可以看到所有模块的模板列表,你可以直接在线编辑、上传、删除模板文件,这是最安全、最方便的方式。
  2. 直接修改文件(需谨慎):

    • 通过 FTP 或文件管理器,连接到你的服务器。
    • 进入 phpcms/templates/default/ 目录。
    • 找到你想修改的模板文件(如 index.html),用代码编辑器(如 VS Code, Sublime Text)打开并修改。
    • 注意:直接修改文件前,务必先备份!因为错误的代码可能导致网站无法正常显示。

PHPCMS 的默认模板是一个结构清晰、逻辑分明的系统,掌握其核心要点:

  • 目录结构: templates/模块/页面类型/模板文件
  • MVC 分离: 模板只负责展示,不处理逻辑。
  • 核心标签: {template} 用于布局,{pc:content}{pc:get} 用于数据,{loop} 用于循环。
  • 变量输出: 使用 {$var} 语法。

理解了这些,你就可以轻松地对 PHPCMS 默认模板进行修改,或者基于它创建一套全新的、个性化的网站模板。