本文主要讲解了YII中使用CLinkPager分页的方法,这里我们采用物件的形式来定义分页:
首先在components中自定义LinkPager,并继承CLinkPager
具体代码如下:
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
|
<?php
/**
* CLinkPager class file.
*
* @link http://www.yiiframework.com/
* @copyright Copyright © 2008-2011 Yii Software LLC
* @license http://www.yiiframework.com/license/
*/
/**
* CLinkPager displays a list of hyperlinks that lead to different pages of target.
*
* @version $Id$
* @package system.web.widgets.pagers
* @since 1.0
*/
class LinkPager extends CLinkPager
{
const CSS_TOTAL_PAGE= 'total_page' ;
const CSS_TOTAL_ROW= 'total_row' ;
/**
* @var string the text label for the first page button. Defaults to '<< First'.
*/
public $totalPageLabel ;
/**
* @var string the text label for the last page button. Defaults to 'Last >>'.
*/
public $totalRowLabel ;
/**
* Creates the page buttons.
* @return array a list of page buttons (in HTML code).
*/
protected function createPageButtons()
{
$this ->maxButtonCount=8;
$this ->firstPageLabel= "首页" ;
$this ->lastPageLabel= '末页' ;
$this ->nextPageLabel= '下一页' ;
$this ->prevPageLabel= '上一页' ;
$this ->header= "" ;
if (( $pageCount = $this ->getPageCount())<=1)
return array ();
list( $beginPage , $endPage )= $this ->getPageRange();
$currentPage = $this ->getCurrentPage(false); // currentPage is calculated in getPageRange()
$buttons = array ();
// first page
$buttons []= $this ->createPageButton( $this ->firstPageLabel,0,self::CSS_FIRST_PAGE, $currentPage <=0,false);
// prev page
if (( $page = $currentPage -1)<0)
$page =0;
$buttons []= $this ->createPageButton( $this ->prevPageLabel, $page ,self::CSS_PREVIOUS_PAGE, $currentPage <=0,false);
// internal pages
for ( $i = $beginPage ; $i <= $endPage ;++ $i )
$buttons []= $this ->createPageButton( $i +1, $i ,self::CSS_INTERNAL_PAGE,false, $i == $currentPage );
// next page
if (( $page = $currentPage +1)>= $pageCount -1)
$page = $pageCount -1;
$buttons []= $this ->createPageButton( $this ->nextPageLabel, $page ,self::CSS_NEXT_PAGE, $currentPage >= $pageCount -1,false);
// last page
$buttons []= $this ->createPageButton( $this ->lastPageLabel, $pageCount -1,self::CSS_LAST_PAGE, $currentPage >= $pageCount -1,false);
// 页数统计
$buttons []= $this ->createTotalButton(( $currentPage +1). "/{$pageCount}" ,self::CSS_TOTAL_PAGE,false,false);
// 条数统计
$buttons []= $this ->createTotalButton( "共{$this->getItemCount()}条" ,self::CSS_TOTAL_ROW,false,false);
return $buttons ;
}
protected function createTotalButton( $label , $class , $hidden , $selected )
{
if ( $hidden || $selected )
$class .= ' ' .( $hidden ? self::CSS_HIDDEN_PAGE : self::CSS_SELECTED_PAGE);
return '<li class="' . $class . '">' .CHtml::label( $label ,false). '</li>' ;
}
/**
* Registers the needed client scripts (mainly CSS file).
*/
public function registerClientScript()
{
if ( $this ->cssFile!==false)
self::registerCssFile( $this ->cssFile);
}
/**
* Registers the needed CSS file.
* @param string $url the CSS URL. If null, a default CSS URL will be used.
*/
public static function registerCssFile( $url =null)
{
if ( $url ===null)
$url =CHtml::asset(Yii::getPathOfAlias( 'application.components.views.LinkPager.pager' ). '.css' );
Yii::app()->getClientScript()->registerCssFile( $url );
}
}
|
定义CSS样式
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
|
/**
* 翻页样式
*/
.page_blue{
margin : 3px ;
padding : 3px ;
text-align : center ;
font : 12px verdana , arial , helvetica , sans-serif ;
}
ul.bluePager,ul.yiiPager
{
font-size : 11px ;
border : 0 ;
margin : 0 ;
padding : 0 ;
line-height : 100% ;
display : inline ;
text-aligin: center ;
}
ul.bluePager li,ul.yiiPager li
{
display : inline ;
}
ul.bluePager a:link,ul.yiiPager a:link,
ul.bluePager a:visited,ul.yiiPager a:visited,
ul.bluePager .total_page label,ul.yiiPager .total_page label,
ul.bluePager .total_row label,ul.yiiPager .total_row label
{
border : #ddd 1px solid ;
color : #888888 !important ;
padding : 2px 5px ;
text-decoration : none ;
}
ul.bluePager .page a,ul.yiiPager .page a
{
font-weight : normal ;
}
ul.bluePager a:hover,ul.yiiPager a:hover
{
color : #FFF !important ; border : #156a9a 1px solid ; background-color : #2b78a3
}
ul.bluePager .selected a,ul.yiiPager bluePager .selected a
{
color : #3aa1d0 !important ;
border : 1px solid #3aa1d0 ;
}
ul.bluePager .selected a:hover,ul.yiiPager .selected a:hover
{
color : #FFF !important ;
}
ul.bluePager . hidden a,ul.yiiPager . hidden a
{
border : solid 1px #DEDEDE ;
color : #888888 ;
}
ul.bluePager . hidden ,ul.yiiPager . hidden
{
display : none ;
}
|
controller中操作:
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
|
//分页操作
$criteria = new CDbCriteria;
$criteria ->order= 'id DESC' ;
$criteria ->select= array ( 'id' , 'uid' , 'username' , 'title' , 'thumb' , 'url' , 'clicks' , 'time' , 'dateline' , 'countfavorite' , 'quality' );
$criteria ->condition= $sql ;
$total = Video::model()-> count ( $criteria );
$pages = new CPagination( $total );
$pages ->pageSize=self::PAGE_SIZE;
$pages ->applyLimit( $criteria );
$list = Video::model()->findAll( $criteria );
$title = CommonClass::model()->find( array (
'select' => array ( 'cname' ),
'condition' => 'id = ' . $id ,
));
$this ->render( 'application.views.video.list' , array (
'array' => $array ,
'arr' => $arr ,
'result' => $result ,
'list' => $list ,
'pages' => $pages ,
'title' => $title ,
));
|
在views/video/list.php中引用:
1
2
3
|
<?php
$this ->widget( 'LinkPager' , array ( 'pages' => $pages ,));
?>
|