TinkPHP_无刷新分页_未带搜索条件

1)前台显示模板:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Ajax 实现无刷新页面</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript" src="__ROOT__/statics/js/jquery.js"></script> <!-- 载入 Ajax 类库 -->
<style type="text/css">
    body {
        font-size:12px;
    }
</style>
</head>
<body>
    <div id="fpage">数据加载中...</div>
</body>
</html>
<script type="text/javascript">
    /**
     * setPage(url) 根据 url 从 __URL__/ajax 中获取数据
     * @param int pageNum 页码
     * @return string
     */
    var cache=new Array(); // 缓存变量,当数据被访问过之后放置在缓存中,加快访问速度
    function setPage(pageNum) {
        var fpage = document.getElementById(‘fpage‘); // 获取 fpage 对象
        // 如果缓存中存在数据,那么直接从缓存中读取;如果不存在数据,那么就从数据库中读取,并把数据存入缓存
        if (typeof(cache[pageNum])==‘undefined‘) {
            /*var ajax = Ajax();
            ajax.get("__URL__/ajax?page="+pageNum, function(data){
                fpage.innerHTML = data; // fpage对象的内容是从 article.php 中取来的
                cache[pageNum] = data;
            })*/
            $.ajax({
                type:"GET",
                url:"__URL__/ajax",
                data:"page="+pageNum,
                beforeSend:function(){
                    $(‘#fpage‘).html("正在努力加载中...");
                },
                success:function(data){
                    fpage.innerHTML = data; // fpage对象的内容是从 article.php 中取来的
                    cache[pageNum] = data;
                }
            });
        } else {
            fpage.innerHTML = cache[pageNum];
        }
    }
    setPage(1); // 默认执行
</script>

2)后台控制器中的方法:

<?php

public function ajaxpage(){
        $this->display(":ajaxpage");
    }
    public function ajax(){
        sleep(2);
        $m=M(‘article‘);
        $page= new \Think\AjaxPage($m->count(),20);
        $result=$m->limit("$page->limit")->select();
        echo ‘<table align="center" border="1" width="1100" style="border-collapse:collapse;font-size:14px;" bordercolor="#666">‘;
        echo ‘<caption><h1>资讯</h1></caption>‘;
        echo ‘<tr height="25"><th>ID</th><th>Title</th><th>Author</th><th>Source</th><th>Date</th></tr>‘;
        foreach ($result as $v) {
            echo "<tr height=‘21‘><td align=‘center‘>{$v[‘id‘]}</td><td>{$v[‘title‘]}</td><td align=‘center‘>{$v[‘author‘]}</td><td align=‘center‘>{$v[‘source‘]}</td><td align=‘center‘>{$v[‘date‘]}</td></tr>";
        }
        echo ‘<tr><td align="right" colspan="5">‘.$page->fpage().‘</td></tr>‘;
        echo ‘</table>‘;
    }

3)ajax无刷新分页类:

<?php
namespace Think;
class ajaxPage {
    private $total;   //数据表中总记录数
    private $listRows;//每页显示行数
    private $limit;
    private $uri;
    private $pageNum; //页数
    private $config=array(‘header‘=>"个记录", "prev"=>"上一页", "next"=>"下一页", "first"=>"首 页", "last"=>"尾 页");
    private $listNum=8;
    /*
     * $total
     * $listRows
     */
    public function __construct($total, $listRows=10, $pa=""){
        $this->total=$total;
        $this->listRows=$listRows;
        $this->uri=$this->getUri($pa);
        $this->page=!empty($_GET["page"]) ? $_GET["page"] : 1;
        $this->pageNum=ceil($this->total/$this->listRows);
        $this->limit=$this->setLimit();
    }

    private function setLimit(){
        return ($this->page-1)*$this->listRows.", {$this->listRows}";
    }

    private function getUri($pa){
        $url=$_SERVER["REQUEST_URI"].(strpos($_SERVER["REQUEST_URI"], ‘?‘)?‘‘:"?").$pa;
        $parse=parse_url($url);
        if(isset($parse["query"])){
            parse_str($parse[‘query‘],$params);
            unset($params["page"]);
            $url=$parse[‘path‘].‘?‘.http_build_query($params);
        }
        return $url;
    }

