PHPCMS 模板制作教程
PHPCMS 是一款基于 PHP+MySQL 开发的网站管理系统,其模板系统采用了类似 Smarty 的模板引擎语法,通过将 PHP 代码与 HTML 分离,让前端开发人员可以专注于页面设计和内容展示,而无需关心后端的复杂逻辑。

本教程将分为以下几个部分:
- 第一部分:核心概念 - 了解 PHPCMS 模板的基本构成。
- 第二部分:目录结构 - 模板文件应该放在哪里。
- 第三部分:常用模板标签 - 模板制作的“积木”。
- 第四部分:实战案例 - 从零开始制作一个首页模板。
- 第五部分:常用技巧与进阶 - 提升模板制作效率。
第一部分:核心概念
在开始制作模板之前,你需要理解 PHPCMS 模板的几个核心概念:
-
模板引擎:PHPCMS 使用自己的模板引擎来解析模板文件,它定义了一套特殊的标签(如
{php}、{if}、{loop}等),这些标签最终会被替换成 PHP 代码或实际的数据内容。 -
模板文件:通常是
.html后缀的文件,里面包含 HTML 代码和 PHPCMS 的模板标签。index.html、list.html、show.html等。
(图片来源网络,侵删) -
标签库:PHPCMS 将常用的功能封装成标签,方便调用,调用栏目、文章、图片等,这些标签通常以
{pc}开头。 -
变量:通过 符号来表示,用于显示从后台传递过来的单个数据,比如文章标题
{$title}。 -
模板风格:在 PHPCMS 后台,你可以为不同的站点设置不同的模板风格,一个风格就是一个完整的模板集合,包含了首页、列表页、内容页等所有页面。
第二部分:目录结构
模板文件需要存放在指定的目录下,PHPCMS 才能正确识别和加载。

