Yii框架实现数据分页及排序的例子

在控制器:

 代码如下 复制代码

class PostController extends Controller
{
    function actionIndex()
    {
        $criteria = new CDbCriteria();
        $count=Post::model()->count($criteria);
        $pages=new CPagination($count);
 
        // elements per page
        $pages->pageSize=5;
        $pages->applyLimit($criteria);
 
        // sorting
        $sort = new CSort('Post');
        $sort->attributes = array('id', 'title',);
        $sort->applyOrder($criteria);
 
        $models = Post::model()->findAll($criteria);
 
        $this->render('index', array(
            'models' => $models,
            'pages' => $pages,
            'sort' => $sort,
        ));
    }
}

在视图文件中:

 代码如下 复制代码

<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,
))?>

一. DAO实现分页.

[Controller层]

 代码如下 复制代码

public function actionReport()
    {
        $sql = "select remitdate, sum(rate) sumrate from td_delivery
            group by remitdate
            order by remitdate desc";
        $criteria=new CDbCriteria();
        $result = Yii::app()->db->createCommand($sql)->query();
        $pages=new CPagination($result->rowCount);
        $pages->pageSize=2;
        $pages->applyLimit($criteria);
        $result=Yii::app()->db->createCommand($sql." LIMIT :offset,:limit");
        $result->bindValue(':offset', $pages->currentPage*$pages->pageSize);
        $result->bindValue(':limit', $pages->pageSize);
        $posts=$result->query();
        $this->render('report',array(
                'posts'=>$posts,
                'pages'=>$pages,
        ));
    }

[View层]

<?php foreach($posts as $row):?>
 <?php echo CHtml::link($row["remitdate"],array('delivery/view','remitdate'=>$row["sumrate"]));?>
 <?php echo $row["sumrate"]."<br />" ?>
 <?php endforeach;?>
 <?php
 //分页widget代码:
 $this->widget('CLinkPager',array('pages'=>$pages));
 ?>

优点: DAO效率高; 缺点: view层需要自己写一些样式,稍显麻烦一点

二. widget实现分页

[model层]

 代码如下 复制代码

/**
     * @var string attribute : 日运费 (统计用)
     * 需要对新增加的字段做个声明
     */
    public $dayrate;

    /*
     * 统计功能: 统计每日的运费
     */
    public function statistics()
    {
        $criteria = new CDbCriteria;
        $criteria->select = 'remitdate, sum(rate) AS dayrate';
        $criteria->group = 'remitdate';
       
        return new CActiveDataProvider(get_class($this), array(
            'criteria'=>$criteria,
            'sort'=>array(
                // 表头设置点击排序的字段
                'attributes'=>array(
                    'remitdate',
                    'dayrate'=>array(
                        'asc'=>'dayrate',
                        'desc'=>'dayrate DESC',
                    )
                ),
                'defaultOrder'=>'remitdate desc',
            ),
        ));   
    }

[Controller层]

/**
     * 运单统计功能:
     * 按日期统计
     */
    public function actionReport()
    {
        $model=new Delivery('statistics');
        $model->unsetAttributes();  // clear any default values
        
        $this->render('report',array(
            'model'=>$model,
        ));
    }

[View层]

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'delivery-grid',
    'dataProvider'=>$model->statistics(),
    'filter'=>$model,
    'columns'=>array(
        'remitdate',
        'dayrate',
        array(
            'class'=>'CButtonColumn',
        ),
    ),
)); ?>

优点: 可以使用自带的样式; 缺点: 效率略低.

时间: 2024-08-31 18:51:52

Yii框架实现数据分页及排序的例子的相关文章

YII框架中搜索分页jQuery写法详解_php实例

控制层 use frontend\models\StudUser; use yii\data\Pagination; use yii\db\Query; /** * 查询 * */ public function actionSearch() { //接值 $where=Yii::$app->request->get(); //实例化query $query=new Query(); $query->from('stud_user'); //判断 if(isset($where['sex

MongoDB 数据分页和排序 limit,skip,sort用户

排序用sort,相当于order by,升序用1表示,降序用-1 比如,按age字段升序排列:  代码如下 复制代码 db.user.find().sort({"age":1}) 如果有多个字段,按姓名降序,年龄升序  代码如下 复制代码 db.user.find().sort({"name":-1,"age":1}) limit和skip一起用,相当于mysql里的limit:  代码如下 复制代码 b.user.find().skip(1).

Yii框架结合sphinx,Ajax实现搜索分页功能示例_php实例

本文实例讲述了Yii框架结合sphinx,Ajax实现搜索分页功能的方法.分享给大家供大家参考,具体如下: 效果图: 控制器: <?php namespace backend\controllers; use Yii; use yii\web\Controller; use yii\data\Pagination; use SphinxClient; use yii\db\Query; use yii\widgets\LinkPager; use backend\models\Goods; cl

yii框架搜索分页modle写法_php实例

控制器层 <?PHP namespace frontend\controllers; header('content-type:text/html;charset=utf-8'); use Yii; use yii\base\InvalidParamException; use yii\web\BadRequestHttpException; use yii\web\Controller; use yii\filters\VerbFilter; use yii\filters\AccessCon

yii框架搜索分页modle写法

控制器层 <?PHP namespace frontend\controllers; header('content-type:text/html;charset=utf-8'); use Yii; use yii\base\InvalidParamException; use yii\web\BadRequestHttpException; use yii\web\Controller; use yii\filters\VerbFilter; use yii\filters\AccessCon

使用fork/join框架对大型浮点数数组排序排序

问题描述 使用fork/join框架对大型浮点数数组排序排序 这个例子是<java7 编程高级进阶>一书第474页的例子.代码如下: import java.util.concurrent.ForkJoinPool; import java.util.concurrent.Future; import java.util.concurrent.RecursiveAction; public class Daemon { private static ForkJoinPool threadPoo

Yii框架分页实现方法详解

本文实例讲述了Yii框架分页实现方法.分享给大家供大家参考,具体如下: 下家公司用的框架是yii,这几天看了下相关教程,今儿把分页教程写下,最后把tp的分页也给整合进了yii,因为个人觉得yii分页没有tp用的顺手. 首页,在models目录里创建个Auth.php的模型文件,里面写入 class Auth extends CActiveRecord { public static function model($className = __CLASS__) { return parent::m

Yii框架结合sphinx,Ajax实现搜索分页功能示例

本文实例讲述了Yii框架结合sphinx,Ajax实现搜索分页功能的方法.分享给大家供大家参考,具体如下: 效果图: 控制器: <?php namespace backend\controllers; use Yii; use yii\web\Controller; use yii\data\Pagination; use SphinxClient; use yii\db\Query; use yii\widgets\LinkPager; use backend\models\Goods; cl

利用JQuery方便实现基于Ajax的数据查询、排序和分页功能

ajax|分页|排序|数据        之前很少会用javascript去实现页功能主要怕麻烦,但了解JQuery后这种想法发生了变化:有了这样的脚本组件就可以在编写脚本时方便和HTML隔离出来,这样编写高重用性的脚本就更方便.下面就是介绍在学习JQuery过程中编写的基于Ajax的数据查询.排序和分页功能的复用脚本,只要遵循脚本的某些规则描述HTML把脚本文件引入就可以方便实现以上描述的功能.        先看下实现功能的脚代码: /**应用脚本规则:           引用脚本: JQ