    private function __get($args){
        if($args=="limit")
            return $this->limit;
        else
            return null;
    }

    private function start(){
        if($this->total==0)
            return 0;
        else
            return ($this->page-1)*$this->listRows+1;
    }

    private function end(){
        return min($this->page*$this->listRows,$this->total);
    }

    private function first(){
        $html="";
        if($this->page==1)
            $html.=‘‘;
        else
            $html.="&nbsp;&nbsp;<a href=‘javascript:setPage(1)‘>{$this->config["first"]}</a>&nbsp;&nbsp;";
        return $html;
    }

    private function prev(){
        $html="";
        if($this->page==1)
            $html.=‘‘;
        else
            $html.="&nbsp;&nbsp;<a href=‘javascript:setPage(". ($this->page-1) .")‘>{$this->config["prev"]}</a>&nbsp;&nbsp;";
        return $html;
    }

    private function pageList(){
        $linkPage="";
        $inum=floor($this->listNum/2);

        for($i=$inum; $i>=1; $i--){
            $page=$this->page-$i;
            if($page<1)
                continue;
            $linkPage.="&nbsp;<a href=‘javascript:setPage({$page})‘>{$page}</a>&nbsp;";

        }
        $linkPage.="&nbsp;{$this->page}&nbsp;";
        for($i=1; $i<=$inum; $i++){
            $page=$this->page+$i;
            if($page<=$this->pageNum)
                $linkPage.="&nbsp;<a href=‘javascript:setPage({$page})‘>{$page}</a>&nbsp;";
            else
                break;
        }
        return $linkPage;
    }

    private function next(){
        $html="";
        if($this->page==$this->pageNum)
            $html.=‘‘;
        else
            $html.="&nbsp;&nbsp;<a href=‘javascript:setPage(". ($this->page+1) .")‘>{$this->config["next"]}</a>&nbsp;&nbsp;";
        return $html;
    }

    private function last(){
        $html="";
        if($this->page==$this->pageNum)
            $html.=‘‘;
        else
            $html.="&nbsp;&nbsp;<a href=‘javascript:setPage(". ($this->pageNum) .")‘>{$this->config["last"]}</a>&nbsp;&nbsp;";
        return $html;
    }

    private function goPage(){
        return ‘&nbsp;&nbsp;<input type="text" onkeydown="javascript:if(event.keyCode==13){var page=(this.value>‘.$this->pageNum.‘)?‘.$this->pageNum.‘:this.value;setPage(page)}" value="‘.$this->page.‘" style="width:25px"><input type="button" value="GO" onclick="javascript:var page=(this.previousSibling.value>‘.$this->pageNum.‘)?‘.$this->pageNum.‘:this.previousSibling.value;setPage(page)">&nbsp;&nbsp;‘;
    }
    function fpage($display=array(0,1,2,3,4,5,6,7,8)){
        $html[0]="&nbsp;&nbsp;共有<b>{$this->total}</b>{$this->config["header"]}&nbsp;&nbsp;";
        $html[1]="&nbsp;&nbsp;每页显示<b>".($this->end()-$this->start()+1)."</b>条,本页<b>{$this->start()}-{$this->end()}</b>条&nbsp;&nbsp;";
        $html[2]="&nbsp;&nbsp;<b>{$this->page}/{$this->pageNum}</b>页&nbsp;&nbsp;";
        $html[3]=$this->first();
        $html[4]=$this->prev();
        $html[5]=$this->pageList();
        $html[6]=$this->next();
        $html[7]=$this->last();
        $html[8]=$this->goPage();
        $fpage=‘‘;
        foreach($display as $index){
            $fpage.=$html[$index];
        }
        return $fpage;
    }
}

AjaxPage.class.php

时间: 2024-12-14 18:18:36

TinkPHP_无刷新分页_未带搜索条件的相关文章

ThinkPhp 3.2 ajax无刷新分页(未完全改完,临时凑合着用)

