thinkphp 实现分页
一、一个条件的查询数据
查询数据自然是先要显示出数据,然后根据条件进行查询数据
(1)显示出表的数据
这个方法我还是写在了HomeController.class控制器文件中
(1.1)写了一个方法shouye()
| 1 2 3 4 5 6 7 | publicfunctionshouye(){    $n= M("nation");   //数据库中的表    $arr= $n->select();  //查询表中的所有数据    $this->assign("shuju",$arr);  //将二维数组注入变量    $this->show();  //显示数据} | 
(1.2)方法写完了之后,下面就是写显示页面了,这个名字和方法名一致
这里我们用表格来显示一下数据
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <table width="50%"border="1"cellpadding="0"cellspacing="0">    <tr>        <td>代号</td>        <td>名称</td>        <td>操作</td>    </tr><br>    <!--注意:这里的循环没有{}这是和smarty模板的区别-->           <foreachname="shuju"item="v">   <!--参数name是php页面中的注入的名字,item是赋值的量-->        <tr>            <td>{$v.code}</td> <!--这就是显示的code列-->            <td>{$v.name}</td> <!--这是显示的name列-->            <td>操作</td>        </tr>    </foreach></table>            | 
下面运行看下效果:注意地址栏的书写:http://localhost/tp/index.php/Home/Home/shouye

(2)添加查询条件
(2.1)这样的话就要添加查询的文本框和查询按钮了,我们添加在表的前面
这里用表单来写,因为提交嘛,所以用表单进行写
| 1 2 3 4 5 6 | <formaction="__ACTION__" method="post">    <div>        根据名称查询:<inputtype="text" name="name" />        <inputtype="submit" value="查询"/>    </div></form>        | 
看下显示效果

(2.2)显示出来之后,就是后面的处理页面了
这个查询和添加、修改的逻辑处理方式还不一样,这里就不用if判断了
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | publicfunctionshouye(){    $tj= " 1=1 "; //条件恒成立    if(!empty($_POST["name"]))  //判断传过来的name值是不是空的    {        $name= $_POST["name"];         $tj= " Name like '%{$name}%' ";  //修改$tj的值    }    $n= M("nation");      $arr= $n->where($tj)->select();  //因为是tp框架,所以直接可以调用这个条件,用where()方法    $this->assign("shuju",$arr);    $this->show();}        | 
这样运行一下,然后查看一下结果
查询一下“回”的信息,可以实现这个查询

(2.3)可以在这个查询中添加分页,也就是分页的显示
1.这里我们引用一下以前写过的page分页的类,先把这个page的类放到自己的模块下面,我放在了这里

打开这个类文件,修改一下命名空间如下所示:

然后关闭就可以了。
2.在shouye()方法中调用Page类
2.1首先要调用这个page类
2.2这个类要有两个参数:分页的总条数,显示的条数
| 1 | $page= new\Home\shuju\page($zts,2);  //第一个参数:数据总条数;第二个参数是显示几条 | 
2.3总条数:查询也是要显示总条数
| 1 | $zts= $n->where($tj)->count();  //总条数也要包括查询 | 
2.4在limit这里要对源文件,进行修改
| 1 | $page->limit;  //LIMIT 10,3 | 
这样的话会多着个limit,那么在page.class.php源文件中删除就可以

2.5查询所有条件时加上这个limit($page->limit)方法
| 1 | $arr= $n->where($tj)->limit($page->limit)->select(); | 
2.6注入变量(将分页的信息显示信息注入)
| 1 | $this->assign("fenye",$page->fpage());  //page的fpage分页的显示信息 | 
看下总的这个shouye()的方法,上面的综合
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | publicfunctionshouye(){  $tj= " 1=1 ";  if(!empty($_POST["name"]))  {    $name= $_POST["name"];    $tj= " Name like '%{$name}%' ";     }      $n= M("nation");  $zts= $n->where($tj)->count();  //总条数也要包括查询          $page= new\Home\shuju\page($zts,2);  //第一个参数:数据总条数;第二个参数是显示几条  //$page->limit;  //LIMIT 10,3          $arr= $n->where($tj)->limit($page->limit)->select();  //这是显示的分页  $this->assign("shuju",$arr);  //注入变量(总的数据的)  $this->assign("fenye",$page->fpage());  //注入变量(分页的显示信息)  $this->show();} | 
2.7在显示页面,显示这个变量
| 1 | <div>{$fenye}</div> | 
看先运行结果,是有了分页信息

但是这样有个缺陷,就是在查询一个条件时,第一条是显示的总条数是正确的额,但是后面的是错误的,那么就是要修改代码
注意:将数据的传输方式修改(post修改为get)
3.查询的文本框显示默认值
这里在条件恒成立下,定义一个name值为空,然后在注入变量
在显示页面的文本框的中,添加value值是前面注入的变量
注意:
1.看下完整的php页面的代码
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | publicfunctionshouye(){      $tj= " 1=1 ";      $name= "";  if(!empty($_POST["name"]))  {    $name= $_POST["name"];    $tj= " Name like '%{$name}%' ";     }      $n= M("nation");  $zts= $n->where($tj)->count();  //总条数也要包括查询          $page= new\Home\shuju\page($zts,2);  //第一个参数:数据总条数;第二个参数是显示几条  //$page->limit;  //LIMIT 10,3          $arr= $n->where($tj)->limit($page->limit)->select();  //这是显示的分页  $this->assign("shuju",$arr);  //注入变量(总的数据的)  $this->assign("fenye",$page->fpage());  //注入变量(分页的显示信息)      $this->assign("name",$name);  //将name的值注入变量      $this->show();} | 
2.显示页面的整体内容
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <formaction="__ACTION__" method="get">     <div>        根据名称查询:<inputtype="text" name="name"  value="{$name}"/>        <inputtype="submit" value="查询"/>    </div></form><br/><tablewidth="50%" border="1" cellpadding="0" cellspacing="0">    <tr>        <td>代号</td>        <td>名称</td>        <td>操作</td>    </tr>                <foreachname="shuju" item="v" >        <tr>            <td>{$v.code}</td>            <td>{$v.name}</td>            <td>操作</td>        </tr>    </foreach></table>        <div>{$fenye}</div>        | 
这样总的效果就已经结束了
进行查询后,文本框显示查询的名字,显示的条数也是会变换的

二、数据取值方式
1.写一个方法,来进行数据的传值差别:正常的GET方式取值
| 1 2 3 4 | publicfunctiontestget(){    echo$_GET["name"];} | 
在浏览器的地址栏地址中输入:
(1)后面是:?名称="值"
1.没有传值的话是空
http://localhost/tp/index.php/Home/Home/testget
输出就是空的:

2.有值的传值
http://localhost/tp/index.php/Home/Home/testget?name=%22%E4%BD%A0%E5%A5%BD%22
这样就会输出:你好

(2)后面是路径的方式:/名称/值
地址栏中输入:
http://localhost/tp/index.php/Home/Home/testget/name/qqqqqq
输出结果

注意:传多值就是/名字/值/名字/值
2.给方法赋值的方式取值
| 1 2 3 4 | publicfunctiontestget($code){  echo$code;      } | 
三、session方法和cookie方法
(1)session方法
1.默认情况下,初始化之后系统会自动启动session,如果不希望系统自动启动session的话,可以设置SESSION_AUTO_START为false,例如:
| 1 | 'SESSION_AUTO_START'=>false | 
关闭自动启动后可以项目的公共文件或者在控制器中通过手动调用session_start或者session('[start]')启动session。
2.session赋值
| 1 | session('name','value');  //设置session | 
3.session判断
| 1 2 | // 判断名称为name的session值是否已经设置session('?name'); | 
4.session管理
| 1 2 3 4 | session('[pause]'); // 暂停session写入session('[start]'); // 启动sessionsession('[destroy]'); // 销毁sessionsession('[regenerate]'); // 重新生成session id | 
(2)cookie方法
Cookie设置
| 1 2 | cookie('name','value');  //设置cookiecookie('name','value',3600); // 指定cookie保存时间 | 
四、模板(三元运算)
模板可以支持三元运算符
| 1 2 | {$status?'正常':'错误'}{$info['status']?$info['msg']:$info['error']} | 
注意:三元运算符中暂时不支持点语法。
五、AJAX返回
要使用ajax就要引用jQuery了,我们把jQuery拿进来
(1)我放到了Public文件夹下,新建一个js文件夹下

(2)然后就是在显示的页面调出这个js文件
| 1 | <scriptsrc="__PUBLIC__/js/jquery-1.11.2.min.js"></script> | 
(3)看下这个文件是不是引入了
在浏览器的地址栏中输入:http://localhost/tp/index.php/Home/Home/shouye
查看源代码查看是不是引入了

点开之后要是能够出现就是引入成功了
(4)在控制器中写一个方法chuli,让ajax返回这个方法
| 1 2 3 4 | publicfunctionchuli(){   } | 
(5)就要写ajax了
| 1 2 3 4 5 6 7 8 9 10 | <scripttype="text/javascript">  $.ajax({  url:"__CONTROLLER__/chuli",  //处理方法的  dataType:"TEXT",  success: function(data){    //成功之后的输出的信息    }              })</script> | 
(6)在chuli方法页面就要写返回值了
| 1 2 3 4 | publicfunctionchuli(){    $this->ajaxReturn("hello","eval");   //返回的值,返回值的方式eval就是text方式  } | 
注意:如果是JSON/JSONP格式,会自动编码成JSON字符串,如果是XML方式,会自动编码成XML字符串,如果是EVAL方式的话,只会输出字符串data数据。
完整的显示页面的代码:
| 1 2 3 4 5 6 7 8 9 10 | <scripttype="text/javascript">    $.ajax({        url:"__CONTROLLER__/chuli",        dataType:"TEXT",        success: function(data){            alert(data);  //返回的信息            }                })</script>        | 
看下效果:

也可以是关联数组的数据,就不写了
六、跳转和重定向
(1)页面跳转
使用方法很简单
| 1 2 3 4 5 6 7 8 9 10 | $User= M('User'); //实例化User对象$result= $User->add($data);if($result){       //设置成功后跳转页面的地址,默认的返回页面是$_SERVER['HTTP_REFERER']       $this->success('新增成功', 'User/list');}else{    //错误页面的默认跳转页面是返回前一页,通常不需要设置       $this->error('新增失败');} | 
注意:success和error方法的第一个参数表示提示信息,第二个参数表示跳转地址,第三个参数是跳转时间(单位为秒)
| 1 2 3 4 | // 操作完成3秒后跳转到 /Article/index$this->success('操作完成','/Article/index',3);// 操作失败5秒后跳转到 /Article/error$this->error('操作失败','/Article/error',5); | 
注意:跳转地址是可选的,success方法的默认跳转地址是$_SERVER["HTTP_REFERER"],error方法的默认跳转地址是javascript:history.back(-1);。  
这就是tp框架的另外的一些知识和操作
thinkphp 实现分页的更多相关文章
- thinkphp自定义分页效果
		TP自带了一个分页函数,挺方便使用的. 下面是我的使用方法: /*****************分页显示start*************************/ $arr_page=$this ... 
- 使用ThinkPHP实现分页功能
		前几篇(上传,缩略图,验证码,自动验证表单)文章介绍的功能实现都是基于ThinkPHP框架封装好的类进行实现的,所以这次自己写一个分页类在框架中使用. 首先在根目录建一个Tools文件夹,在Tools ... 
- THINKPHP ajax分页示例
		先把框架的page类改造一下 路径在ThinkPHP/Library/Think/Page.class.php文件 添加一个方法 ajax_show 代码如下 <?php /** * 组装分页链 ... 
- ThinkPHP数据分页Page.class.php
		获取分页类 ThinkPHP提供了数据分页的扩展类库Page,能够在http://www.thinkphp.cn/extend/241.html下载,或者下载官方的完整扩展包(http://www.t ... 
- thinkphp 数据分页
		通常在数据查询后都会对数据集进行分页操作,ThinkPHP也提供了分页类来对数据分页提供支持. 下面是数据分页的两种示例. 第一种:利用Page类和limit方法 $User = M('User'); ... 
- thinkphp ajax分页
		临时更改后的page类(很多地方没修改...因为笔者PHP没学好..)如下: 复制代码 <?php namespace Fenye\libs; /** file: page.class.php ... 
- ThinkPhp之分页
		function page($count,$pagesize=3){ $Page=new \Think\Page($count,$pagesize); //每页显示记录数 $Page->setC ... 
- thinkphp实现分页
		public function zhanshi(){ $cate = M('cate'); //实例化数据表 $count = $cate->count(); //获取总的记录数 $Page = ... 
- ThinkPhp框架 分页 和session验证的使用
		TP框架分页要使用到类文件,可以使用自己的类文件,也可以使用tp框架自带的类文件. 首先导入分页的类文件(Page.class.php): <?php namespace Home\shuju; ... 
- ThinkPHP自定义分页模板
		TpPageHelper.php <?php namespace tool; use think\Paginator; class TpPageHelper extends Paginator ... 
随机推荐
- java 运行 .jar 文件乱码
			http://yang3wei.github.io/blog/2013/02/10/java-dfile-dot-encoding-equals-utf-8-gan-diao-luan-ma/ 启动时 ... 
- Vivado安装、生成bit文件及烧录FPGA的简要流程
			https://wenku.baidu.com/view/0294cbb3bb4cf7ec4bfed01a.html 
- CSS3 flexbox 布局 ---- flex项目属性介绍
			现在介绍用在flex项目上的css 属性,html结构还是用ul, li 结构,不过内容改成1,2,3, 样式的话,直接把给 ul 设display:flex 变成flex 容器,默认主轴的方向为水平 ... 
- codeforces362B
			Petya and Staircases CodeForces - 362B 题意: 一个小男孩要上楼梯,他一次可以走1个台阶或2个台阶或3个台阶,但是有一些台阶是脏的,他不想走在脏台阶上.一共有n个 ... 
- python命令里运行正确但是pycharm里面运行就是报错的问题
			这两天在学习爬虫,第一步就是 import scrapy class StackOverflowSpider(scrapy.Spider): 结果一直报错,说是scrapy没有spider这个方法,各 ... 
- [BZOJ 2186] [SDOI 2008] 沙拉公主的困惑
			Description 大富翁国因为通货膨胀,以及假钞泛滥,政府决定推出一项新的政策:现有钞票编号范围为 \(1\) 到 \(N\) 的阶乘,但是,政府只发行编号与 \(M!\) 互质的钞票.房地产第 ... 
- 【XSY2808】董先生的休闲方案 组合数学
			题目描述 有\(n\)个方案,编号为\(1\ldots n\). 最开始你不知道每个方案的编号. 你要按顺序提出这些方案. 每一个时刻你要做以下事情: 如果你阅读过下一个方案,就提出这个方案. 否则随 ... 
- 【洛谷U20626】gemo 容斥 FWT 高斯消元
			题目大意 给你一个无向图,有\(m\)个询问,每次给你一个点\(x\)和一个点集\(S\),问你从\(x\)开始走,每次从一个点随机的走到与这个点相邻的点,问你访问\(S\)中每个点至少一次的期望步数 ... 
- 使用 JavaScript, HTML 和 CSS 构建跨平台的桌面应用
			https://electronjs.org/ —— 官网 https://github.com/electron/electron-api-demos/releases —— 下载demo 下载安装 ... 
- Android assets的一个bug
			摘要 Android assets目录下资源文件超过1MB的问题. 由于要显示一些奇奇怪怪的日文字符,我们在应用里放了一个字库文件,譬如叫做jp.ttf,放在assets目录下打包. 开发.调试一切正 ... 
