首页 > 后端开发 > 正文

thinkphp 3.1 这个查询怎么进行分页

2024-12-30 22:45:33 | 我爱编程网

今天我爱编程网小编整理了thinkphp 3.1 这个查询怎么进行分页相关内容,希望能帮助到大家,一起来看下吧。

本文目录一览:

thinkphp 3.1 这个查询怎么进行分页

求php分页代码

////////////////////////////////分页/////////////////////////////
$pageListNum=20;//每页显示10条
$totalPage=0;//总页数
$page=isset($page)?(int)$page:1;//当前页
$start=($page-1)*$pageListNum;//起始编号

$totalPage=ceil($pageNum/$pageListNum);
require_once(WEB_CLASS.'/page_class.php');
$page=new PageClass($page,$totalPage);
$showpage=$page->showPage();
echo $showpage;
///////////////page_class.php////////////////////////
<?php

header("Content-Type:text/html;charset=utf8");
/**
* 分页类
* URL有多个参数也能分页,还能自定义分页样式
* php>=5.0

* @version 0.1.1
* @copyright 2006-2010
* @package class
*/
class PageClass{
private $url;
private $cpage;
private $totalPage;
private $tpl;
/**
* PageClass的构造函数
* 模板说明:{index}表示首页 {pagelist}链接列表 {option}下拉列表框 {next}下一页 {pre}上一页 {cur}当前页 {index=首页}表示首页的链接文字为首页,即=号后为链接文字,不过这对{pagelist}{option}无效
* @param string $cpage 当前页
* @param string $tatolPage 总页数
* @param string $tpl 模板.
* @param string $url 要分页的url 默认为当前页
* @return PageClass
*/
function __construct($cpage,$totalPage,$tpl='',$url=''){
$this->cpage=$cpage;
$this->totalPage=$totalPage;
if(strlen($tpl)==0){
$this->tpl="{cur=当前页}{index=首页} {pre=上一页} {next=下一页} {end=最后页} {option}"; //中文分页
}else{
$this->tpl=$tpl;
}
if(strlen($url)==0){
$this->url=$_SERVER['SERVER_NAME'].$_SERVER["REQUEST_URI"];
}else{
$this->url=$url;
}
}
/**
* 函数showPage,返回生成的分页HTML
* @return string
*/
function showPage(){
//显示分页
$urlOption=array();//url的后缀如:?page=1&typeid=1
$parse_url=parse_url($this->url);
$urlMain=''.$parse_url['path'];
if($parse_url['query']){
//url有参数
$urlArr=split('&',$parse_url['query']);
if(is_array($urlArr)){
foreach($urlArr as $key=>$value){
$c=split('=',$value);
if($c[0]==page){
}else{
array_push($urlOption,$c[0].'='.$c[1]);
}
}
}
}else{
//url没有参数
//if($this->cpage<$this->totalPage){
// array_push($urlOption,"page=2");
//}
}
if(is_array($urlOption)){
$urlOptionStr_t=implode('&',$urlOption);
}
if(strlen($urlOptionStr_t)>0){
$urlOptionStr.='&'.$urlOptionStr_t;
}

$tplcontent=$this->tpl;//分页模板
$showPage=$tplcontent;
//首页
if (preg_match_all('/\{index=([^}]*+)\}/', $tplcontent, $matches)){
$t_tpl=$matches[0][0]; //模板内容
$t_word=$matches[1][0]; //分页字段
$indexStr='<a href="'.$urlMain.'?page=1'.$urlOptionStr.'">'.$t_word.'</a>';
$showPage=str_replace($t_tpl,$indexStr,$showPage);
}
//当前页
if (preg_match_all('/\{cur=([^}]*+)\}/', $tplcontent, $matches)){
$t_tpl=$matches[0][0];
$t_word=$matches[1][0];
$curStr=$t_word.$this->cpage.'/'.$this->totalPage;
$showPage=str_replace($t_tpl,$curStr,$showPage);
}

//末页
if (preg_match_all('/\{end=([^}]*+)\}/', $tplcontent, $matches)){
$t_tpl=$matches[0][0];
$t_word=$matches[1][0];
$endPage='<a href="'.$urlMain.'?page='.$this->totalPage.$urlOptionStr.'">'.$t_word.'</a>';
$showPage=str_replace($t_tpl,$endPage,$showPage);
}
//上一页
if (preg_match_all('/\{pre=([^}]*+)\}/', $tplcontent, $matches)){
$t_tpl=$matches[0][0];
$t_word=$matches[1][0];
if($this->cpage>1){
$prePage='<a href="'.$urlMain.'?page='.($this->cpage-1).$urlOptionStr.'">'.$t_word.'</a>';
}else{
$prePage=$t_word;
}
$showPage=str_replace($t_tpl,$prePage,$showPage);
}
//下一页
if (preg_match_all('/\{next=([^}]*+)\}/',$tplcontent, $matches)){
$t_tpl=$matches[0][0];
$t_word=$matches[1][0];
if($this->cpage<$this->totalPage && $this->totalPage>1){
$nextPage=' <a href="'.$urlMain.'?page='.($this->cpage+1).$urlOptionStr.'">'.$t_word.'</a>';
}else{
$nextPage=$t_word;
}
$showPage=str_replace($t_tpl,$nextPage,$showPage);
}
//链接列表
if (preg_match("{pagelist}",$tplcontent)){
for($i=1;$i<$this->totalPage+1;$i++){
$linkPage.=' <a href="'.$urlMain.'?page='.$i.$urlOptionStr.'">'.$i.'</a>';
}
$showPage=str_replace('{pagelist}',$linkPage,$showPage);
}
//下拉框分页
if (preg_match("{option}",$tplcontent)){
$optionPage='<select onchange="javascript:window.location='."'".$urlMain."?page='+this.options[this.selectedIndex].value+"."'$urlOptionStr'".';">';
for($i=1;$i<$this->totalPage+1;$i++){
if($i==$this->cpage){
$optionPage.="<option selected='selected' value='$i'>第".$i."页</option>\n";
}else{
$optionPage.="<option value='$i'>第".$i."页</option>\n";
}
}
$optionPage.='</select>';
$showPage=str_replace('{option}',$optionPage,$showPage);
}
return $showPage;
}
}
?>

