智能分页算法[关闭]

2023-11-25

我正在寻找智能分页的示例算法。所谓聪明,我的意思是,我只想显示当前页面的 2 个相邻页面,因此我不会以长得可笑的页面列表结束,而是将其截断。

这是一个简单的例子,可以让它更清楚......这就是我现在所拥有的:

Pages: 1 2 3 4 [5] 6 7 8 9 10 11

这就是我想要的结果:

Pages: ... 3 4 [5] 6 7 ...

(在本例中,我只显示当前页面的 2 个相邻页面)

我在 PHP/Mysql 中实现它,并且“基本”分页(无截断)已经编码,我只是在寻找一个示例来优化它......它可以是任何语言的示例,只要它给了我一个关于如何实现它的想法......


这是一些基于原始代码的代码这个非常旧的链接。它使用与 Bootstrap 分页组件兼容的标记,并输出如下所示的页面链接:

[1] 2 3 4 5 6 ... 100
1 [2] 3 4 5 6 ... 100
...
1 2 ... 14 15 [16] 17 18 ... 100
...
1 2 ... 97 [98] 99 100
<?php

// How many adjacent pages should be shown on each side?
$adjacents = 3;

//how many items to show per page
$limit = 5;

// if no page var is given, default to 1.
$page = (int)$_GET["page"] ?? 1;

//first item to display on this page
$start = ($page - 1) * $limit;

/* Get data. */
$data = $db
    ->query("SELECT * FROM mytable LIMIT $start, $limit")
    ->fetchAll();

$total_pages = count($data);

/* Setup page vars for display. */
$prev = $page - 1;
$next = $page + 1;
$lastpage = ceil($total_pages / $limit);
//last page minus 1
$lpm1 = $lastpage - 1;

$first_pages = "<li class='page-item'><a class='page-link' href='?page=1'>1</a></li>" .
    "<li class='page-item'><a class='page-link' href='?page=2'>2</a>";

$ellipsis = "<li class='page-item disabled'><span class='page-link'>...</span></li>";

$last_pages = "<li class='page-item'><a class='page-link' href='?page=$lpm1'>$lpm1</a></li>" .
    "<li class='page-item'><a class='page-link' href='?page=$lastpage'>$lastpage</a>";

$pagination = "<nav aria-label='page navigation'>";
$pagincation .= "<ul class='pagination'>";

//previous button

$disabled = ($page === 1) ? "disabled" : "";
$pagination.= "<li class='page-item $disabled'><a class='page-link' href='?page=$prev'>« previous</a></li>";

//pages 
//not enough pages to bother breaking it up
if ($lastpage < 7 + ($adjacents * 2)) { 
    for ($i = 1; $i <= $lastpage; $i++) {
        $active = $i === $page ? "active" : "";
        $pagination .= "<li class='page-item $active'><a class='page-link' href='?page=$i'>$i</a></li>";
    }
} elseif($lastpage > 5 + ($adjacents * 2)) {
    //enough pages to hide some
    //close to beginning; only hide later pages
    if($page < 1 + ($adjacents * 2)) {
        for ($i = 1; $i < 4 + ($adjacents * 2); $i++) {
            $active = $i === $page ? "active" : "";
            $pagination .= "<li class='page-item $active'><a class='page-link' href='?page=$i'>$i</a></li>";
        }
        $pagination .= $ellipsis;
        $pagination .= $last_pages;
    } elseif($lastpage - ($adjacents * 2) > $page && $page > ($adjacents * 2)) {
        //in middle; hide some front and some back
        $pagination .= $first_pages;
        $pagination .= $ellipsis
        for ($i = $page - $adjacents; $i <= $page + $adjacents; $i++) {
            $active = $i === $page ? "active" : "";
            $pagination .= "<li class='page-item $active'><a class='page-link' href='?page=$i'>$i</a></li>";
        }
        $pagination .= $ellipsis;
        $pagination .= $last_pages;
    } else {
        //close to end; only hide early pages
        $pagination .= $first_pages;
        $pagination .= $ellipsis;
        $pagination .= "<li class='page-item disabled'><span class='page-link'>...</span></li>";
        for ($i = $lastpage - (2 + ($adjacents * 2)); $i <= $lastpage; $i++) {
            $active = $i === $page ? "active" : "";
            $pagination .= "<li class='page-item $active'><a class='page-link' href='?page=$i'>$i</a></li>";
        }
    }
}

