Yii Framework Forum: Problema Con La Paginación De Un Grid - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Problema Con La Paginación De Un Grid Rate Topic: -----

#1 User is offline   michelinho80 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 21
  • Joined: 07-November 12
  • Location:Tenerife, Islas Canarias, España

Posted 07 November 2012 - 06:22 PM

Hola a tod@s!

He programado durante algunos años en .NET, ASP... y he hecho alguna cosilla en php nativo. Soy completamente nuevo en el mundo de los frameworks de php y en el MVC, así que me surgen dudas que posiblemente sean chorradas. Espero que me puedan ayudar.

Estoy implementando un buscador que funciona de la siguiente manera:

En la página principal de mi aplicación tengo 2 dropDownLists dentro de un CActiveForm:

$form=$this->beginWidget('CActiveForm', array(
	'id'=>'buscador-form',
	'action'=>'actividades/buscar',
	'method'=>'post',
	'enableAjaxValidation'=>true,
	'enableClientValidation'=>false));
?>
<div id="buscador">
	<label for="Actividades_Actividad" class="required">Selecciona tu actividad</label>
	<?php echo $form->dropDownList(Actividades::model(), 'IdActividad', CHtml::listData(Actividades::model()->findAll(), 'IdActividad', 'Actividad'), array('options'=>array('42'=>array('selected'=>true)),'name'=>'actividad')); ?>
	<br />
	<br />
	<label for="Municipios_Municipio" class="required">Selecciona tu Municipio</label>
	<?php echo $form->dropDownList(Municipios::model(),	'IdMunicipio', CHtml::listData(Municipios::model()->findAll(" IdIsla = 1 "), 'IdMunicipio', 'Municipio'), array('options'=>array('24'=>array('selected'=>true)),'name'=>'municipio')); ?>	
	<br />
	<br />
	<?php
	$this->widget('ext.EChosen.EChosen', array('target' => 'select', 'useJQuery' => true, 'debug' => true,)); 
	$this->widget('bootstrap.widgets.TbButton', array('buttonType'=>'submit','type'=>'info','label'=>'Encontrar','loadingText'=>'Buscando...','htmlOptions'=>array('id'=>'buttonStateful','style'=>'margin-left:132px')));?>
</div>
<?php
$this->endWidget();
?>


Mediante el action del CActiveForm, envío los parámetros de búsqueda a mi acción "buscar" del controlador "actividades":

	public function actionBuscar($data)
	{
		if(isset($_POST['municipio']) and isset($_POST['actividad'])) {
			$dataProvider=new CActiveDataProvider('Vwactividades', array(
				'criteria'=>array(
					'condition'=>'IdMunicipio = '.$_POST["municipio"].' AND IdActividad = '.$_POST["actividad"]
				)
			));
		}
		$this->render('buscar',array(
			'dataProvider'=>$dataProvider,
		));
	}


Recibo los valores POST, hago una búsqueda sobre una view de la base de datos, y renderizo la view buscar:

<?php 
$this->widget('zii.widgets.grid.CGridView', array(
	'id'=>'busqueda-grid',
	'dataProvider'=>$dataProvider,
	'filter'=>null,
	'columns'=>array(
		array(
			'name'=>'Nombre',
			'header'=>'Establecimiento',
			'type'=>'raw',
			'value'=>'"<nobr>".$data->Nombre."</nobr>"'
		),
		array(
			'name'=>'Dias',
			'header'=>'Días',
			'type'=>'raw',
			'value'=>array(Dias::model(), 'getDias')	
		),
		'Mensualidad',
		array(
			'name'=>'Valoracion',
			'header'=>'Valoración',
			'type'=>'raw',
			'value'=>array(Clientes::model(), 'getValoracion')		
		),
	),
));  
?>


El problema lo tengo al intentar ordenar el grid haciendo clic en los headers. Me lanza un alert con el error siguiente:

Error 500: <h1>PHP Error [8]</h1> <p>Undefined variable: dataProvider</p>

Entiendo que el problema está en que la paginación vuelve a llamar a la acción "buscar", ya que veo que la url que intentan abrir es así: .../actividades/buscar?Vwactividades_sort=Nombre, y claro... como no recibe nada en $_POST, no puede volver a crear el $dataProvider.

He conseguido solucionarlo temporalmente haciendo que los valores de la búsqueda se envíen por GET, pero me parece poco elegante como solución definitiva. Preferiría que la URL se mantuviera como /actividades/buscar en vez de /actividades/buscar?municipio=24&actividad=42

Alguien me orienta? Tal vez lo estoy haciendo mal desde el principio ::)

Saludos a todos!
0

#2 User is offline   robregonm 

  • Experienced Yii Developer
  • PipPipPipPip
  • Yii
  • Group: Members
  • Posts: 602
  • Joined: 30-July 09
  • Location:Colombia

Posted 08 November 2012 - 11:27 AM

Hola michelinho :)
El error está en que la variable $dataProvider SOLO está disponible cuando hay un POST... lo cual genera un error :)
Así que en ese caso, lo mejor es hacer un $dataProvider vacío cuando no haya POST. (Algo como new CActiveDataProvider())

Saludos
Ricardo Obregón
LinkedIn Profile
YiiFramework en Español - http://yiiframework.co/ - Yii Code Generator for Bootstrap
http://obregon.co/ - https://1server.co/
PHP 5.5+, nginx, MySQL, PostgreSQL, Yii 1.x & 2.x, CanJS and more.
Follow me: @robregonm & @obregonco & @1ServerCo.
0

#3 User is offline   michelinho80 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 21
  • Joined: 07-November 12
  • Location:Tenerife, Islas Canarias, España

Posted 09 November 2012 - 11:58 AM

Hola! Eso no me vale, porque recarga la página con el dataProvider con todos los datos del modelo, sin filtrar por los valores seleccionados en los dos combos de la página inicial.

Gracias por la respuesta, de todas formas.

Alguna idea? Necesito que se mantenga el mismo dataProvider.
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users