php显示页码分页类的封装

yizhihongxing

下面是关于“php显示页码分页类的封装”的详细攻略,大致包含以下几个步骤:

一、准备工作

在开始封装分页类之前,我们需要准备好以下工作:

  1. 确定要进行分页的数据总数 $total
  2. 每一页要显示的记录数 $per_page
  3. 确定当前页码数 $current_page
  4. 计算总页数 $total_pages

二、分页类的设计和封装

在分页类的设计过程中,我们需要考虑以下几个方面:

  1. 构造函数:需要传入 $total$per_page$current_page 三个参数,并计算出 $total_pages 总页数;
  2. 显示页码:根据参数 $range 确定显示多少个页码,需要考虑当前页的位置;
  3. 构造 SQL 语句:需要传入 $offset$per_page 两个参数,构造 SQL 语句;
  4. 返回数据:返回当前页的所有数据;
  5. 封装到工具类:将分页类封装到工具类中,方便使用。

以下是一个简单的示例:

class Pagination {
  protected $total;
  protected $per_page;
  protected $current_page;
  protected $total_pages;

  public function __construct($total, $per_page, $current_page) {
    $this->total = $total;
    $this->per_page = $per_page;
    $this->current_page = $current_page;
    $this->total_pages = ceil($total / $per_page);
  }

  public function getPaginationLinks($range = 5) {
    $links = '';
    $half_range = floor($range / 2);

    $start = max(1, $this->current_page - $half_range);
    $end = min($this->total_pages, $this->current_page + $half_range);

    if ($this->current_page > 1) {
      $links .= sprintf('<a href="?page=%s">%s</a>', $this->current_page - 1, '<');
    }

    for ($i = $start; $i <= $end; $i++) {
      if ($i == $this->current_page) {
        $links .= sprintf('<span class="current">%s</span>', $i);
      } else {
        $links .= sprintf('<a href="?page=%s">%s</a>', $i, $i);
      }
    }

    if ($this->current_page < $this->total_pages) {
      $links .= sprintf('<a href="?page=%s">%s</a>', $this->current_page + 1, '>');
    }

    return $links;
  }

  public function getPaginationData($offset = 0) {
    $sql = sprintf('SELECT * FROM my_table LIMIT %d,%d', $offset, $this->per_page);
    // execute SQL and return result
  }
}

class Paginator {
  public static function paginate($total, $per_page, $current_page) {
    $pagination = new Pagination($total, $per_page, $current_page);
    return [
      'links' => $pagination->getPaginationLinks(),
      'data' => $pagination->getPaginationData(($current_page - 1) * $per_page)
    ];
  }
}

以上代码中,我们分别封装了 Pagination 类和 Paginator 工具类。Pagination 类用于处理分页相关的逻辑,Paginator 工具类则将 Pagination 类封装一层,方便使用。

三、使用示例

通过 Paginator 工具类调用 paginate 方法,即可获取到包含分页链接和数据的数组。以下是一个简单的使用示例:

// 获取 GET 参数中的页码
$current_page = isset($_GET['page']) ? intval($_GET['page']) : 1;

// 数据总数
$total = 100;

// 每页数据数量
$per_page = 10;

// 获取分页链接和数据
$data = Paginator::paginate($total, $per_page, $current_page);

// 将分页链接插入 HTML 中
echo '<div class="pagination-links">' . $data['links'] . '</div>';

// 显示数据
foreach ($data['data'] as $row) {
  // 输出 HTML 数据
}

以上示例中,我们首先获取传入的页码数,并设置数据总数和每页数据数量。然后使用 Paginator::paginate 方法获取到包含分页链接和数据的数组,最后将分页链接插入 HTML 中,以及输出数据。

另外一个使用示例,请参考下面的查询用户列表代码:

$conn = new mysqli('localhost', 'root', '', 'test');
if ($conn->connect_error) {
    die('连接失败: ' . $conn->connect_error);
}
$conn->set_charset('utf8mb4');

$sql = 'SELECT COUNT(*) AS count FROM users';
$result = $conn->query($sql);
$count = $result->fetch_assoc()['count'];

$current_page = isset($_GET['page']) ? intval($_GET['page']) : 1;
$per_page = 10;
$pager = Paginator::paginate($count, $per_page, $current_page);

?>

<table>
  <thead>
    <tr>
      <th>ID</th>
      <th>用户名</th>
      <th>Email</th>
    </tr>
  </thead>
  <tbody>
    <?php foreach ($pager['data'] as $user): ?>
    <tr>
      <td><?php echo $user['id']; ?></td>
      <td><?php echo $user['name']; ?></td>
      <td><?php echo $user['email']; ?></td>
    </tr>
    <?php endforeach; ?>
  </tbody>
