PHPCMS V9 模板引擎简介

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

phpcms v9中模板标签使用说明
(图片来源网络,侵删)

模板文件通常存放在 phpcms/templates/ 目录下,结构如下:

phpcms/
└── templates/
    └── default/          // 默认模板组
        ├── index/        // 首页模板目录
        │   └── index.html
        ├── content/      // 内容页模板目录
        │   └── show.html
        └── style/        // CSS、JS、图片等静态资源目录

核心标签详解

变量输出标签

用于在模板中输出 PHP 代码中赋值给模板的变量。

语法:

{$variable}

示例: 在 PHP 控制器中,您可能这样赋值:

phpcms v9中模板标签使用说明
(图片来源网络,侵删)
// 在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)

用于遍历数组或对象,是模板中最常用的标签之一。

phpcms v9中模板标签使用说明
(图片来源网络,侵删)

语法:

{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)}

最佳实践与技巧

  1. 使用模型而非原生SQL{pc:content} 标签虽然最终会生成 SQL,但它提供了更安全、更便捷的接口(如 catid, order 等),能更好地避免 SQL 注入风险。
  2. 合理使用缓存:对于不经常变动的列表数据(如首页、栏目页),务必设置 cache 参数,可以显著减轻数据库压力,加快页面加载速度。
  3. 保持模板整洁:尽量使用 {foreach}{if} 等标签,减少 {php} 代码的使用,让模板专注于表现,逻辑交给控制器。
  4. 注释:在复杂的模板中,可以使用 <!-- 这是注释 --> 来解释代码块的作用,方便后期维护。
  5. 变量调试:如果不确定某个变量是否存在或其值是什么,可以在模板中临时输出:
    <pre>{$variable}</pre>

    <pre> 标签可以保留变量格式(如数组的换行),方便查看。

希望这份详细的说明能帮助您熟练掌握 PHPCMS V9 的模板标签使用!