php显示页码分页类的封装

下面是关于“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简洁函数小结

    PHP简洁函数小结 在PHP开发中,能使用函数实现封装和简化代码是一种很好的习惯。本篇文章将对使用PHP内置函数进行简化代码的方法进行小结,并提供示例。 1. 字符串处理函数 1.1 strlen 用于获取字符串长度。 示例1: $str = ‘hello world’; $length = strlen($str); // 11 1.2 substr 用于…

    PHP 2023年5月26日
    00
  • php注入实例

    PHP注入是指攻击者利用PHP应用程序的漏洞,在应用程序执行数据库查询的时候,恶意构造输入数据,从而在应用程序中执行非法的SQL语句。攻击者可以利用SQL注入修改或篡改数据库中的数据,控制数据库服务器,甚至直接危及整个应用程序的运行安全性。 下面是进行PHP注入攻击的完整步骤: 查找目标网站 首先,攻击者需要查找可能存在注入漏洞的网站。可以通过网络爬虫等工具…

    PHP 2023年5月23日
    00
  • php守护进程 加linux命令nohup实现任务每秒执行一次

    下面是详细讲解“php守护进程加linux命令nohup实现任务每秒执行一次”的完整攻略。 什么是php守护进程 在Linux系统中,守护进程是一种长期运行的程序,常驻在系统中并且不会因交互式用户登录而受到影响。守护进程一般由另一个程序(如系统初始化脚本)启动,并在后台运行,一般起着监控系统的作用,将会在商业项目中大量使用。而PHP守护进程则是运行在PHP环…

    PHP 2023年5月23日
    00
  • PHP CURL或file_get_contents获取网页标题的代码及两者效率的稳定性问题

    获取网页标题是很常见的需求,这里分别介绍基于PHP CURL和file_get_contents两种方式的代码实现以及两种方式的效率和稳定性问题。 1. 基于PHP CURL获取网页标题的代码实现 PHP CURL(Client URL)是PHP中处理URL请求的函数库,可以模拟客户端访问其他URL并获取响应数据。以下是获取网页标题的PHP CURL代码实现…

    PHP 2023年5月27日
    00
  • 一个非常实用的php文件上传类

    一、概述 一个非常实用的PHP文件上传类是一种优秀的PHP文件上传类库,它支持多种文件上传方式并可自定义一些设置,使用起来十分方便。在本文中,我们将详细讲解该类库的使用方法,包括如何配置相关参数、如何实现上传文件和如何处理上传结果。 二、安装 在此之前,你需要确保已经安装了PHP,并具备一定的代码编写和文件操作经验。下载完该类库的ZIP压缩文件后,解压到你的…

    PHP 2023年5月26日
    00
  • PHP语法速查表

    下面是“PHP语法速查表”的完整攻略。 简介 “PHP语法速查表”是一个简洁明了的PHP语法速查表,它可以帮助PHP开发者快速查找各种常用语法及特性。 页面结构 “PHP语法速查表”页面由三个部分组成: 页头 页头包括一个标题及一张图片(可选),通常用于展示网站的名称及 logo 等信息。 <!DOCTYPE html> <html>…

    PHP 2023年5月24日
    00
  • PHP缓存机制Output Control详解

    PHP缓存机制Output Control详解 什么是Output Control Output Control是PHP缓存机制的一种,它可以缓存输出的内容并在需要时输出。它通过输出缓冲区来实现。输出缓冲区是一个内存区域,可以暂时存储需要输出到浏览器的内容。 在开启Output Control之后,所有的输出都将被存储在缓冲区中,直到缓冲区被显式地清空或脚本…

    PHP 2023年5月26日
    00
  • PHP中通过fopen()函数访问远程文件示例

    当需要在PHP中访问远程文件时,可以使用fopen()函数。使用该函数时需要确保allow_url_fopen选项被设置为On。一旦这个选项被启用,我们就可以访问远程文件,如下所示: $remote_file = fopen(‘http://www.example.com/index.html’, ‘r’); 在这个示例中,我们打开了一个远程HTML文件,同…

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