thinkphp 3.1 这个查询怎么进行分页

用PHP实现分页显示要求实现和图片一样的功能

希望你能用得上!

<?php
function page($page,$total,$phpfile,$pagesize=10,$pagelen=7){
$pagecode = ’’;//定义变量,存放分页生成的HTML
$page = intval($page);//避免非数字页码
$total = intval($total);//保证总记录数值类型正确
if(!$total) return array();//总记录数为零返回空数组
$pages = ceil($total/$pagesize);//计算总分页
//处理页码合法性
if($page<1) $page = 1;
if($page>$pages) $page = $pages;
//计算查询偏移量
$offset = $pagesize*($page-1);
//页码范围计算
$init = 1;//起始页码数
$max = $pages;//结束页码数
$pagelen = ($pagelen%2)?$pagelen:$pagelen+1;//页码个数
$pageoffset = ($pagelen-1)/2;//页码个数左右偏移量

//生成html
$pagecode=’<div class="page">’;
$pagecode.="<span>$page/$pages</span>";//第几页,共几页
//如果是第一页,则不显示第一页和上一页的连接
if($page!=1){
$pagecode.="<a href=\"{$phpfile}?page=1\"><<</a>";//第一页
$pagecode.="<a href=\"{$phpfile}?page=".($page-1)."\"><</a>";//上一页
}
//分页数大于页码个数时可以偏移
if($pages>$pagelen){
//如果当前页小于等于左偏移
if($page<=$pageoffset){
$init=1;
$max = $pagelen;
}else{//如果当前页大于左偏移
//如果当前页码右偏移超出最大分页数
if($page+$pageoffset>=$pages+1){
$init = $pages-$pagelen+1;
}else{
//左右偏移都存在时的计算
$init = $page-$pageoffset;
$max = $page+$pageoffset;
}
}
}
//生成html
for($i=$init;$i<=$max;$i++){
if($i==$page){
$pagecode.=’<span>’.$i.’</span>’;
} else {
$pagecode.="<a href=\"{$phpfile}?page={$i}\">$i</a>";
}
}
if($page!=$pages){
$pagecode.="<a href=\"{$phpfile}?page=".($page+1)."\">></a>";//下一页
$pagecode.="<a href=\"{$phpfile}?page={$pages}\">>></a>";//最后一页
}
$pagecode.=’</div>’;
return array(’pagecode’=>$pagecode,’sqllimit’=>’ limit ’.$offset.’,’.$pagesize);
}
?>

函数参数:

