custom pagination in yii1

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'),// کلاس پیجینگ

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *