PHPCMS 模板制作教程

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

phpcms 的模板制作教程
(图片来源网络,侵删)

本教程将分为以下几个部分:

  1. 第一部分:核心概念 - 了解 PHPCMS 模板的基本构成。
  2. 第二部分:目录结构 - 模板文件应该放在哪里。
  3. 第三部分:常用模板标签 - 模板制作的“积木”。
  4. 第四部分:实战案例 - 从零开始制作一个首页模板。
  5. 第五部分:常用技巧与进阶 - 提升模板制作效率。

第一部分:核心概念

在开始制作模板之前,你需要理解 PHPCMS 模板的几个核心概念:

  1. 模板引擎:PHPCMS 使用自己的模板引擎来解析模板文件,它定义了一套特殊的标签(如 {php}{if}{loop} 等),这些标签最终会被替换成 PHP 代码或实际的数据内容。

  2. 模板文件:通常是 .html 后缀的文件,里面包含 HTML 代码和 PHPCMS 的模板标签。index.htmllist.htmlshow.html 等。

    phpcms 的模板制作教程
    (图片来源网络,侵删)
  3. 标签库:PHPCMS 将常用的功能封装成标签,方便调用,调用栏目、文章、图片等,这些标签通常以 {pc} 开头。

  4. 变量:通过 符号来表示,用于显示从后台传递过来的单个数据,比如文章标题 {$title}

  5. 模板风格:在 PHPCMS 后台,你可以为不同的站点设置不同的模板风格,一个风格就是一个完整的模板集合,包含了首页、列表页、内容页等所有页面。


第二部分:目录结构

模板文件需要存放在指定的目录下,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       <!-- 搜索页(可选) -->
        └── ...               <!-- 其他自定义页面 -->

操作步骤:

  1. 登录 PHPCMS 后台。
  2. 进入 -> 模板 -> 风格管理
  3. 点击 添加风格,输入一个风格名称(my_theme),然后保存。
  4. 通过 FTP 或服务器文件管理工具,在 /phpcms/templates/ 目录下创建一个与风格名同名的文件夹(my_theme)。
  5. 在这个文件夹里,按照上面的结构创建相应的 .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.htmllist.htmlshow.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 &copy; 2025 我的网站 All Rights Reserved.</p>
  </div>
  <script src="{STATIC_PATH}js/jquery.min.js"></script>
</body>
</html>

步骤 3:后台设置

  1. 进入 -> 首页管理
  2. 选择你的站点和模板风格 my_theme
  3. 在模板文件列表中,选择 index.html
  4. 点击 更新生成首页,这样 PHPCMS 就会使用你刚刚制作的模板来渲染首页。

第五部分:常用技巧与进阶

  1. SEO 优化

    • 在模板的 <head> 部分使用 {$SEO['title']}{$SEO['keyword']}{$SEO['description']},这些变量会在后台设置页面自动填充。
    • 在列表页和内容页,可以使用 {$SEO['title']} - {$site_name} 这样的方式来组合标题。
  2. 分页

    • 在列表页模板中,PHPCMS 会自动生成分页代码,你只需要在调用文章列表的 {pc} 标签后,加上 {pages} 标签即可。
    • 示例:
      {pc:get ...}
        {loop ...}{/loop}
      {/pc}
      <div class="page">{$pages}</div>
  3. 调试

    • 如果想查看某个变量的具体内容,可以使用 {php var_dump($变量名)}{php print_r($变量名)} 来打印输出,方便调试。
  4. 静态化与生成

    • 模板制作完成后,需要在后台生成对应的页面,进入 -> 生成页面,你可以选择生成首页、栏目页、内容页等,静态化后的页面访问速度更快,对搜索引擎更友好。
  5. 使用模型

    • 如果文章内容使用了自定义模型(文章增加了“作者”、“来源”等字段),调用方式不变,只需在 SQL 中选择对应的字段名即可,{$r[author]}

PHPCMS 的模板制作核心在于熟练使用 {pc:get}{loop}{if} 等标签,并理解其目录结构和变量传递机制,多练习,多看官方默认模板的代码,很快就能掌握,希望这份教程对你有帮助!