custom pagination in yii1
ویجت pagination برای صفحه بندی اطلاعات استفاده می شود
و به صورت پیش فرض در ویجت های gridview و listview وجود دارد.
custom pagination in yii1
در این قسمت می خواهیم از pagination خارج از listview و gridview استفاده کنیم ,
همچنین این ویجت را شخصی سازی کنیم.
به عنوان مثال کلاس pager همچنین متن یا آیکون صفحه بعد یا صفحه قبل :
custom pagination in yii1
در مرحله اول با CDbCriteria دیتای مورد نظر را استخراج می کنیم :
$user_id = Yii::app()->user->id; $criteria = new CDbCriteria(); $criteria->condition = 'user_id = :id and is_deleted=0'; $criteria->order = 'id DESC'; $criteria->params = array(':id' => $user_id); $item_count = Inbox::model()->count($criteria);
در مرحله دوم کلاس CPagination را فراخوانی می کنیم:
$pages = new CPagination($item_count); $pages->setPageSize(2); $pages->applyLimit($criteria); // the trick is here!
در اینجا تعداد نمایش اطلاعات در هر صفحه را ۲ در نظر گرفتیم.
مراحل بالا در اکشنی به نام message به صورت یکجا قرار دادم:
public function actionMessage() { $this->layout = "//layouts/main2"; $user_id = Yii::app()->user->id; $criteria = new CDbCriteria(); $criteria->condition = 'user_id = :id and is_deleted=0'; $criteria->order = 'id DESC'; $criteria->params = array(':id' => $user_id); $item_count = Inbox::model()->count($criteria); $pages = new CPagination($item_count); $pages->setPageSize(2); $pages->applyLimit($criteria); // the trick is here! $this->render('message', array( 'model' => Inbox::model()->findAll($criteria), // must be the same as $item_count 'item_count' => $item_count, 'page_size' => 2, 'items_count' => $item_count, 'pages' => $pages, )); }
در ویو نیز ویجت CLinkPager را به صورت زیر استفاده می کنیم:
$this->widget('CLinkPager', array( 'currentPage' => $pages->getCurrentPage(), 'itemCount' => $item_count, 'pageSize' => $page_size, 'maxButtonCount' => 5, 'selectedPageCssClass' => 'active', 'hiddenPageCssClass' => 'disabled', 'firstPageCssClass' => 'previous', 'firstPageLabel' => '<< first | ', 'prevPageLabel' => 'previous |', 'nextPageLabel' => ' | next', 'lastPageLabel' => ' | last >>', 'header' => '<p>Page:</p>', 'header' => '', 'htmlOptions' => array('class' => 'pagination'), ));
سفارشی سازی :
'selectedPageCssClass' => 'active',//کلاس لینک فعال 'hiddenPageCssClass' => 'disabled', // کلاس لینک های غیر فعال 'firstPageCssClass' => 'previous',//کلاس صفحه اول 'firstPageLabel' => '<< first | ',// متن اولین صفحه 'prevPageLabel' => 'previous |',// متن صفحه قبلی 'nextPageLabel' => ' | next',// متن صفحه بعدی 'lastPageLabel' => ' | last >>',// متن آخرین صفحه 'header' => '<p>Page:</p>', 'header' => '', 'htmlOptions' => array('class' => 'pagination'),// کلاس پیجینگ