本文实例讲述了yii分页组件用法。分享给大家供大家参考,具体如下:
该案例使用时,分页类在yii框架中以组件的形式存在于components中。
action代码如下:
1
2
3
4
5
6
7
8
9
10
11
|
public function actionIndex(){
$user =User::model();
//分页的使用
$count = $user -> count (); //获取总页数
$pagesize =3; //每一页显示的记录条数
$page = new Page( $count , $pagesize );
$sql = "select * from {{user}} $page->limit" ;
$info = $user ->findAllBySql( $sql );
$show_page = $page ->fpage();
$this ->renderPartial( "index" , array ( "info" => $info , 'show_page' => $show_page ));
}
|
在view页面,遍历info即可获取信息,输出show_page即可显示分页列表等信息。
现附上page.php代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
<?php
/**
* 分页类,以组件形式存在于componnets文件中
*/
class Page {
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 "Limit " .( $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 ;
}
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 .= " <a href='{$this->uri}&page=1'>{$this->config[" first "]}</a> " ;
return $html ;
}
private function prev(){
$html = '' ;
if ( $this ->page==1)
$html .= '' ;
else
$html .= " <a href='{$this->uri}&page=" .( $this ->page-1). "'>{$this->config[" prev "]}</a> " ;
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 .= " <a href='{$this->uri}&page={$page}'>{$page}</a> " ;
}
$linkPage .= " {$this->page} " ;
for ( $i =1; $i <= $inum ; $i ++){
$page = $this ->page+ $i ;
if ( $page <= $this ->pageNum)
$linkPage .= " <a href='{$this->uri}&page={$page}'>{$page}</a> " ;
else
break ;
}
return $linkPage ;
}
private function next(){
$html = '' ;
if ( $this ->page== $this ->pageNum)
$html .= '' ;
else
$html .= " <a href='{$this->uri}&page=" .( $this ->page+1). "'>{$this->config[" next "]}</a> " ;
return $html ;
}
private function last(){
$html = '' ;
if ( $this ->page== $this ->pageNum)
$html .= '' ;
else
$html .= " <a href='{$this->uri}&page=" .( $this ->pageNum). "'>{$this->config[" last "]}</a> " ;
return $html ;
}
private function goPage(){
return ' <input type="text" onkeydown="javascript:if(event.keyCode==13){var page=(this.value>' . $this ->pageNum. ')?' . $this ->pageNum. ':this.value;location=\'' . $this ->uri. '&page=\'+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;location=\'' . $this ->uri. '&page=\'+page+\'\'"> ' ;
}
function fpage( $display = array (0,1,2,3,4,5,6,7,8)){
$html [0]= " 共有<b>{$this->total}</b>{$this->config[" header "]} " ;
$html [1]= " 每页显示<b>" .( $this -> end ()- $this ->start()+1). "</b>条,本页<b>{$this->start()}-{$this->end()}</b>条 " ;
$html [2]= " <b>{$this->page}/{$this->pageNum}</b>页 " ;
$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 ;
}
}
|
希望本文所述对大家基于yii框架的PHP程序设计有所帮助。