PHPCMS 的分页核心逻辑依赖于其内置的 pages 函数,这个函数会根据查询到的数据总数和每页显示数量,生成一个包含上一页、下一页、页码等链接的 HTML 字符串。

(图片来源网络,侵删)
整个过程可以分为以下几个步骤:
第一步:后台内容模型与栏目设置
在制作模板之前,必须确保后台的模型和栏目已经正确配置。
-
模型:
- 登录 PHPCMS 后台,进入 ->
内容模型管理。 - 新建一个模型,例如叫“图片集”,在这个模型中,你需要添加一个字段来存储图片路径,比如字段名为
pic,类型为“图片”。
- 登录 PHPCMS 后台,进入 ->
-
创建栏目:
(图片来源网络,侵删)- 进入 ->
栏目管理。 - 新建一个栏目,例如叫“图片展示”。
- 关键点:在创建栏目时,内容模型 要选择你刚刚创建的“图片集”模型。
- 列表模板:在这里指定你将要创建的模板文件名,
image_list.html。 - 列表条数:设置每页显示多少条内容,
10。
- 进入 ->
-
:
- 在“图片展示”栏目下,添加几条内容,填写你创建的
pic字段,上传图片。
- 在“图片展示”栏目下,添加几条内容,填写你创建的
第二步:创建模板文件
在你的模板目录(通常是 phpcms/templates/你的默认模板/)下,创建一个名为 image_list.html 的文件。
这个模板文件通常包含三个部分:
- 循环输出列表内容:使用
{loop}标签遍历从数据库中查询到的数据。 - 调用分页:使用
{$pages}变量输出分页链接。 - 必要的 PHP 代码:在模板文件开头,使用
{php}标签引入分页所需的类并执行查询。
下面是一个完整的 image_list.html 模板文件示例:

(图片来源网络,侵删)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">{if isset($SEO['title']) && $SEO['title']}{$SEO['title']}{/if}{$SEO['site_title']}</title>
<meta name="keywords" content="{if isset($SEO['keyword']) && $SEO['keyword']}{$SEO['keyword']}{/if}{$SEO['site_keyword']}" />
<meta name="description" content="{if isset($SEO['description']) && $SEO['description']}{$SEO['description']}{/if}{$SEO['site_description']}" />
</head>
<body>
<h1>图片列表</h1>
<!-- 循环输出列表内容 -->
{loop $data $r}
<div class="item">
<!--
这里调用你模型中定义的 'pic' 字段。
$r['pic'] 会得到图片路径,如 'uploads/images/2025/10/xxx.jpg'
-->
<img src="{$r['pic']}" alt="{$r['title']}">
<p>{$r['title']}</p>
</div>
{/loop}
<!-- 分页链接 -->
<div class="page">
{$pages}
</div>
</body>
</html>
第三步:编写 PHP 代码(核心部分)
PHPCMS 的模板引擎不能直接执行复杂的数据库查询和分页逻辑,我们需要在模板文件的开头使用 {php} 标签来编写 PHP 代码,完成以下任务:
- 引入分页类。
- 获取当前栏目 ID。
- 获取当前页码。
- 构建数据库查询条件。
- 执行查询,获取数据总数和当前页数据。
- 将数据传递给模板引擎进行循环。
将以下代码放在 image_list.html 文件的 最顶端,<html> 标签之前。
{php
// 1. 引入分页类
pc_base::load_app_class('page', 'content', 0);
// 2. 获取当前栏目ID和每页显示条数
// $_bclassid 是当前栏目的ID,在栏目列表页中可用
// $_GET['pagesize'] 可以从后台栏目设置中获取,这里我们直接写死或用变量获取
$catid = $_bclassid;
$pagesize = 10; // 最好能从后台设置中读取,这里为了方便直接写死
// 3. 获取当前页码
$page = isset($_GET['page']) ? intval($_GET['page']) : 1;
// 4. 构建查询条件
// 这里假设你的模型ID是1,请根据你的实际情况修改
// modelid可以在后台内容模型管理中看到
$modelid = 1;
// 获取栏目信息,用于确定模型ID和排序方式等
$category = get_cat($catid);
if (!$category) {
showmessage('栏目不存在');
}
// 确保模型ID正确
if ($category['modelid'] != $modelid) {
// 如果模型不匹配,可以调整或报错
// showmessage('模型ID不匹配');
}
// 5. 实例化数据模型并执行查询
// 'content' 是内容模型的数据表前缀,通常不用改
$db = pc_base::load_model('content_model');
// 构建where条件,这里只查询当前栏目下的内容,并且状态为99(已审核)
// 'posid' 和 'status' 是PHPCMS内容模型的常用字段
$where = "catid = '$catid' AND status = 99";
// 获取总数据条数
$total = $db->count($where);
// 实例化分页类
$page_obj = new page($total, $pagesize, $page, 'url');
// 获取分页链接
$pages = $page_obj->show();
// 获取当前页的数据
// order_by 根据你的需求排序,比如按发布时间降序
$data = $db->select($where, '*', $page_obj->firstRow, $page_obj->listRows, 'id DESC');
// 6. 将数据和分页变量传递给模板
// $data 将在 {loop} 标签中使用
// $pages 将在 {$pages} 变量中使用
}
代码详解:
pc_base::load_app_class('page', 'content', 0);: 加载 PHPCMS 内置的分页类。$_bclassid: 这是 PHPCMS 模板中的一个全局变量,代表当前栏目的 ID,在列表页模板中可以直接使用。$pagesize: 每页显示的条数,为了灵活性,最好能从后台栏目的“列表条数”设置中读取,但直接写死在这里最简单。$page: 获取 URL 中的page参数,表示当前是第几页。get_cat($catid): PHPCS 内置函数,根据栏目 ID 获取栏目的详细信息,包括模型 ID 等。pc_base::load_model('content_model');: 加载内容模型的数据操作类。$db->count($where): 查询符合条件的数据总数。new page(...): 初始化分页对象,需要传入总数、每页条数和当前页码。$page_obj->show(): 生成完整的分页 HTML 代码。$db->select(...): 执行查询,获取当前页的数据。$where: 查询条件,这里我们只查询当前栏目 (catid) 和已审核 (status) 的内容。$page_obj->firstRow: 当前页数据的起始位置。$page_obj->listRows: 每页显示的条数。'id DESC': 按ID降序排列,你也可以按其他字段如inputtime DESC(按发布时间降序)。
{$data}和{$pages}: 在{php}代码块中定义的变量,会自动传递给模板引擎,供后面的模板代码使用。
第四步:样式调整
你会发现,{$pages} 生成的分页链接样式可能比较朴素,你可以通过 CSS 来美化它,PHPCMS 默认会生成类似这样的 HTML:
<div class="page">
<a href="/index.php?m=content&c=index&a=lists&catid=1&page=1">首页</a>
<a href="/index.php?m=content&c=index&a=lists&catid=1&page=1">上一页</a>
<strong>1</strong>
<a href="/index.php?m=content&c=index&a=lists&catid=1&page=2">2</a>
<a href="/index.php?m=content&c=index&a=lists&catid=1&page=3">3</a>
...
<a href="/index.php?m=content&c=index&a=lists&catid=1&page=2">下一页</a>
<a href="/index.php?m=content&c=index&a=lists&catid=1&page=10">尾页</a>
</div>
你可以在你的 CSS 文件中添加如下样式来美化它:
.page {
margin: 20px 0;
text-align: center;
}
.page a, .page strong {
margin: 0 5px;
padding: 5px 10px;
border: 1px solid #ddd;
text-decoration: none;
color: #333;
}
.page a:hover {
background-color: #f0f0f0;
}
.page strong {
background-color: #007bff;
color: #fff;
border-color: #007bff;
}
实现 PHPCMS 图片模板分页的核心流程是:
- 后台配置:创建模型、栏目,并设置好“列表条数”和“列表模板”。
- 模板文件:创建
.html文件,使用{loop}循环输出数据,用{$pages}显示分页。 - PHP 逻辑:在模板文件顶部用
{php}标签引入分页类,获取参数,执行数据库查询,并将数据和分页信息传递给模板。 - CSS 美化:为分页链接添加 CSS 样式,使其更美观。
按照这个步骤,你就可以成功地在 PHPCMS 中实现一个功能完整的图片列表分页了。