//next button
$disabled = ($page === $last) ? "disabled" : "";
$pagination.= "<li class='page-item $disabled'><a class='page-link' href='?page=$next'>next »</a></li>";

$pagination .= "</ul></nav>";

if($lastpage <= 1) {
    $pagination = "";
}


echo $pagination;

foreach ($data as $row) {
    // display your data
}

echo $pagination;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

智能分页算法[关闭] 的相关文章

  • PHP简单的html dom解析器与wordpress冲突吗?

    PHP简单的html dom解析器与wordpress冲突吗 因为每当我尝试将其与此代码一起包含在我的标头中时 一切都变成空白 感谢您提前提供任何帮助 当我尝试在 HTML 文档中使用 PHP 包含时 我遇到了同样的问题 但当我使用func
  • 无法与站点通信以检查致命错误

    无法与站点通信以检查致命错误 因此 PHP 更改已恢复 您需要通过其他方式上传 PHP 文件更改 例如使用 SFTP 有什么解决办法 我正在 WordPress 中编辑头文件 遇到这个问题 尝试这个 我有同样的问题并决定调查一下 更改 wp
  • 如何移动 Zend_Layout 的“视图”

    通常它会是这样的结构 application modules somemodule views scripts index index phtml 我如何将其移动到 application templates somemodule temp
  • 在 CentOS 中安装 PHP Zip 扩展

    我正在尝试在 CentOS 中安装 PHP Zip 扩展 我的服务器没有外部互联网访问权限 所以我自己从 PECL 下载了它 http pecl php net package zip http pecl php net package z
  • 如何让 Laravel“确认”验证器将错误添加到确认字段?

    默认情况下 Laravel 确认 验证器将错误消息添加到原始字段 而不是通常包含确认值的字段 password gt required confirmed min 8 是否有任何简单的方法来扩展验证器或使用一些技巧来强制它始终在确认字段而不
  • file_get_contents,HTTP 请求失败

    我尝试使用以下方式从另一个网站获取内容file get contents但我总是收到 无法打开流 HTTP 请求失败 allow url fopen 已打开 并且我已经在防火墙关闭的情况下进行了测试 但还是会出现这种情况 请问还有什么原因呢
  • 提交简单 PHP 表单时出现禁止错误

    我有一个不复杂的问题 这似乎比应有的更复杂 我有一个简单的表单 用于向网站添加内容 有些字段需要输入html 然而 当您在表单的不同部分输入某些 html 元素时 它会认为它讨厌您并抛出禁止的 403 错误 这是下面的表格
  • 使用 PHP 创建、编辑和删除 crontab 作业?

    是否可以使用 PHP 创建 编辑和删除 crontab 作业 我知道如何列出 Apache 用户当前的 crontab 作业 output shell exec crontab l echo output 但是如何使用 PHP 添加 cro
  • 在材料表和reactjs中自定义分页的任何示例

    有自定义分页的示例吗 材料表和reactjs 我想将页面大小传递到服务器 并且需要隐藏分页中的第一个和最后一个按钮 研究这个例子https material table com docs features component overrid
  • CakePHP Unfilled 单选按钮在提交时更改为不需要的值

    我有这个表单元素 form gt input ChecklistResponseGovernmentInfo driversLicenseIsOnline array type gt radio empty gt true options
  • 唯一的图像哈希值即使 EXIF 信息更新也不会改变

    我正在寻找一种方法来为 python 和 php 中的图像创建唯一的哈希值 我考虑过对原始文件使用 md5 和 因为它们可以快速生成 但是当我更新 EXIF 信息 有时时区关闭 时 它会更改总和 并且哈希也会更改 有没有其他方法可以为这些文
  • 如何将路径添加到 Apache PATH 变量?

    我在 apache2 的 custom conf 文件中设置了以下内容 SetEnv PATH PATH opt local lib mysql5 bin this is a test 但是它不起作用 当我打电话时 hey shell ex
  • 如何验证上传的文件是视频?

    我的服务器上有一些非常敏感的信息 因此安全性是一个大问题 用户需要能够上传视频 我知道允许用户上传文件会带来安全威胁 因为没有 100 的方法可以阻止他们上传非视频 但我显然可以选择服务器将保留哪些文件 我知道检查文件扩展名是不够的 检查
  • PHP 搜索部分字符串

    如何在键入时搜索部分字符串 不使用 MySQL 例如 MySQL 中的 LIKE 函数 但在搜索字符串时使用 PHP 例如 但这显然行不通 但是有没有一个函数可以搜索部分字符串 那太好了 EDIT 如果它在数组中怎么办 如果我使用 strp
  • 将 Base64 字符串转换为图像文件? [复制]

    这个问题在这里已经有答案了 我正在尝试将我的 Base64 图像字符串转换为图像文件 这是我的 Base64 字符串 http pastebin com ENkTrGNG http pastebin com ENkTrGNG 使用以下代码将
  • Yii2 无效调用:设置只读属性

    我有一个Post具有多对多关系的模型Tags 在 Post 模型中定义 public function getTags return this gt hasMany Tags className id gt tag id gt viaTab
  • 单元测试和静态方法

    阅读并学习单元测试 试图理解以下帖子 http misko hevery com 2008 12 15 static methods are death to testability 这解释了静态函数调用的困难 我不太清楚这个问题 我一直认
  • 将 Hbase 与 PHP 集成 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我已经安装了 Hbase 现在我正在寻找一些 PHP 库来将 hbase 与 PHP 集成 我尝试了 2 个库 第一个是我尝试与 th
  • 突出显示单词并提取其附近文本的函数

    我有一个文本例如 Etiam porta semmalesuada magna mollis euismod 整数取数 ante venenatis dapibus posuere velit aliquet 埃蒂亚姆 门塔 塞姆 male
  • jQuery appendTo(), json 在 IE 6,7,8 中不起作用

    我这两天绞尽脑汁想找到解决办法 我使用 jQuery ajax 从数据库中获取值 以便在另一个框发生更改时更新一个框 php 脚本从数据库中获取值 然后输出 json 它在 FF 中工作正常 但在所有版本的 IE 中 选择框都不会更新 我已

