PHPCMS V9 模板制作教程

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

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

核心概念:理解 PHPCMS V9 的模板结构

在开始之前,你必须先理解 PHPCMS V9 的几个核心文件和目录,它们共同构成了模板的骨架。

  1. 模板目录 (/templates/)

    • 这是存放所有网站模板文件的地方,我们会为每个站点创建一个独立的文件夹,/templates/default/
  2. 模板文件 (.html)

    • 这些是纯 HTML 文件,但其中嵌入了 PHPCMS 的模板标签,它们负责页面的最终呈现。
    • index.html (首页), category.html (栏目页), show.html (内容页)。
  3. 配置文件 (config.php)

    phpcms v9模板制作教程
    (图片来源网络,侵删)
    • 位于模板目录下,是整个模板的“大脑”,它定义了这个模板的名称、作者、版权信息,以及最重要的——页面模块
    • 页面模块:将一个页面(如首页)拆分成多个可复用的部分,header (页头), footer (页脚), index_left (首页左侧), index_right (首页右侧) 等,这样,你就可以像搭积木一样组合页面。
  4. 样式和脚本目录 (/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_bannerindex_news 模块,但还没有创建对应的 .html 文件,我们可以直接在 index.html 中编写它们的内容,或者创建独立的文件,为了简单,我们先写在 index.html 里。

步骤 3:编写公共模板 header.htmlfooter.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 &copy; {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:后台设置

  1. 上传模板:将制作好的整个 my_template 文件夹通过FTP上传到 /templates/ 目录下。
  2. 选择模板:登录 PHPCMS 后台,进入“内容” -> “模板风格”,点击“更新缓存”,然后你应该能看到你的“我的第一个模板”,点击“使用”即可。
  3. 关联数据:模板本身是静态的,你需要创建栏目和内容,创建一个“公司新闻”栏目,模型选择“文章”,然后在首页模板中调用这个栏目的内容,调用方式通常是通过 pc_base::load_app_class('content', 'content'); 等PHP代码在控制器中获取数据,然后传递给模板。

进阶技巧与注意事项

  1. $SEO 变量$SEO['title'], $SEO['keyword'], $SEO['description'] 这三个变量用于动态设置页面的标题、关键词和描述,对SEO非常重要,它们通常由系统根据当前栏目或文章信息自动生成。

  2. 缓存机制:PHPCMS 对模板有缓存,当你修改了模板文件后,需要到后台“更新缓存”才能看到效果。

  3. 模块化开发:对于复杂的页面(如首页),强烈建议将不同的功能块(如幻灯片、推荐位、图文列表)拆分成独立的 .html 文件(如 banner.html, recommend.html),然后在 index.html 中用 {template "模块名", "文件名"} 的方式引入,这样代码结构更清晰,易于维护。

  4. 调试:如果标签不生效,可以先检查:

    • 变量名是否正确(区分大小写)。
    • 控制器中是否正确地将数据传递给了模板。
    • 后台是否更新了缓存。
    • 检查PHP错误日志,看是否有语法错误。
  5. 官方资源

    • PHPCMS 官方论坛https://bbs.phpcms.cn/,遇到问题可以在这里搜索或提问。
    • 官方文档:虽然旧版文档可能不完善,但依然是重要的参考资料。

这份教程涵盖了 PHPCMS V9 模板制作的核心流程和知识点,多动手实践,从修改默认模板开始,逐步尝试自己从零搭建一个模板,很快就能熟练掌握,祝你成功!