yii CActiveDataProvider或TbGridView不适用于分页

时间:2014-05-09 19:29:50

标签: php activerecord yii pagination yii-extensions

我正在使用Yii Booster TbGridView来显示CActiveDataProvider中的DataProvider。它运作但不完全。我不知道分页是怎么回事,因为当我从Grid中选择其他页面时,它不会返回任何记录。这很奇怪,因为默认情况下分页是10条记录,数据是例如33条记录,分页创建4页但是我只能看到前10条记录而其他页面在我点击页面编号后没有显示我想看看。我只能看到前十条记录。

这是我的代码: 行动(控制人员)

public function actionIndex() {
    //Verificamos si es la primera vez que se corre la accion y asignamos fechas iniciales
    if (!isset($_POST['FormGestionInformacion']['fechaDesde']) 
        && !isset($_POST['FormGestionInformacion']['fechaDesde']) ){
        $fechaHasta = date('Y-m-d');
        $fechaDesde = date('Y-m-d',time()-(60*60*24*15));//Quince dias atras
    } else {
        $fechaHasta = $_POST['FormGestionInformacion']['fechaHasta'];
        $fechaDesde = $_POST['FormGestionInformacion']['fechaDesde'];
    }

    //Verificamos si el usuario mando filtro, y armamos el WHERE a ver si esa palabra esta en alguna parte

    $criteria   =   new CDbCriteria();
    $criteria->alias    =   's';
    $criteria->select   =   'c.fecha_creacion,
                            c.fecha_cierre,
                            s.caso_sistema_info,
                            s.sistema_informacion,
                            s.documentacion,
                            s.fecha_documentacion,
                            s.usuario,
                            s.tipo_documentacion,
                            s.tipo_protocolo';
    $criteria->join = "INNER JOIN ".DB_USUARIOS.".soporte_casos c ON  s.caso_sistema_info=c.caso_sistema_info";
    $criteria->condition = "s.caso_sistema_info=c.caso_sistema_info and fecha_cierre>='"
        .$fechaDesde." 00:00:00' and fecha_cierre<='".$fechaHasta." 23:59:59'";
    $criteria->group = "s.caso_sistema_info";
    $criteria->order = " s.caso_sistema_info";
    $criteria->offset = 0;
    if (isset($_POST['FormGestionInformacion']['filtro']) 
        && $_POST['FormGestionInformacion']['filtro']!='') {
        $filtro = $_POST['FormGestionInformacion']['filtro'];
        $criteria->addCondition ("s.caso_sistema_info like '%$filtro%' 
                                or s.sistema_informacion like '%$filtro%' 
                                or s.usuario like '%$filtro%' or 
                                s.tipo_documentacion like '%$filtro%' 
                                or s.tipo_protocolo LIKE '%$filtro%'");
    }
    $dataProvider = new CActiveDataProvider('SoporteCasosDocumentacion', array(
                        'criteria'  =>  $criteria,
                        'pagination' => array( 
                            'pageSize' => 5,
                        ),      
                    )
                );
    $model = new FormGestionInformacion ();
    $this->render('index',  array(
                    'dataProvider'  =>  $dataProvider,
                    'model'=> $model,
                    'fechaDesde'=>$fechaDesde,
                    'fechaHasta'=>$fechaHasta,
                    'filtro'=>$filtro,
                    )
    );
}

型号:

class SoporteCasosDocumentacion extends CActiveRecord {
    /**
     * @return string the associated database table name
     */
    public function tableName() {
        return  'soporte_casos_documentacion';
    }
    /**
     * @return array validation rules for model attributes.
     */
    public function rules() {
        // NOTE: you should only define rules for those attributes that
        // will receive user inputs.
        return  array(
            array('caso_sistema_info, sistema_informacion, usuario',    'required'),
            array('fecha_documentacion, caso_sistema_info, sistema_informacion, usuario',   'length',   'max'   =>  45),
            array('email, celular', 'length',   'max'   =>  50),
            array('informacion_cliente_une',    'length',   'max'   =>  1),
            array('archivo_adjunto, pro_det, sol_dad, ubi_fal, causa, ser_afe, con_aut, cor_ele',   'length',   'max'   =>  100),
            array('tipo_documentacion, tipo_protocolo, tie_sol, tel_con, cel_con',  'length',   'max'   =>  10),
            array('documentacion, error_oci',   'safe'),
            // The following rule is used by search().
            // @todo Please remove those attributes that should not be searched.
            array('id_doc, fecha_documentacion, caso_sistema_info, sistema_informacion, documentacion, email, celular, informacion_cliente_une, usuario, archivo_adjunto, tipo_documentacion, tipo_protocolo, error_oci, pro_det, sol_dad, ubi_fal, causa, ser_afe, tie_sol, con_aut, cor_ele, tel_con, cel_con',   'safe', 'on'    =>  'search'),
        );
    }
    /**
     * @return array relational rules.
     */
    public  function relations() {
        // NOTE: you may need to adjust the relation name and the related
        // class name for the relations automatically generated below.

        return  array();
    }
    /**
     * @return array customized attribute labels (name=>label)
     */
    public function attributeLabels() {
        return  array(
            'id_doc' => 'Id Doc',
            'fecha_documentacion' => 'Fecha Documentacion',
            'caso_sistema_info' =>  'Caso Sistema Info',
            'sistema_informacion' => 'Sistema Informacion',
            'documentacion' => 'Documentacion',
            'email' => 'Email',
            'celular'   =>  'Celular',
            'informacion_cliente_une'   =>  'Informacion Cliente Une',
            'usuario'   =>  'Usuario',
            'archivo_adjunto'   =>  'Archivo Adjunto',
            'tipo_documentacion'    =>  'Tipo Documentacion',
            'tipo_protocolo'    =>  'Tipo Protocolo',
            'error_oci' =>  'Error Oci',
            'pro_det'   =>  'Pro Det',
            'sol_dad'   =>  'Sol Dad',
            'ubi_fal'   =>  'Ubi Fal',
            'causa' =>  'Causa',
            'ser_afe'   =>  'Ser Afe',
            'tie_sol'   =>  'Tie Sol',
            'con_aut'   =>  'Con Aut',
            'cor_ele'   =>  'Cor Ele',
            'tel_con'   =>  'Tel Con',
            'cel_con'   =>  'Cel Con',
        );
    }
    /**
        * Retrieves a list of models based on the current search/filter conditions.
        *
        * Typical usecase:
        * - Initialize the model fields with values from filter form.
        * - Execute this method to get CActiveDataProvider instance which will filter
        * models according to data in model fields.
        * - Pass data provider to CGridView, CListView or any similar widget.
        *
        * @return CActiveDataProvider the data provider that can return the models
        * based on the search/filter conditions.
        */
    public function search() {
        // @todo Please modify the following code to remove attributes that should not be searched.

        $criteria   =   new CDbCriteria;

        $criteria->compare('id_doc',    $this->id_doc,  true);
        $criteria->compare('fecha_documentacion',   $this->fecha_documentacion, true);
        $criteria->compare('caso_sistema_info', $this->caso_sistema_info,   true);
        $criteria->compare('sistema_informacion',   $this->sistema_informacion, true);
        $criteria->compare('documentacion', $this->documentacion,   true);
        $criteria->compare('email', $this->email,   true);
        $criteria->compare('celular',   $this->celular, true);
        $criteria->compare('informacion_cliente_une',   $this->informacion_cliente_une, true);
        $criteria->compare('usuario',   $this->usuario, true);
        $criteria->compare('archivo_adjunto',   $this->archivo_adjunto, true);
        $criteria->compare('tipo_documentacion',    $this->tipo_documentacion,  true);
        $criteria->compare('tipo_protocolo',    $this->tipo_protocolo,  true);
        $criteria->compare('error_oci', $this->error_oci,   true);
        $criteria->compare('pro_det',   $this->pro_det, true);
        $criteria->compare('sol_dad',   $this->sol_dad, true);
        $criteria->compare('ubi_fal',   $this->ubi_fal, true);
        $criteria->compare('causa', $this->causa,   true);
        $criteria->compare('ser_afe',   $this->ser_afe, true);
        $criteria->compare('tie_sol',   $this->tie_sol, true);
        $criteria->compare('con_aut',   $this->con_aut, true);
        $criteria->compare('cor_ele',   $this->cor_ele, true);
        $criteria->compare('tel_con',   $this->tel_con, true);
        $criteria->compare('cel_con',   $this->cel_con, true);

        return new CActiveDataProvider($this, array(
                        'criteria'  =>  $criteria,
                    ));
    }
    /**
     * @return CDbConnection the database connection used for this class
     */
    public function getDbConnection() {
        return  Yii::app()->Usuarios;
    }
    /**
     * Returns the static model of the specified AR class.
     * Please note that you should have this exact method in all your CActiveRecord descendants!
     * @param string $className active record class name.
     * @return SoporteCasosDocumentacion the static model class
     */
    public static function model($className = __CLASS__) {
        return  parent::model($className);
    }

}

小工具:

$this->widget('bootstrap.widgets.TbButton', array(
        'buttonType' => 'button',
        'type'  =>  'primary',
        'label' =>  'Consultar',
        'size'  =>  'large',
        'htmlOptions'   =>  array(
            'onClick'   =>  '{ValidacionDatos()}',
            'class' =>  'btn'
        ),
    ));

0 个答案:

没有答案