Buenas,
Soy algo novato en Yii.
Bien, dentro de la vista view he creado tres solapas con CJuiTabs, en las cuales en una de ellas llamo a una acción del controlador (datos), en la cual cargo un formulario en AJAX con renderpartial si no se ha enviado el formulario o bien proceso el formulario y genero los datos para cargarlos en un CGridView (esto también lo hago a través de renderpartial). La vista donde esta el CGridView carga correctamente el formulario, el problema es al hacer click en algún enlace de la paginación que esta ya no carga los datos en el CGrdiView sino que se muestra directamente el formulario. ¿Cómo podría solucionarlo?. Pego el código para que quede más claro todo lo que he puesto aquí, gracias a todos de antemano.
Vista del CJuiTabs
<?php
/* @var $this ZonasController */
/* @var $model Zonas */
$this->breadcrumbs=array(
'Zonases'=>array('index'),
$model->id,
);
?>
<?php
$this->widget('zii.widgets.jui.CJuiTabs',array(
'id'=>'zonas_tab',
'tabs'=>array(
Yii::t('default', 'Mapa')=>array('ajax'=>Yii::app()->createUrl('zonas/mapa', array('id'=>$model->id))),
Yii::t('default', 'Datos')=>array('ajax'=>Yii::app()->createUrl('zonas/datos', array('id'=>$model->id))),
Yii::t('default', 'Gráficas')=>$this->renderPartial("_viewGraficas", array('model' => $model), $this),
),
// additional javascript options for the tabs plugin
'options'=>array(
'collapsible'=>true,
),
));
?>
Vista del formulario
<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'datos-search',
'enableAjaxValidation'=>true,
'clientOptions'=>array(
'validateOnSubmit'=>true,
'validateOnChange'=>true,
)
));?>
<div id="formResult"></div>
<p class="note">Fields with <span class="required">*</span> are required.</p>
<?php echo $form->errorSummary($model2); ?>
<div class="row">
<?php echo $form->labelEx($model2,Yii::t('default', 'FInicio')); ?>
<?php
$this->widget('zii.widgets.jui.CJuiDatePicker', array(
//'language'=>'es',
'model'=>$model2,
'attribute'=>'FInicio',
'options'=>array('dateFormat'=> 'yy-mm-dd'),
//'htmlOptions'=>array('readonly'=>true),
));
?>
<?php echo $form->error($model2,'FInicio');?>
</div>
<div class="row">
<?php echo $form->labelEx($model2,Yii::t('default', 'FFin')); ?>
<?php
$this->widget('zii.widgets.jui.CJuiDatePicker', array(
//'language'=>'es',
'model'=>$model2,
'attribute'=>'FFin',
'options'=>array('dateFormat'=> 'yy-mm-dd'),
//'htmlOptions'=>array('readonly'=>false),
));
?>
<?php echo $form->error($model2,'FFin'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model2,'EnSal'); ?>
<?php echo $form->dropDownList($model2,'EnSal', CHtml::listData(Ensal::model()->findAll("id_zona=$model->id"), 'id', 'nombre')); ?>
<?php echo $form->error($model2,'EnSal'); ?>
</div>
<div class="row buttons">
<?php
echo CHtml::ajaxSubmitButton('submit',
Yii::app()->createUrl('/zonas/datos',array('id'=>$model->id)),
array(
'type'=>'POST',
'update'=>'#content-formImeter',
'success'=>"function(data) {
if (data.indexOf('{')==0) {
var e = jQuery.parseJSON(data);
jQuery('.errorSummary').empty();
var list = jQuery('.errorSummary').append('<ul></ul>').find('ul');
jQuery.each(e, function(key, value) {
jQuery('#'+key+'_em_').show().html(value.toString());
jQuery('#'+key).addClass('clsError');
jQuery('label[for='+key+']').addClass('clsError');
list.append('<li>'+value.toString()+'</li>');
});
jQuery('.errorSummary').show();
}
else {
jQuery('.errorMessage').hide();
jQuery('.errorSummary').hide();
jQuery('#content-formImeter').empty();
jQuery('#content-formImeter').append(data);
}
}"
));?>
</div>
<?php $this->endWidget(); ?>
</div><!-- form -->
<div id="content-formImeter"></div>
Vista donde se encuentra el CGridView
<div id="zonas-grid">
<?php
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'zonas-grid',
'dataProvider'=>$dataProvider,
//'filter'=>$model,
'columns'=>array(
'HLectura',
),
));
?>
</div>
Acción del controlador:
public function actionDatos($id)
{
$model = new FBuscarDatosImts();
$model2 = $this->loadModel($id);
if (Yii::app()->getRequest()->getIsAjaxRequest()) {
if (isset($_POST['FBuscarDatosImts'])) {
$model->attributes = $_POST['FBuscarDatosImts'];
if ($model->validate()) {
// Todos los registros de una fecha en concreto
if (empty($_POST['FBuscarDatosImts']['FFin'])) {
$dataProvider=new CActiveDataProvider('Datos', array(
'criteria'=>array(
'join'=>"INNER JOIN imeters ON (t.id_imeter = imeters.id)",
'condition'=>"imeters.id_ensal = ". $_POST['FBuscarDatosImts']['EnSal']." AND t.fecha = " .$_POST['FBuscarDatosImts']['FInicio'])));
$this->renderPartial('_tabDatos',array('dataProvider'=>$dataProvider,'model'=>$model2), false, true);
}
else {
echo "nada";
}
}
else {
$error = CActiveForm::validate($model);
if ($error != '[]') {
echo $error;
Yii::app()->end();
}
}
Yii::app()->end();
}
}
$this->renderPartial('/zonas/_FBuscarDatosImts',array('model'=>$model2,'model2'=>$model),false,true);
}