临时更改后的page类(很多地方没修改...因为笔者PHP没学好..)如下: <?phpnamespace Fenye\libs; /**  file: page.class.php   完美分页类 Page  */ class Page {  private $total;          //数据表中总记录数  private $listRows;       //每页显示行数  private $limit;          //SQL语句使用limit从句,限制获取记录个数  pri

MVC无刷新分页(即局部刷新,带搜索,页数选择,排序功能)

我查看了很多网站,大部分评论分页都是局部刷新的,可大部分电商商品展示分页都是有刷新页面的,于是我便做了一个商品展示无刷新分页的例子.接下来我就将做一个模仿淘宝已买到的宝贝功能,不过我的是无刷新分页的. 至于为何要用无刷新分页(局部刷新)呢,我个人觉得有几点原因: 提高用户体验,无刷新分页网页看起来相对静止,滚轮不会跳到上面,加载速度比较快: 减轻网站服务器压力,返回局部页面(其中无需包含样式和脚本)肯定比返回整个页面要来的轻松: 还有个分页的好处就是减轻数据库的压力,返回几行的数据肯定比返回所有

MVC简单分页(未实现无刷新分页)

分页Html辅助方法 using System.Text; using System.Web: using System.Web.Mvc; namespace System.Web.Mvc { public static class HtmlExtensions { #region 分页Html辅助方法 /// <summary> /// 分页Html辅助方法 /// </summary> /// <param name="htmlHelper">&

asp.net MVC4 +MVCpager 无刷新分页

本人菜鸟,最近在用MVC4和MVCpager做无刷新分页时,发现点击下一页时数据不是Ajax提交的,弄了好久终于找到原因,原来还是Jquery引用的问题,现在把代码粘出来,希望能帮到刚接触的程序员,第一次自己写博客,文才不好,有什么改进的地方还希望大神多多指教. 1 using Webdiyer.WebControls.Mvc; 2 namespace MVCPage.Controllers 3 { 4 public class HomeController : Controller 5 { 6

Ajax实现无刷新分页

注:本文中使用到的一些类库在前面文章都能找到源代码,我会在文中指明链接所在,为了缩短文章篇幅,由此带来的阅读不便,敬请谅解. 本文讲解 Ajax 实现无刷新分页.实现原理.代码展示.代码下载. 这里需要说明一些知识: 1.Ajax 无刷新页面的好处:提供良好的客户体验,通过 Ajax 在后台从数据库中取得数据并展示,取缔了等待加载页面而出现的空白状态: 2.那么,Ajax 无刷新页面是运行在动态页面(.PHP)?还是静态页面(.html/.htm/.shtml)?答案是:静态页面: 3.实现原理

在Thinkphp中使用AJAX实现无刷新分页

在Thinkphp目录的Lib\ORG\Util\目录里新建AjaxPage.class.php,写入一下内容: <?php // +---------------------------------------------------------------------- // | ThinkPHP [ WE CAN DO IT JUST THINK IT ] // +---------------------------------------------------------------

扩展GridView实现的一个自定义无刷新分页,排序,支持多种数据源的控件TwfGridView

最近项目View层越来越趋向于无刷新化,特别是数据展示方面,还要对Linq有很好的支持.在WebFrom模式的开发中,GridView是一个功能很强大,很常用的控件,但是他也不是完美的,没有自带的无刷新和排序(有人说UpdatePanel或第三方插件就可以实现无刷新,但是呵呵...那是重量级的无刷新实现,相信不少朋友和我一样讨厌UpdatePanel,引入一大堆很长的js库且不说,用起来感觉不到一点无刷新带来的快速),也不支持部分数据绑定分页(有人说部分数据绑定也可以用aspNetPager等第

asp.net练习②——Paginaton无刷新分页

aspx代码: <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>无刷新分页</title> <link href="c

无刷新分页 jquery.pagination.js

1.使用插件为 jquery.pagination.js ,如果没有这个js文件的话,我可以给发个. 首先引用 jquery.pagination.js (分页js),跟pagination.css(分页样式css). 点击获取查看这两个文件 2.页面js代码为 <script type="text/javascript"> var pageIndex = 0; //页面索引初始值 var pageSize = 15; //每页显示条数初始化,修改显示条数,修改这里即可 $