本文主要讲解了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 ,)); ?> |