PHPCMS V9 模板引擎简介
PHPCMS V9 的模板引擎采用 {$variable} 和 {php code} 等标签形式,将 PHP 代码与 HTML 模板分离,使得前端开发者可以专注于页面布局和样式,而后端开发者则负责数据处理和逻辑。

模板文件通常存放在 phpcms/templates/ 目录下,结构如下:
phpcms/
└── templates/
└── default/ // 默认模板组
├── index/ // 首页模板目录
│ └── index.html
├── content/ // 内容页模板目录
│ └── show.html
└── style/ // CSS、JS、图片等静态资源目录
核心标签详解
变量输出标签
用于在模板中输出 PHP 代码中赋值给模板的变量。
语法:
{$variable}
示例: 在 PHP 控制器中,您可能这样赋值:

// 在phpcms/modules/content/index.php的index方法中
$this->assign('title', '欢迎来到我的网站');
$this->assign('username', '张三');
在模板文件 index.html 中,您就可以这样使用:
<h1>{$title}</h1>
<p>欢迎您,{$username}!</p>
输出数组:
// PHP中
$user_info = array('name' => '李四', 'age' => 25);
$this->assign('user', $user_info);
<!-- 模板中 -->
<p>姓名:{$user['name']}</p>
<p>年龄:{$user['age']}</p>
输出对象属性:
// PHP中
class User {
public $name = '王五';
}
$this->assign('user_obj', new User());
<!-- 模板中 -->
<p>姓名:{$user_obj->name}</p>
循环标签 (foreach)
用于遍历数组或对象,是模板中最常用的标签之一。

语法:
{foreach $array as $key => $value}
<!-- 循环体 -->
{$key} => {$value}
{/foreach}
如果只需要值,可以简化为:
{foreach $array as $value}
<!-- 循环体 -->
{$value}
{/foreach}
示例:
// PHP中
$article_list = array(
array('id' => 1, 'title' => '文章1'),
array('id' => 2, 'title' => '文章2'),
array('id' => 3, 'title' => '文章3')
);
$this->assign('articles', $article_list);
<!-- 模板中 -->
<ul>
{foreach $articles as $article}
<li>
<a href="{$article['url']}">{$article['title']}</a>
</li>
{/foreach}
</ul>
条件判断标签 (if)
根据条件执行不同的 HTML 代码块。
语法:
{if condition}
<!-- 条件为真时执行 -->
{else if condition}
<!-- 其他条件为真时执行 -->
{else}
<!-- 所有条件都为假时执行 -->
{/if}
支持的运算符:
- (等于)
- 或
<>(不等于) >(大于)<(小于)>=(大于等于)<=(小于等于)&&或and(- 或
or(或者) - (非)
示例:
{if $user['age'] >= 18}
<p>您已成年,可以访问此内容。</p>
{else if $user['age'] > 0}
<p>您尚未成年。</p>
{else}
<p>年龄信息无效。</p>
{/if}
PHP 代码标签
当内置标签无法满足复杂逻辑时,可以直接在模板中嵌入 PHP 代码。
语法:
{php
// 在这里写PHP代码
$a = 1;
$b = 2;
$c = $a + $b;
}
<p>计算结果:{$c}</p>
注意: 过度使用 {php} 会使模板与业务逻辑耦合,难以维护,应尽量使用 PHPCMS 提供的其他标签。
系统变量
PHPCMS 提供了许多系统预定义变量,方便获取网站的全局信息。
| 变量名 | 说明 | 示例 |
|---|---|---|
$site |
网站基本配置信息 | {$site['site_name']} (网站名称) |
$category |
当前栏目信息 | {$category['catname']} (栏目名称) |
$content |
信息 | {$content['title']} (文章标题) |
$SEO |
SEO相关信息 | {$SEO['title']} (SEO标题) |
$public |
公共路径信息 | {$public['r']} {$public['theme']} |
示例:
<h1>{$site['site_name']}</h1>
<meta name="keywords" content="{$SEO['keyword']}">
<meta name="description" content="{$SEO['description']}">
列表数据循环标签 (v9特有)
这是 PHPCMS V9 中极其重要的标签,用于调用模型数据,如文章列表、产品列表等。
语法:
{pc:get sql="SQL语句" cache="缓存时间" num="显示数量" page="$page" return="data"}
{loop $data $r}
<!-- 循环体,$r 是单条数据 -->
{/loop}
{/pc}
参数说明:
sql: 必填,要执行的 SQL 查询语句。强烈推荐使用模型,而不是直接写SQL。cache: 可选,缓存时间,单位为秒,设为0表示不缓存,3600表示缓存1小时,合理使用缓存可以极大提升网站性能。num: 可选,获取的数据条数。page: 可选,是否开启分页,如果使用,需要传递page变量。return: 可选,返回数据的变量名,默认为data。
示例1:调用文章列表(推荐使用模型方式)
{pc:content action="lists" catid="1" num="10" order="id DESC" cache="3600"}
{loop $data $r}
<li>
<a href="{$r['url']}">{$r['title']}</a>
<span>{date('Y-m-d', $r['inputtime'])}</span>
</li>
{/loop}
{/pc}
action="lists": 表示调用内容模型。catid="1": 表示调用 ID 为 1 的栏目下的内容。num="10": 表示调用 10 条。order="id DESC": 表示按 ID 降序排列。{$r['url']}: PHPCMS 会自动为内容生成 URL,非常方便。
示例2:开启分页
{pc:content action="lists" catid="1" num="10" order="id DESC" page="$page" cache="3600"}
{loop $data $r}
<li><a href="{$r['url']}">{$r['title']}</a></li>
{/loop}
<!-- 分页代码 -->
<div class="page">
{$pages}
</div>
{/pc}
page="$page": 开启分页。{$pages}: PHPCMS 会自动生成分页 HTML 代码。
模板包含标签
用于在一个模板文件中引入另一个模板文件,实现模块化开发。
语法:
{template "模板文件名", "模板组"}
如果省略模板组,则默认为当前模板组。
示例:
假设您的网站有统一的头部 header.html 和底部 footer.html。
{template "header", "default"}
<!-- 页面主要内容 -->
<h1>这里是首页内容</h1>
{template "footer", "default"}
其他常用标签
-
日期格式化:
{date('Y-m-d H:i:s', $content['inputtime'])} -
截取字符串:
{str_cut($content['title'], 30, '...')}30: 截取长度。- '...': 超出长度的后缀。
-
自定义函数: 如果在
phpcms/libs/functions/extention.func.php文件中定义了一个函数my_function(),可以在模板中直接调用:{my_function($param)}
最佳实践与技巧
- 使用模型而非原生SQL:
{pc:content}标签虽然最终会生成 SQL,但它提供了更安全、更便捷的接口(如catid,order等),能更好地避免 SQL 注入风险。 - 合理使用缓存:对于不经常变动的列表数据(如首页、栏目页),务必设置
cache参数,可以显著减轻数据库压力,加快页面加载速度。 - 保持模板整洁:尽量使用
{foreach}和{if}等标签,减少{php}代码的使用,让模板专注于表现,逻辑交给控制器。 - 注释:在复杂的模板中,可以使用
<!-- 这是注释 -->来解释代码块的作用,方便后期维护。 - 变量调试:如果不确定某个变量是否存在或其值是什么,可以在模板中临时输出:
<pre>{$variable}</pre><pre>标签可以保留变量格式(如数组的换行),方便查看。
希望这份详细的说明能帮助您熟练掌握 PHPCMS V9 的模板标签使用!
