PHPCMS V9 模板制作教程
PHPCMS V9 是一款基于 PHP+MySQL 开发的网站管理系统,其模板系统非常灵活,采用了类似 MVC 的思想,将数据逻辑与前端展示分离,理解这一点是制作模板的关键。

核心概念:理解 PHPCMS V9 的模板结构
在开始之前,你必须先理解 PHPCMS V9 的几个核心文件和目录,它们共同构成了模板的骨架。
-
模板目录 (
/templates/)- 这是存放所有网站模板文件的地方,我们会为每个站点创建一个独立的文件夹,
/templates/default/。
- 这是存放所有网站模板文件的地方,我们会为每个站点创建一个独立的文件夹,
-
模板文件 (
.html)- 这些是纯 HTML 文件,但其中嵌入了 PHPCMS 的模板标签,它们负责页面的最终呈现。
index.html(首页),category.html(栏目页),show.html(内容页)。
-
配置文件 (
config.php)
(图片来源网络,侵删)- 位于模板目录下,是整个模板的“大脑”,它定义了这个模板的名称、作者、版权信息,以及最重要的——页面模块。
- 页面模块:将一个页面(如首页)拆分成多个可复用的部分,
header(页头),footer(页脚),index_left(首页左侧),index_right(首页右侧) 等,这样,你就可以像搭积木一样组合页面。
-
样式和脚本目录 (
/statics/)- 存放 CSS 文件、JavaScript 文件、图片、字体等静态资源。
- 建议在
/statics/下创建与模板同名的目录,如/statics/default/,以避免多套模板间的样式冲突。
一个最简单的模板目录结构示例:
/phpcms/
├── templates/
│ └── my_template/ <-- 你的模板文件夹
│ ├── config.php <-- 模块配置文件
│ ├── index.html <-- 首页模板
│ ├── header.html <-- 公共页头
│ ├── footer.html <-- 公共页脚
│ └── ... (其他页面)
└── statics/
└── my_template/ <-- 你的模板静态资源
├── css/
│ └── style.css
├── js/
│ └── jquery.min.js
└── images/
└── logo.png
模板标签详解
模板标签是 PHPCMS V9 模板的核心,它用来调用数据、执行逻辑。
变量输出标签
{变量名}:最简单的变量输出。- 在
config.php中定义$template_name = '我的模板';,在模板中就可以用{template_name}来输出。
- 在
循环输出标签 (最常用)
用于从数据库中查询并输出一组数据,比如文章列表、产品列表等。
{loop $data $key $val}...{/loop}$data:通常是模型查询后返回的数据数组。$key:当前循环的键(索引),可选。$val:当前循环的单条数据,是一个数组,通过$val['字段名']来访问具体值。
示例:输出文章列表
假设你已经在控制器中获取了文章列表数据,并将其赋值给了变量 $article_list。
<ul>
{loop $article_list $key $article}
<li>
<a href="{$article['url']}">{$article['title']}</a>
<span class="date">{date('Y-m-d', $article['inputtime'])}</span>
</li>
{/loop}
</ul>
$article['url']:调用文章的URL,PHPCMS会自动生成。$article['title']:调用文章标题。$article['inputtime']:调用文章发布时间(Unix时间戳),我们用{date}函数将其格式化为年-月-日。
条件判断标签
根据条件输出不同的内容。
{if condition}...{elseif condition}...{else}...{/if}
示例:根据栏目ID显示不同内容
{if $catid == 1}
<h2>这是公司简介栏目</h2>
{elseif $catid == 2}
<h2>这是产品中心栏目</h2>
{else}
<h2>其他栏目</h2>
{/if}
函数标签
PHPCMS 提供了大量内置函数来处理数据,直接在变量后使用 分隔。
{变量|函数名}{变量|函数名1|函数名2}(可以链式调用)
常用函数:
date:格式化时间戳。{inputtime|date='Y-m-d H:i:s'}str_cut:截取字符串。{title|str_cut='20'}(截取标题前20个字符)urlencode:URL编码。substr:截取子字符串。round:四舍五入。
其他常用标签
-
{template "模块名", "文件名"}:引入公共模板文件。{template "header", "header"}会引入/templates/当前模板/header/header.html文件,这是实现页头、页尾复用的标准方法。
-
{linkage(别名)}:联动下拉菜单,需要先在后台“扩展”->“联动菜单”中创建。 -
{form}:用于生成表单,常用于评论、留言等功能。
实战:制作一个简单的首页模板
让我们从头开始,制作一个包含页头、幻灯片、文章列表和页脚的首页。
步骤 1:创建目录和文件
按照上面提到的目录结构,创建好 my_template 目录及其子目录和文件。
/templates/my_template/
├── config.php
├── index.html
├── header.html
├── footer.html
/statics/my_template/
├── css/style.css
└── images/
步骤 2:编写 config.php
这是告诉 PHPCMS 你的模板结构。
<?php
return array(
'name' => '我的第一个模板', // 模板名称
'author' => 'Your Name', // 作者
'copyright' => 'Copyright', // 版权
'version' => '1.0', // 版本号
// 定义页面模块
'modules' => array(
'header' => array('name' => '页头', 'file' => 'header'),
'footer' => array('name' => '页脚', 'file' => 'footer'),
// 其他模块...
),
// 定义页面
'pages' => array(
'index' => array(
'name' => '首页', // 页面名称
'modules' => array('header', 'index_banner', 'index_news', 'footer'), // 页面包含的模块
),
),
);
注意:我们定义了 index_banner 和 index_news 模块,但还没有创建对应的 .html 文件,我们可以直接在 index.html 中编写它们的内容,或者创建独立的文件,为了简单,我们先写在 index.html 里。
步骤 3:编写公共模板 header.html 和 footer.html
/templates/my_template/header.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">{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}">
<link rel="stylesheet" type="text/css" href="{CSS_PATH}my_template/css/style.css">
</head>
<body>
<div class="header">
<div class="logo"><img src="{IMG_PATH}my_template/images/logo.png" alt="Logo"></div>
<div class="nav">
<!-- 这里通常会调用栏目列表,稍后会讲 -->
<a href="{siteurl()}">首页</a>
<a href="#">关于我们</a>
<a href="#">产品中心</a>
<a href="#">联系我们</a>
</div>
</div>
<div class="main-content">
/templates/my_template/footer.html:
</div> <!-- .main-content 结束 -->
<div class="footer">
<p>Copyright © {date('Y')} Your Company All Rights Reserved.</p>
</div>
</body>
</html>
{CSS_PATH}, {IMG_PATH}, {siteurl()} 都是 PHPCMS 的内置路径标签,能自动获取正确的CSS、图片和网站根目录地址。
步骤 4:编写首页模板 index.html
这个文件将把所有模块组合起来。
{template "header", "header"} <!-- 引入页头 -->
<!-- 幻灯片模块 -->
<div class="banner">
<!-- 幻灯片通常需要JS实现,这里用伪代码表示 -->
<!-- {loop $slide $key $item} -->
<!-- <img src="{$item['image']}" alt="{$item['title']}"> -->
<!-- {/loop} -->
<div style="height:300px; background:#ccc; text-align:center; line-height:300px;">幻灯片区域</div>
</div>
<!-- 文章列表模块 -->
<div class="news-list">
<h2>公司新闻</h2>
<ul>
<!-- 调用新闻列表数据 -->
<!-- 假设控制器把数据赋给了变量 $news_list -->
{loop $news_list $key $news}
<li>
<a href="{$news['url']}">{$news['title']}</a>
<span class="date">{date('Y-m-d', $news['inputtime'])}</span>
</li>
{/loop}
</ul>
</div>
{template "footer", "footer"} <!-- 引入页脚 -->
步骤 5:后台设置
- 上传模板:将制作好的整个
my_template文件夹通过FTP上传到/templates/目录下。 - 选择模板:登录 PHPCMS 后台,进入“内容” -> “模板风格”,点击“更新缓存”,然后你应该能看到你的“我的第一个模板”,点击“使用”即可。
- 关联数据:模板本身是静态的,你需要创建栏目和内容,创建一个“公司新闻”栏目,模型选择“文章”,然后在首页模板中调用这个栏目的内容,调用方式通常是通过
pc_base::load_app_class('content', 'content');等PHP代码在控制器中获取数据,然后传递给模板。
进阶技巧与注意事项
-
$SEO变量:$SEO['title'],$SEO['keyword'],$SEO['description']这三个变量用于动态设置页面的标题、关键词和描述,对SEO非常重要,它们通常由系统根据当前栏目或文章信息自动生成。 -
缓存机制:PHPCMS 对模板有缓存,当你修改了模板文件后,需要到后台“更新缓存”才能看到效果。
-
模块化开发:对于复杂的页面(如首页),强烈建议将不同的功能块(如幻灯片、推荐位、图文列表)拆分成独立的
.html文件(如banner.html,recommend.html),然后在index.html中用{template "模块名", "文件名"}的方式引入,这样代码结构更清晰,易于维护。 -
调试:如果标签不生效,可以先检查:
- 变量名是否正确(区分大小写)。
- 控制器中是否正确地将数据传递给了模板。
- 后台是否更新了缓存。
- 检查PHP错误日志,看是否有语法错误。
-
官方资源:
- PHPCMS 官方论坛:https://bbs.phpcms.cn/,遇到问题可以在这里搜索或提问。
- 官方文档:虽然旧版文档可能不完善,但依然是重要的参考资料。
这份教程涵盖了 PHPCMS V9 模板制作的核心流程和知识点,多动手实践,从修改默认模板开始,逐步尝试自己从零搭建一个模板,很快就能熟练掌握,祝你成功!