</table>
<div class="pagination-links"><?php echo $pager['links']; ?></div>

以上代码使用了 mysqli 扩展库获取到用户数量,然后使用 Paginator::paginate 方法获取到包含分页链接和数据的数组,最后输出用户列表和分页链接。

希望以上攻略对您有所帮助!

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php显示页码分页类的封装 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • 十二个常见的PHP+MySql类免费CMS系统

    作为网站的作者,我将详细介绍“十二个常见的PHP+MySql类免费CMS系统”的攻略,下面将分为以下主要部分来介绍: 简介 安装步骤 常见问题 示例说明 简介 “十二个常见的PHP+MySql类免费CMS系统”是指在免费软件和开源软件中,广泛使用的12种基于 PHP + MySQL 技术构建的内容管理系统(CMS)。这些CMS系统结构简单、易于安装和维护,用…

    PHP 2023年5月23日
    00
  • php基础设计模式大全(注册树模式、工厂模式、单列模式)

    下面我来详细讲解PHP基础设计模式大全中的三种设计模式:注册树模式、工厂模式和单例模式。 注册树模式 注册树模式是一种解决全局共享和交换对象信息的方法,可以通过一个全局的静态类来管理所有对象的创建和使用。这种模式的核心在于使用一个全局的Registry类来维护所有对象的引用,以便全局共享和使用对象。 下面是一个使用注册树模式的代码示例: class Regi…

    PHP 2023年5月23日
    00
  • 超级简单的php+mysql留言本源码

    我来说一下“超级简单的php+mysql留言本源码”的完整攻略吧。 环境准备 首先,你需要有一台安装有 Apache 服务器、MySQL 数据库以及 PHP 的电脑,或者使用各种云服务器也可以。我在这里使用的是 XAMPP 工具,它可以快速建立 PHP 开发环境,可以在 XAMPP官网 下载安装。 安装数据库 接下来需要安装数据库,打开 phpMyAdmin…

    PHP 2023年5月24日
    00
  • php数组函数序列之array_sum() – 计算数组元素值之和

    PHP数组函数序列之array_sum() – 计算数组元素值之和 什么是array_sum()? array_sum()函数是PHP中一个用于计算数组元素和的函数。 语法 array_sum(array $array):float 参数 $array : 输入的数组 返回值 该函数返回一个整个数组所有元素值之和的总和,如果输入的不是数值型,则这个变量将被计…

    PHP 2023年5月26日
    00
  • php array_filter除去数组中的空字符元素

    当我们遍历数组时,有时候需要剔除数组中的空字符元素以得到有效数据。array_filter() 函数可以帮助我们完成这项任务。 函数原型 在介绍使用方法前,先看一下该函数的原型: array array_filter ( array $input [, callable $callback [, int $flag = 0 ]] ) 参数说明 $input:…

    PHP 2023年5月26日
    00
  • PHP正则验证字符串是否为数字的两种方法并附常用正则

    下面详细讲解“PHP正则验证字符串是否为数字的两种方法并附常用正则”的攻略。 一、什么是正则表达式 正则表达式是一种用来进行字符串匹配的强大工具。PHP 提供了 PCRE (Perl Compatible Regular Expressions) 正则表达式函数库,使用这些函数可以使用完整的 Perl 正则表达式语法。 二、正则验证字符串是否为数字的两种方法…

    PHP 2023年5月26日
    00
  • php 无限级分类,超级简单的无限级分类,支持输出树状图

    下面我来给你详细讲解“PHP无限级分类”攻略。 简介 无限级分类是一个常用的分类方式,在开发中用来表示多级分类,例如商品分类、新闻分类等。 原理 无限极分类是通过递归的方式来实现的。递归函数基本原理就是函数在调用自身,直到满足条件返回结果。 因此在分类时,我们需要先对数据进行递归处理,生成对应的层级关系。最后输出树状图。 实现步骤 以下是php实现无限级分类…

    PHP 2023年5月26日
    00
  • PHP中时间处理类Carbon的用法详解

    PHP中时间处理类Carbon的用法详解 Carbon是一款PHP的日期时间处理类库,它拥有足够的灵活性、易用性和可靠性,可以帮助我们简化PHP操作常见时间日期问题的难度。本文将详细介绍Carbon使用方法,包括初始化时间、时间计算、时间格式化和比较等。 安装 在使用Carbon之前,我们需要先安装Carbon库。可以使用composer进行安装,请执行以下…

    PHP 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部