标准的模板目录结构如下:
/phpcms/
└── templates/
└── 你的风格名称/ <-- 这是在后台“风格管理”中创建的风格名
├── index.html <-- 首页模板
├── list/ <-- 列表页目录
│ └── index.html <-- 默认列表页模板
│ └── 1.html <!-- ID为1的栏目的列表页 -->
│ └── 2.html <!-- ID为2的栏目的列表页 -->
├── show/ <!-- 内容页目录 -->
│ └── index.html <!-- 默认内容页模板
│ └── 1.html <!-- ID为1的栏目的内容页 -->
│ └── 2.html <!-- ID为2的栏目的内容页 -->
├── category.html <!-- 分类页(可选) -->
├── search.html <!-- 搜索页(可选) -->
└── ... <!-- 其他自定义页面 -->
操作步骤:
- 登录 PHPCMS 后台。
- 进入 ->
模板->风格管理。 - 点击
添加风格,输入一个风格名称(my_theme),然后保存。 - 通过 FTP 或服务器文件管理工具,在
/phpcms/templates/目录下创建一个与风格名同名的文件夹(my_theme)。 - 在这个文件夹里,按照上面的结构创建相应的
.html文件。
第三部分:常用模板标签
掌握以下标签,你就能完成大部分的模板制作工作。
调用栏目信息
这是最常用的功能,通常用于制作网站的导航栏。
{pc:get}
示例: 调用顶级栏目
<ul class="nav">
{pc:get sql="SELECT * FROM `phpcms_category` WHERE `parentid`=0 AND `menu`=1 ORDER BY `listorder` ASC" num="10" return="data"}
{loop $data $r}
<li><a href="{$r[url]}">{$r[catname]}</a></li>
{/loop}
{/pc}
</ul>
标签解析:
sql: 自定义的 SQL 查询语句。phpcms_category是栏目表。parentid=0: 表示调用顶级栏目。menu=1: 表示调用设置为“显示在导航栏”的栏目。num: 调用的记录数量。return="data": 将查询结果存入$data变量。{loop $data $r}: 循环遍历$data数组,每次循环将一条记录赋值给$r。{$r[catname]}: 输出栏目的名称。{$r[url]}: 输出栏目的链接,PHPCMS 会自动根据栏目类型(列表、外部链接等)生成正确的 URL。
调用文章列表
展示的核心。
{pc:get}
示例: 调用指定 ID 的栏目下的文章列表
<div class="news-list">
{pc:get sql="SELECT * FROM `phpcms_content` c LEFT JOIN `phpcms_content_position` p ON c.contentid = p.contentid WHERE c.catid=5 AND c.status=99 ORDER BY c.updatetime DESC" num="10" return="data"}
{loop $data $r}
<div class="news-item">
<h3><a href="{$r[url]}">{$r[title]}</a></h3>
<p class="summary">{$r[description]}</p>
<span class="time">{date('Y-m-d H:i:s', $r[inputtime])}</span>
</div>
{/loop}
{/pc}
</div>
标签解析:
catid=5: 调用 ID 为 5 的栏目下的文章。c.status=99: 只调用已发布的文章。LEFT JOIN ...: 关联内容表和内容推荐位表(如果需要)。ORDER BY c.updatetime DESC: 按更新时间倒序排列。{$r[title]}: 文章标题。{$r[description]}:{$r[url]}: 文章链接。{date(...)}: PHPCMS 内置的日期格式化函数,$r[inputtime]是文章的录入时间戳。
条件判断
{if} ... {else} ... {/if}
示例: 判断变量是否存在并显示不同的内容
{if $r['thumb']}
<img src="{$r[thumb]}" alt="{$r[title]}">
{else}
<img src="{STATIC_PATH}images/default.jpg" alt="默认图片">
{/if}
循环
{loop} ... {/loop}
示例: 循环输出数组
<ul>
{loop $nav_list $nav}
<li><a href="{$nav.url}">{$nav.name}</a></li>
{/loop}
</ul>
包含其他模板文件
{template "文件名", "风格名"}
示例: 包含网站的头部和底部
<!DOCTYPE html>
<html>
<head>{if isset($SEO['title'])}{$SEO['title']}{/if}</title>
<meta name="keywords" content="{if isset($SEO['keyword'])}{$SEO['keyword']}{/if}">
<meta name="description" content="{if isset($SEO['description'])}{$SEO['description']}{/if}">
</head>
<body>
<!-- 包含头部模板 -->
{template "header", "my_theme"}
<!-- 页面主要内容 -->
<div class="main-content">
{content}
</div>
<!-- 包含底部模板 -->
{template "footer", "my_theme"}
</body>
</html>
注意:
{content}是一个特殊标签,它会自动替换为当前页面(如列表页、内容页)的主体内容,通常我们会在index.html、list.html、show.html等主页面中使用它,然后将具体的列表或内容逻辑写在各自的模板文件中。
第四部分:实战案例:制作一个首页模板
假设我们要为 my_theme 风格制作一个首页,包含顶部导航、焦点图、新闻列表和页脚。
步骤 1:创建文件
在 /phpcms/templates/my_theme/ 目录下创建 index.html 文件。
步骤 2:编写模板代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">{if isset($SEO['title'])}{$SEO['title']}{else}我的网站{/if}</title>
<meta name="keywords" content="{if isset($SEO['keyword'])}{$SEO['keyword']}{/if}">
<meta name="description" content="{if isset($SEO['description'])}{$SEO['description']}{/if}">
<link rel="stylesheet" href="{STATIC_PATH}css/style.css">
</head>
<body>
<!-- 1. 顶部导航 -->
<div class="top-nav">
<ul>
{pc:get sql="SELECT * FROM `phpcms_category` WHERE `parentid`=0 AND `menu`=1 ORDER BY `listorder` ASC" num="10" return="nav"}
{loop $nav $r}
<li><a href="{$r[url]}">{$r[catname]}</a></li>
{/loop}
{/pc}
</ul>
</div>
<!-- 2. 焦点图 -->
<!-- 假设我们有一个推荐位,ID为1 -->
<div class="focus-slider">
{pc:get sql="SELECT a.* FROM `phpcms_content` a LEFT JOIN `phpcms_content_position` b ON a.contentid = b.contentid WHERE b.posid=1 AND a.status=99 ORDER BY b.listorder ASC" num="5" return="slides"}
{loop $slides $r}
<a href="{$r[url]}"><img src="{$r[thumb]}" alt="{$r[title]}"></a>
{/loop}
{/pc}
</div>
<!-- 3. 主体内容区 -->
<div class="main-container">
<!-- 左侧新闻列表 -->
<div class="main-left">
<h2>最新资讯</h2>
{pc:get sql="SELECT * FROM `phpcms_content` WHERE `catid`=5 AND `status`=99 ORDER BY `updatetime` DESC" num="10" return="news"}
<ul class="news-list">
{loop $news $r}
<li>
<span class="date">{date('m-d', $r[inputtime])}</span>
<a href="{$r[url]}">{$r[title]}</a>
</li>
{/loop}
</ul>
{/pc}
</div>
<!-- 右侧边栏 -->
<div class="main-right">
<!-- 热门文章 -->
<div class="sidebar-box">
<h3>热门文章</h3>
{pc:get sql="SELECT * FROM `phpcms_content` WHERE `catid`=5 AND `status`=99 ORDER BY `hits` DESC" num="10" return="hot"}
<ul>
{loop $hot $r}
<li><a href="{$r[url]}">{$r[title]}</a></li>
{/loop}
</ul>
{/pc}
</div>
</div>
</div>
<!-- 4. 页脚 -->
<div class="footer">
<p>Copyright © 2025 我的网站 All Rights Reserved.</p>
</div>
<script src="{STATIC_PATH}js/jquery.min.js"></script>
</body>
</html>
步骤 3:后台设置
- 进入 ->
首页管理。 - 选择你的站点和模板风格
my_theme。 - 在模板文件列表中,选择
index.html。 - 点击
更新或生成首页,这样 PHPCMS 就会使用你刚刚制作的模板来渲染首页。
第五部分:常用技巧与进阶
-
SEO 优化:
- 在模板的
<head>部分使用{$SEO['title']}、{$SEO['keyword']}、{$SEO['description']},这些变量会在后台设置页面自动填充。 - 在列表页和内容页,可以使用
{$SEO['title']} - {$site_name}这样的方式来组合标题。
- 在模板的
-
分页:
- 在列表页模板中,PHPCMS 会自动生成分页代码,你只需要在调用文章列表的
{pc}标签后,加上{pages}标签即可。 - 示例:
{pc:get ...} {loop ...}{/loop} {/pc} <div class="page">{$pages}</div>
- 在列表页模板中,PHPCMS 会自动生成分页代码,你只需要在调用文章列表的
-
调试:
- 如果想查看某个变量的具体内容,可以使用
{php var_dump($变量名)}或{php print_r($变量名)}来打印输出,方便调试。
- 如果想查看某个变量的具体内容,可以使用
-
静态化与生成:
- 模板制作完成后,需要在后台生成对应的页面,进入 ->
生成页面,你可以选择生成首页、栏目页、内容页等,静态化后的页面访问速度更快,对搜索引擎更友好。
- 模板制作完成后,需要在后台生成对应的页面,进入 ->
-
使用模型:
- 如果文章内容使用了自定义模型(文章增加了“作者”、“来源”等字段),调用方式不变,只需在 SQL 中选择对应的字段名即可,
{$r[author]}。
- 如果文章内容使用了自定义模型(文章增加了“作者”、“来源”等字段),调用方式不变,只需在 SQL 中选择对应的字段名即可,
PHPCMS 的模板制作核心在于熟练使用 {pc:get}、{loop}、{if} 等标签,并理解其目录结构和变量传递机制,多练习,多看官方默认模板的代码,很快就能掌握,希望这份教程对你有帮助!
