'defaultOrder'=>array('title' => false), false是升序,true是倒叙
1.自定义分页
使用CPagination呈现相关信息到页码. 当数据需要渲染到多页时,我们可能使用去呈现信息,诸如itemCount, pageSize, currentPage,等等. 这些信息被传递到pagers
//某一页的记录列表 public function getPagerList($modelClass, $page = 1, $where = '') { $pageSize = Yii::app()->params['pagesize']; $offset = ($page - 1) * $pageSize; $sql = $this->_listSql($modelClass, $where, '*'); $command = Yii::app()->db->createCommand($sql . " LIMIT :offset,:limit"); $command->bindValue(':offset', $offset); $command->bindValue(':limit', $pageSize); return $command->queryAll(); } private function _listSql($modelClass, $where, $field = 'COUNT(*)') { $sql = "SELECT $field FROM " . CActiveRecord::model($modelClass)->tableSchema->name; if ($where) $sql .= " WHERE {$where}"; return $sql; } //记录总数 public function getCount($modelClass, $where = "") { $sql = $this->_listSql($modelClass, $where); return Yii::app()->db->createCommand($sql)->queryScalar(); } $pages = new CPagination($count); $pages->pageSize = 4; //$pages->setCurrentPage($page-1); $pdata =Yii::app()->db->createCommand($sql." LIMIT :offset,:limit"); $pdata->bindValue(':offset', $pages->getOffset(); $pdata->bindValue(':limit', $pages->getLimit()); $info = $pdata->queryAll();
CActiveDataProvider不使用分页,取所有记录
$model = Orders::model(); if (isset($_GET['Orders'])) { $model->attributes = $_GET['Orders']; } $dataProvider = $model->search(); $dataProvider->setPagination(false); //禁用分页 $listAll = $dataProvider->getData();
PostController.php
function actionIndex() { $criteria = new CDbCriteria(); $criteria->compare("log_id", ">0"); $count = Ipad3SerialNumber::model()->count($criteria); $pages = new CPagination($count); // elements per page $pages->pageSize = 2; $pages->applyLimit($criteria); // sorting $sort = new CSort('Ipad3SerialNumber'); $sort->attributes = array( 'title', ); $sort->defaultOrder = array('get_time' => true); $sort->applyOrder($criteria); $models = Ipad3SerialNumber::model()->findAll($criteria); $this->render('list', array( 'models' => $models, 'pages' => $pages, 'sort' => $sort, )); }
view
<?php <p><?php echo $sort->link('id')?></p> <p><?php echo $sort->link('title')?></p> <ol> <?php foreach($models as $model):?> <li> <h2><?php echo $model->id?> - <?php echo $model->title?></h2> </li> <?php endforeach?> </ol> <?php $this->widget('CLinkPager', array( 'pages' => $pages, 'header'=>'' )); $this->widget('CListPager', array( 'pages'=>$pages, 'header'=>'-' )); ?>
点击$sort的link可以动态排序
2系统也有封装的分页 ,排序GRIDView 覆盖public $pager = 'CardPager'属性和renderPager()方法
enableSorting=false全部禁用排序,单列禁用排序sortable =false,enablePagination=false
public function actionAR(){ /****用法一:*****/ $criteria = new CDbCriteria(); $criteria->compare('serviceType',$arr); $dataProvider=new CActiveDataProvider('Post',array( 'criteria' => $criteria, )); /****用法二:*****/ $dataProvider=new CActiveDataProvider('Post', array( /*'criteria'=>array( 'condition'=>'status=1 AND tags like :tags', 'params'=>array(':tags'=>$_GET['tags']), 'order'=>'create_time DESC', 'with'=>array('author'), ),*/ 'pagination'=>array( 'pageSize'=>100, ), 'sort'=>array( 'defaultOrder'=> array('title'=>true), ), )); $this->render('index', array( 'dataProvider' => $dataProvider, )); } public function actionArray(){ //推荐不用,数组大内存溢出 $rawData= array(array( 'name'=>'István Beregszászi', 'duty'=>'core framework development', 'active'=>false, )); //$rawData=Yii::app()->db->createCommand($sql)->queryAll(); $dataProvider = new CArrayDataProvider($rawData, array( 'sort'=>array( 'attributes'=>array('name', 'id', 'active'), 'defaultOrder'=>array('active' => true, 'name' => false), ), 'pagination'=>array( 'pageSize'=>10, ), )); $this->render('index', array( 'dataProvider' => $dataProvider, )); } public function actionSQL(){ $count = Yii::app()->db->createCommand('SELECT COUNT(*) FROM film')->queryScalar(); $sql = 'SELECT film_id,title FROM film'; $dataProvider=new CSqlDataProvider($sql,array( 'keyField'=>'film_id', //sql in select table column default id 'totalItemCount'=>$count, 'sort'=>array( 'attributes'=>array('title'), //sql table columns 'defaultOrder'=>array('title' => true), ), 'pagination'=>array( 'pageSize'=>100, ), )); $this->render('index', array( 'dataProvider' => $dataProvider, )); }
view
<?php foreach($dataProvider->data as $film):?> <?php echo $film->title?> <?php endforeach?> <?php $this->widget('CLinkPager',array('pages'=>$dataProvider->pagination))?>
也可以套CGridView(推荐) summaryText,{summary}自定义总计信息
<?php $this->widget('zii.widgets.grid.CGridView', array( 'dataProvider'=>$dataProvider, 'template'=>'{items}{summary}{pager}', 'summaryText'=>"第{start}-{end}条, 共 {count} 条,页数:{page}/{pages}页", 'columns'=>array( array( 'name' => 'title', 'header' => '订单号', 'value'=>'$data[title]', //if is_array ) ), ));?> <?php $this->widget('application.components.widgets.grid.GridView', array( 'dataProvider'=>$dataProvider, 'template' => "{pager}", )); ?>
3分页扩展
mypager是 一个非常简单的 扩展 , 结合在一个 CListPager 和 CLinkPager , 允许 用户选择 他们想要 去 或者 点击 一个页面 按钮 CLinkPager ) , 或 选择 从 下拉列表中 的 页面 ( CListPager ) 页 CGridView 。
CLinkPager首页,末页CSS默认不显示
CLinkPager首页,末页CSS默认不显示
/** * Hide first and last buttons by default. */ ul.yiiPager .first, ul.yiiPager .last { display:none; }
<?php $this->widget('zii.widgets.grid.CGridView', array( 'id'=>'customer-grid', 'dataProvider'=>$model->search(), 'pager'=>array( //'class'=>'CLinkPager', //LinkListPager 'maxButtonCount'=>8, 'firstPageLabel'=>'首页', 'lastPageLabel'=>'末页', 'nextPageLabel'=>'下一页', 'prevPageLabel'=>'上一页', 'header'=>'', 'cssFile'=>false, //如果使用主css文件,那么这里可以写false,如果使用其它附加css文件,我们这里填写css文件名。 ), ));?>
相关推荐
在 Datagrid 中,我们通常会根据用户输入的参数(如分页、排序等)来动态构建查询: ```php $query = User::find()->where(['status' => 1])->orderBy('created_at DESC'); ``` 现在,我们引入Datagrid组件,它是...
在实际应用中,Yii 的分页机制非常灵活,可以轻松与其他查询条件、排序规则等结合。通过正确使用 `CDbCriteria` 和 `CPagination`,我们可以创建高效且用户友好的分页效果。此外,Yii 还提供了其他组件如 `CSort` ...
它不仅能够快速显示数据,还能提供分页和排序功能。CListView分页通常会和CActiveDataProvider结合使用。在控制器中设置好dataProvider,并传递给CListView的'dataProvider'参数。在视图文件中,通过CListView小部件...
创建一个新的方法`statistics`,使用`CDbCriteria`对象进行统计查询,并返回`CActiveDataProvider`对象,其中包含了排序和分页的信息。 ```php public function statistics() { $criteria = new CDbCriteria; $...
在实现自定义分页过程中,开发者可能还会遇到一些其他问题,例如数据过滤、排序、语言国际化等问题。在Yii框架中,这些功能也都有对应的组件支持。开发者应当熟悉Yii框架的官方文档,通过阅读官方文档来获取更多高级...
6. 若需要将ThinkPHP的分页功能整合进Yii框架,可以将ThinkPHP的分页类文件放置到Yii的protected/components目录下,并进行适当的修改以适配Yii的语法习惯。 举例来说,在控制器的actionList()方法中,我们首先通过...
此外,Yii还提供了查询构建器和关系查询功能,如JOIN、子查询、聚合函数、分页、排序、过滤等,使得数据库操作更加灵活和高效。同时,Yii2中的`Migration`类简化了数据库结构的版本控制和迁移。 总之,Yii框架提供...
待定中 排序(Sorting) 编撰中 数据提供器 编撰中 数据小部件 编撰中 主题 安全 编撰中 认证(Authentication) 编撰中 授权(Authorization) 编撰中 处理密码 待定中 客户端认证 待定中 安全领域的最佳实践 缓存 ...
在Yii框架中,CGridView是一个非常实用的组件,主要用于在Web页面上展示数据列表,并且支持排序、分页以及AJAX数据请求等高级功能。CGridView广泛应用于各种需要以表格形式显示数据的场景,比如管理后台的数据显示、...
除了基本的分页实现,Yii 还提供了许多扩展方法和策略,例如自定义分页样式、结合搜索功能进行分页、利用 Ajax 实现无刷新分页等。通过这些高级特性,开发者可以根据项目需求创建更灵活、用户友好的分页效果。 总之...
例如,Kendo Grid 可以轻松实现数据的分页、排序、过滤和编辑,非常适合展示大量数据。Kendo Chart 提供各种图表类型,如柱状图、折线图、饼图等,用于数据可视化。还有 Kendo Scheduler,可用来创建日历和计划管理...
这种方法适用于数据量较大时,它利用数据提供者(Data Provider)来处理数据的分页、排序等。在控制器中,创建一个`CActiveDataProvider`实例并传入模型名称及相应的查询条件和分页配置。然后在视图中使用`CListView...
在YII2框架中,分页组件的使用十分便捷,它主要涉及以下知识点: 1. AR模型创建 Active Record(AR)模型是YII2框架中操作数据库的基础。在介绍分页之前,首先要创建一个AR模型,通常继承自`yii\db\ActiveRecord`...
5. **查询接口**:学习Sphinx的查询语法,包括匹配模式、排序方式、分页等,然后在Yii2中实现这些查询逻辑。Sphinx支持布尔、短语、前缀等多种查询类型,可以实现复杂的搜索需求。 6. **中文分词**:如果使用...
在这个特定的话题中,“YII CGridView CListView 返回列表带记忆功能”指的是如何在Yii框架中实现CGridView和CListView组件的分页功能,并且在用户翻页或刷新页面后仍能记住用户的筛选、排序和选择状态。 CGridView...
它支持分页、排序、数据过滤等功能,非常适合用来创建复杂的表格界面。在Yii框架中,CGridView通常与数据提供者DataProvider配合使用,从而能够以分页的形式展示大量数据。在提供的示例中,我们看到了如何在...