$page 当前$_GET获得的页码
$total 总记录数
$phpfile 页码连接文件名
$pagesize 不用解释了吧 呵呵
$pagelen 最多显示几个页码 注意(奇数),对称嘛!
函数返回一个数组:
pagecode 索引对应的内容是 生成的HTML 代码
sqllimit 索引对应的是sql limit 后缀

if($page<=$pageoffset){
$init=1;
$max = $pagelen;
}else{//如果当前页大于左偏移
//如果当前页码右偏移超出最大分页数
if($page+$pageoffset>=$pages+1){
$init = $pages-$pagelen+1;
}else{
//左右偏移都存在时的计算
$init = $page-$pageoffset;
$max = $page+$pageoffset;
}
}
}
//生成html
for($i=$init;$i<=$max;$i++){
if($i==$page){
$pagecode.=’<span>’.$i.’</span>’;
} else {
$pagecode.="<a href=\"{$phpfile}?page={$i}\">$i</a>";
}
}
if($page!=$pages){
$pagecode.="<a href=\"{$phpfile}?page=".($page+1)."\">></a>";//下一页
$pagecode.="<a href=\"{$phpfile}?page={$pages}\">>></a>";//最后一页
}
$pagecode.="<input type=\"text\" size=\"3\" onkeydown=\"if(event.keyCode==13) {window.location.href=’{$phpfile}?page=’+this.value; return false;}\" /></div>";
return array(’pagecode’=>$pagecode,’sqllimit’=>’ limit ’.$offset.’,’.$pagesize);
}
?>

thinkphp 3.1 这个查询怎么进行分页

