我正在使用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'
),
));