随机推荐

  • 查找数据库上打开的连接数

    我的 Web 应用程序位于 asp net 2 0 c 2 0 和 sql server 208 中 我如何找到 sql server 2008 数据库上的打开连接数 有没有办法清除连接池 因为我的网站托管在共享主机上他们提供了有限的联系
  • Yii2:如何自定义 404 和 503 等错误页面

    我有以下 errorHandler 配置 errorHandler gt errorAction gt page error 在控制器页面中 在我想检查的操作错误中 我收到 404 错误 找不到页面 我怎样才能检查它 如果您正在尝试自定义E
  • 字符串文字存储在哪里,我可以修改它们吗?

    我对 C 中的字符串文字有几个问题 char strPtr Hello char strArray Hello Now strPtr and strArray被认为是字符串文字 根据我的理解 字符串文字存储在只读内存中 因此我们无法修改它们
  • Apiary.io - 具有不同参数的多个响应 (200)

    我试图通过不同的参数获得不同的响应 但有些东西不起作用 这是我的 API Question questions question id A Question object has the following attributes Param
  • 使用自定义表示在 Scala 中对 ADT 进行通用派生

    我正在转述来自 circe Gitter 频道的问题 here 假设我有一个 Scala 密封特征层次结构 或 ADT 如下所示 sealed trait Item case class Cake flavor String height
  • 将 JSON 反序列化为 JAVASCRIPT 对象 [重复]

    这个问题在这里已经有答案了 我有一个将 JSON 文本反序列化为 javascript 对象的问题 我测试了 jquery 和 yui 库 我有这个类 function Identifier name contextId this name
  • 获取操作系统级别的系统信息

    我目前正在构建一个 Java 应用程序 该应用程序最终可以在许多不同的平台上运行 但主要是 Solaris Linux 和 Windows 的变体 有没有人能够成功提取底层操作系统中当前使用的磁盘空间 CPU 利用率和内存等信息 Java
  • 以 y_true 取决于 y_pred 的方式自定义 Keras 的损失函数

    我正在研究多标签分类器 我有许多输出标签 1 0 0 1 其中 1 表示输入属于该标签 0 表示否则 就我而言 我使用的损失函数是基于 MSE 的 我想改变损失函数 当输出标签为 1时 它会改变为该标签的预测概率 检查附图以更好地理解我的意
  • Numpy int 数组:查找多个目标整数的索引

    我有一个大的 numpy 数组 dtype int 和我想在该数组中找到的一组数字 例如 import numpy as np values np array 1 2 3 1 2 4 5 6 3 2 1 searchvals 3 1 res
  • R 标识符号更改之前的行

    我有一个向量 df lt c 5 9 8 7 1 如何识别标志变化之前的位置 IEdf 2 这很简单 如果你了解的话sign功能 which diff sign df 0 1 2
  • 使用以编程方式构造的公式有什么陷阱吗?

    我想要遍历一个潜在解释变量的长向量 依次对每个变量回归响应变量 而不是粘贴在一起 模型公式 我正在考虑使用reformulate 如此处所示 功能fun 下面似乎可以完成工作 拟合所需的模型 但请注意 它在其调用元素中记录name构造的公式
  • 获取 ASP.NET MVC3 Intranet 应用程序中登录的用户名

    我正在开发 MVC 3 Intranet 应用程序 Windows 身份验证 用户登录后 应用程序必须显示用户的个人资料页面 为此 必须将登录用户的用户名作为 Global asax cs 中以下路由中的路由参数传入 routes MapR
  • NodeJS 通过一个路由文件表达多个路由文件

    我正在学习 NodeJS 我有一个nodeJS API 项目 我想在路线中使用版本 因此我创建了以下文件夹结构 application app js routes V1 routes js users js 这是我的 app js 文件 v
  • SQL 多条件 CTE 递归

    在数据库中 每个标识符都有以下 2 条信息 控制他们的公司 以及他们拥有少量控制权的公司 大致意思是 2 个表 忽略一些唯一标识符 组织 orgid org immediate parent orgid 1 2 2 2 3 1 5 4 关系
  • C#程序导致蓝屏?

    这只是蓝屏显示的重要内容 我使用的是 Windows 7 x64 已检测到问题 Windows 已关闭以防止损坏 到您的计算机 PROCESS HAS LOCKED PAGES 停止 0x00000076 0x000000000000000
  • ng-init 是否像 ng-model 一样监视实例化属性的变化?

    ng init 是否像 ng model 一样监视实例化属性的变化 显然不是 所以我设置了一个手表 如下所示 app js var app angular module plunker app controller MainCtrl fun
  • Plinq、Cores 和 WithDegreeOfParallelism?

    据我了解 Plinq 决定打开多少个线程 每个线程位于不同核心的线程上 按核心数 Core 1 Core 2 Core 3 Core 4 因此 如果我有一个 Plinq 任务来查找所有前 1000 个素数 Plink将打开一个新的Threa
  • 使用 Android 的 AudioTrack 组合声音样本字节会产生噪音

    我正在构建一个相当简单的 Android 应用程序 sdk 修订版 14 ICS 它允许用户一次选择两个音频剪辑 均为 RIFF WAV 格式 小端 签名 PCM 16 位编码 并将它们组合在创造新声音的各种方式 我用于此组合的最基本方法如
  • 在 OpenCV C++ 中将图像的所有白色像素更改为透明

    我在 OpenCV 中有这张图片imgColorPanel imread newGUI png CV LOAD IMAGE COLOR 当我用灰度加载它时imgColorPanel imread newGUI png CV LOAD IMA
  • 智能分页算法[关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我正在寻找智能分页的示例算法 所谓聪明 我的意思是 我只想显示当前页面的 2 个相邻页面 因此我不会以长得可笑的页面列表结束 而是将其截断 这是一个简单的例子 可以让它更清楚 这就是