我爱编程网(https://www.52biancheng.com)小编还为大家带来thinkphp 3.1 这个查询怎么进行分页的相关内容。

一、首先需要在MsgManage控制器中加入分页方法

知识点:
1、count函数的试用
2、Page类实例化操作及相关参数了解
3、limit函数了用
4、show函数了解
编辑文件admin/Lib/Action/MsgManageAction.class.php
代码如下:

复制代码代码如下:

class MsgManageAction extends CommonAction {
public function index(){
import('ORG.Util.Page');
//import调用的是message/ThinkPHP框架目录下的扩展包Extend/Library/ORG/Util/中的Page.class.php类文件
$count = M('board')->count();
//调用board库,取出所有数据条数
$page = new Page($count ,10);
//实例化Page类,其中第一个参数为显示条数的总数,每次取出十条,也就是下面$page->listRows的值
$limit = $page->firstRow . ',' . $page->listRows;
//$page->firstRow为查找的起始条数,默认为0,如果$page->listRows为10,那么第2页的$page->firstRow就为10,以此类推

$board = M('board')->order('time DESC')->limit($limit)->select();
//注意,这里较之前的版本添加了->limit($limit)
$this->board = $board;
$this->page = $page->show();
//将$page->show()通过show方法解析$page内容显示并赋值给模板变量,供模板调用

$this->display();
}

Public function delete(){
$id = I('id','','intval');

if(M('board')->delete($id)){
$this->success('删除成功',U('index'));
}else{
$this->error('删除失败');
}
}
}

show方法是3.1版本才有的一个新功能
ThinkPHP中页面输出的过程是读取模板文件,然后进行模板解析(也支持调用第三方模板引擎解析),但是有一些情况,我们并没有定义模板文件,或者把模板文件保存在数据库里面,那么这个时候进行页面输出的时候,我们是无法进行模板文件读取的,3.1版本则针对这样的情况增加了内容解析输出的功能。
内置的模板引擎也进行了完善,如果传入的模板文件不存在的话,则会认为是传入的模板解析内容,因此,3.1的View类和Action类也做了一些改进。
display方法用于模板文件渲染输出,show方法则用于模板内容渲染输出,并且show方法仍然支持内容解析功能
具体内容可参考:ThinkPHP3.1新特性 内容解析输出
二、在模板文件中加入分页模块
知识点:
1、td单元格合并
2、$page变量调用显示

编辑文件:admin/Tpl/MsgManage/index.html,加入一段tr用来显示分页相关,代码如下:

复制代码代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" " ">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Message Board BackGround</title>
</head>
<body>
<table class="table" border="1">
<tr>
<th>ID</th>
<th>发布者</th>
<th>内容</th>
<th>发布时间</th>
<th>操作</th>
</tr>

<foreach name='board' item='b'>
<tr>
<td>{$b.id}</td>
<td>{$b.username}</td>
<td>{$b.content}</td>
<td>{$b.time|date='y-m-d H:i',###}</td>
<td><a href="{:U('admin.php/MsgManage/delete',array('id' => $b['id'])),''}">删除</a></td>
</tr>
</foreach>

//新增tr代码短
<tr>
<td colspan='5' align='center'>
//将5个单元格合并,并且居中显示
{$page}
//显示控制器中$this->page内容
</td>
</tr>
</table>
</body>
</html> 我爱编程网

以上就是thinkphp 3.1 这个查询怎么进行分页全部内容,更多相关信息,敬请关注我爱编程网。更多相关文章关注我爱编程网:www.52biancheng.com

免责声明:文章内容来自网络,如有侵权请及时联系删除。
与“thinkphp 3.1 这个查询怎么进行分页”相关推荐
thinkphp 关联模型怎么进行条件查询
thinkphp 关联模型怎么进行条件查询

thinkphpwhere有多个条件进行复合查询,关系为or,代码如下请参考thinkphp开发手册的查询语言一节,可以有不同写法,我这里写一种供你参考:$where1=array(    'Key'=&gt;array('like','zt'.'%'),    'code'=&gt;'02');$where=array(    'modes'=&gt;1,    'Key'=&gt;

2024-12-29 23:59:21
thinkphp 3.1 路由怎么设置?
thinkphp 3.1 路由怎么设置?

关于thinkphp配置路由无效果的解决方案1、打开“config.php”,找到'url_route_on',改为true2、打开“route.php”,例如:“www.hyxx.com/Index.php/api/user/index/id/2”改为“api.hyxx.com/user/2”(api.hyxx.com为之前设置的二级域名)。那么就在return中写成   '

2024-09-25 20:31:27
ThinkPHP中,关联查询,怎么定义别名?
ThinkPHP中,关联查询,怎么定义别名?

ThinkPHP中,关联查询,怎么定义别名?比如你有两个表 pre_first pre_second并且你数据库配置文件已经配置了表前缀那么你可以这么写$First=new \Think\Model("First");     //联表查询条件$arrJoin=array(    "__SECOND__ as s on f.id=s.id ", );     $list=$First-

2024-09-23 05:14:50
thinkphp嵌套查询是什么意思
thinkphp嵌套查询是什么意思

ThinkPHP里volist嵌套的问题我刚刚也遇到你这样的问题了,已经成功解决了。如果是维数组想要通过嵌套volist来实现读取。那样的话,你首先保证你读取的数据结构如下:为什么这样的数组结构呢?其中childs键值就是你的举例当中的vo1.name中的name了。childs下面的数据结构要保证也是一维的才能用volist读取出来。这时候你的vo1['name']才能解析出

2025-01-17 20:24:12
thinkphp ajax 无刷新 分页 返回值是整个页面 为什么
thinkphp ajax 无刷新 分页 返回值是整个页面 为什么

求一段php防mysql注入病毒代码。//POST过滤安全$_POST=check_input($_POST);functioncheck_input($value){if(get_magic_quotes_gpc()){$value=htmlspecialchars(trim($value));}else{$value=addslashes(htmlspeci

2024-08-29 17:57:58
thinkphp中怎么用group和count查询三篇文章各自的评论数
thinkphp中怎么用group和count查询三篇文章各自的评论数

thinkphp中怎么用group和count查询三篇文章各自的评论数文章评论数,1.首先你有个文章表吧article_id假设这个是文章表的自增ID,2.你还得有个评论表吧,评论表里面肯定有个关联的文章ID吧假设这个字段是comment_article_id;那么你现在要做的是关联2个表selectcount(1),b.article_titlefrom评论表aleftjoin文章表bon

2024-09-14 20:55:38
php 执行mysql中查询时内存溢出怎么办
php 执行mysql中查询时内存溢出怎么办

"0x02011350"指令引用的"0x02011350"内存.该内存不能为"read"运行某些程序的时候,有时会出现内存错误的提示,然后该程序就关闭。“0x????????”指令引用的“0x????????”内存。该内存不能为“read”。“0x????????”指令引用的“0x????????”内存,该内存不能为“written”。不知你出现过类似这样的故障吗?(0x后面内容

2024-11-17 00:34:26
thinkphp5 闭包查询怎么传参
thinkphp5 闭包查询怎么传参

thinkphp5闭包查询怎么传参闭包用use传参数&lt;?phpfunction test($b){$c=$b;return function($b) use($c){return  $c+$b;}}echo test(1);//输出2php方法中如何获取闭包的值?亲,你好,很高兴为你解答该问题首先,你的这个写法是有问题的哦!~class A {         

2024-08-22 20:51:42