分页 Ajax

<?PHP class paginator { public $total; //全部条数,从数据库取出 public $prePage = 10; //每页的条数 protected $curr= 1; //默认当前页码 public function __construct($total,$prePage='') { $this->total = $total; //把总条目信息放在total属性 if ($prePage > 0) { $this->prePage = $prePage; //把每页数量放在perPage属性 } //计算当前页码 if (isset($_GET['page']) && ($_GET['page'] + 0) > 0) { $this->curr = $_GET['page'] + 0; } } //主体函数 public function pageItem() { if ($this->total <=0) { return ''; //如果总条目<=0 直接返回空字符串 } $cnt = ceil($this->total / $this->prePage); //算总页数,进一取整 //根据当前页,算上一页下一页 /* 分析url,有几种情况? xx.PHP xx.PHP?id=5 xx.PHP?page=3 xx.PHP?id=5&page=3 */ //最终生成的URL里边必然有page=N $url = $_SERVER['REQUEST_URI']; $parse = parse_url($url); //把URL分析结果放在数组里 //print_r($parse); //保证参数里边有page if (!isset($parse['query'])) { $parse['query'] = 'page=' .$this->curr; } //把query字符串分析成数组,再次确保有page选项 parse_str($parse['query'],$parms); if (!array_key_exists('page',$parms)) { $parms['page'] = $this->curr; } //上边四种情况都测试一遍,page参数都能生成 //print_r($parms); //判断除了page之外,还有没有其他参数 if (count($parms) == 1) { $url = $parse['path'] . '?'; } else { unset($parms['page']); $url = $parse['path'] . '?' . http_build_query($parms) . '&'; } //echo $url $prev = $this->curr - 1; $next = $this->curr + 1; //首页 $indexLink = '<a href="' . $url .'page=' . 1 . '">首页</a>'; //上一页 if ($prev < 1) { $prevLink = ''; }else { $prevLink = '<a href="' . $url .'page=' . $prev . '">上一页</a>'; } //下一页 if ($next > $cnt) { $nextLink = ''; }else { $nextLink = '<a href="' . $url .'page=' . $next . '">下一页</a>'; } //尾页 $lastLink = '<a href="' . $url .'page=' . $cnt . '">尾页</a>'; //echo $indexLink.' '.$prevLink.' '.$nextLink .' '.$lastLink; //上一页,1 2 3 4 5 下一页 $start = $this->curr - (5-1)/2; //计算左侧开始的页码 $end = $this->curr + (5-1)/2; //计算右侧开始的页码 //如果左侧的页面,已经小于1,则把小于1 的部分补到右侧 if ($start < 1) { $end += (1 - $start); $start = 1; //修改start = 1 if ($end > $cnt) { $end = $cnt; } } //把右侧超出的部分,补到左边 if ($end > $cnt) { $start -= ($end - $cnt); $end = $cnt; if ($start < 1) { $start = 1; } } //循环出页码数 $pageStr = ''; for ($i=$start; $i <= $end ; $i++) { if ($i == $this->curr) { $pageStr .= "<a class=\"gray\">{$i}</a>"; continue; } $pageStr .= '<a href="' . $url . 'page=' . $i . '">' . $i . '</a>'; } return "<p class=\"pageBox\">".$indexLink.$prevLink.$pageStr.$nextLink.$lastLink."</p>"; } //主体函数AJAX版 public function pageItem_ajax($Box,$asy=FALSE) { if ($this->total <=0) { return ''; //如果总条目<=0 直接返回空字符串 } $cnt = ceil($this->total / $this->prePage); //算总页数,进一取整 //根据当前页,算上一页下一页 /* 分析url,有几种情况? xx.PHP xx.PHP?id=5 xx.PHP?page=3 xx.PHP?id=5&page=3 */ //最终生成的URL里边必然有page=N $url = $_SERVER['REQUEST_URI']; if ($asy==false) { $script = <<<SCRIPT <input id='paginatorCurrentPage' type='hidden' value='{$url}'/> <script>aja = function (url,Box,page) { $("#searchPage").val(''); $("#searchPage").val(page); $("#"+Box).attr("action",""); $("#"+Box).attr("action",url); $("#"+Box).submit(); }</script> SCRIPT; }else { $script = <<<SCRIPT <script>aja = function (url,page) { var searchdate = $("#searchdate").val(); var searchstatus = $("#searchstatus").val(); $.ajax({ url:url,data:{searchdate:searchdate,searchstatus:searchstatus},type:"post",dateType:"html",success: function (msg){ $("#"+Box).html(msg); } }) }</script> SCRIPT; } $parse = parse_url($url); //把URL分析结果放在数组里 //print_r($parse); //保证参数里边有page if (!isset($parse['query'])) { $parse['query'] = 'page=' .$this->curr; } //把query字符串分析成数组,再次确保有page选项 parse_str($parse['query'],$parms)) { $parms['page'] = $this->curr; } //上边四种情况都测试一遍,page参数都能生成 //print_r($parms); //判断除了page之外,还有没有其他参数 if (count($parms) == 1) { $url = $parse['path'] . '?'; } else { unset($parms['page']); $url = $parse['path'] . '?' . http_build_query($parms) . '&'; } //echo $url $prev = $this->curr - 1; $next = $this->curr + 1; //首页 $indexLink = "<a href=\"javascript:aja('{$url}page=1','{$Box}','1')\">首页</a>"; //上一页 if ($prev < 1) { $prevLink = ''; }else { // $prevLink = '<a href="' . $url .'page=' . $prev . '">上一页</a>'; $prevLink = "<a href=\"javascript:aja('{$url}page={$prev}','{$prev}')\">上一页</a>"; } //下一页 if ($next > $cnt) { $nextLink = ''; }else { // $nextLink = '<a href="' . $url .'page=' . $next . '">下一页</a>'; $nextLink = "<a href=\"javascript:aja('{$url}page={$next}','{$next}')\">下一页</a>"; } //尾页 // $lastLink = '<a href="' . $url .'page=' . $cnt . '">尾页</a>'; $lastLink = "<a href=\"javascript:aja('{$url}page={$cnt}','{$cnt}')\">尾页</a>"; //echo $indexLink.' '.$prevLink.' '.$nextLink .' '.$lastLink; //上一页,1 2 3 4 5 下一页 $start = $this->curr - (5-1)/2; //计算左侧开始的页码 $end = $this->curr + (5-1)/2; //计算右侧开始的页码 //如果左侧的页面,已经小于1,则把小于1 的部分补到右侧 if ($start < 1) { $end += (1 - $start); $start = 1; //修改start = 1 if ($end > $cnt) { $end = $cnt; } } //把右侧超出的部分,补到左边 if ($end > $cnt) { $start -= ($end - $cnt); $end = $cnt; if ($start < 1) { $start = 1; } } //循环出页码数 $pageStr = ''; for ($i=$start; $i <= $end ; $i++) { if ($i == $this->curr) { $pageStr .= "<a class=\"gray\" style='color:red'>{$i}</a>"; continue; } $pageStr .= "<a href=\"javascript:aja('{$url}page={$i}','{$i}') \">{$i}</a>"; } $pageInfo = "<a style='color:#ccc;'>{$this->total}条记录,第{$this->curr}页,共{$cnt}页。</a>"; return "<p class=\"pageBox\">{$script}".$indexLink.$prevLink.$pageStr.$nextLink.$lastLink.$pageInfo."</p>"; } }

相关文章

JS原生Ajax操作(XMLHttpRequest) GET请求 POST请求 兼容性问题 利用iframe模拟ajax 实现表单提交的返回...
AJAX 每日更新前端基础,如果觉得不错,点个star吧 &#128515; https://github.com/WindrunnerMax/E...
踩坑Axios提交form表单几种格式 前后端分离的开发前后端, 前端使用的vue,后端的安全模块使用的SpringSe...
很早就听闻ajax的名声,但是却一直不知道怎么用,今天自己捣鼓了一下,竟然会用了,哈哈哈哈。 为了防止...
需要在服务器上进行哈 jquery的ajax方法: // jquery请求 $.ajax({ url: &quot;./server/slider.js...
Ajax函数封装ajax.js // Get / Post // 参数 get post // 是否异步 // 如何处理响应数据 // URL // var...