Yii Framework Forum: Datos De Gridview - Yii Framework Forum

Jump to content

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

Datos De Gridview DATOS DE GRIDVIEW Rate Topic: -----

#1 User is offline   cesarg24 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 09-November 12

Posted 17 March 2013 - 05:14 PM

Saludos a todos..

Ayuda por favor...

Tengo dos tablas relacionadas, TablaA con registros y TablaB sin registros. Como podria cargar los datos en un CGridView de la vista de admin.php que hace referencia a TablaB..???

Lo mas que he logrado es:
He comentado el //'dataProvider'=>$model->search(),

y luego he agregado el siguiente codigo:
'dataProvider'=>new CActiveDataProvider('TablaA'),

He Logrado que se liste los datos de tablaA, en la CGridView TablaB es decir de admin.php pero los campos que se lista como cod_fruta 100101 quisiera que me imprima el nombre..
ejemplo Manzana, Limon, etc..

Cree una funcion como ObtenerNombre en TablaAController.php
array(
'name'=>'cod_fruta',
'value'=>array($this,'ObtenerNombre'), //ver TablaAController.php
}

Pero arroja el siguiente error
CException
TablaBController and its behaviors do not have a method or closure named "ObtenerNombre".

Lo extraño o no se que estoy haciendo mal, es que si la vista fuera del CGridView TablaA admin.php
y creo la función, esta devuelve perfectamente los datos...

Gracias de antemano..
0

#2 User is offline   lagogz 

  • Advanced Member
  • PipPipPip
  • Yii
  • Group: Members
  • Posts: 478
  • Joined: 30-November 12
  • Location:Galiza

Posted 18 March 2013 - 06:11 AM

No te he entendido bien todo el mensaje, pero creo q sí q entendí lo que quieres hacer.

Supongamos lo siguiente:

Tabla "A"

idA
nombreA

Tabla "B"

idB
idA
nombreB

Entonces lo que queremos será mostrar en la vista admin del modelo B el nombre de A en lugar de su id.

Para esto no te hace falta crear ninguna función a mayores, ya q en tu modelo "B" deberías de tener todo lo necesario.

Modelo "B"

Aquí deberías de tener una relación del siguiente tipo (o parecida):

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(
                    'FK_rel_A_B' => array(self::BELONGS_TO, 'A', 'idA'),
);
}


admin.php de "B"

....
....
'columns'=>array(
array('header'=>'Nombre A', 
       'value'=>'$data->FK_rel_A_B->nombreA),
....
....


Y ya está, ya estarías mostrando el nombre en lugar del id. Tendrías también (si lo deseas, claro), añadir una propiedad (por ejemplo llamada $nombreA), configurar el search para q te busque por nombre, y añadir un AttributeLabel si quieres que se muestre un nombre distinto de nombreA a tu propiedad.

Y si quisieras crear una función del tipo ObtenerNombre, lo conveniente sería q la creases en tu modelo y no en tu controlador:

public function ObtenerNombre()
    {                                        
        return $this->FK_rel_A_B->nombreA;
    }


En tu caso no tendría sentido pero sí por ejemplo para calcular el total de una factura.

Un saludo.
-----------------------------------------------------------------------------------------------
------------------------------- VISITEN FOCUCHASART --------------------------------
-----------------------------------------------------------------------------------------------
0

#3 User is offline   cesarg24 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 9
  • Joined: 09-November 12

Posted 18 March 2013 - 12:35 PM

View Postlagogz, on 18 March 2013 - 06:11 AM, said:

No te he entendido bien todo el mensaje, pero creo q sí q entendí lo que quieres hacer.

Supongamos lo siguiente:

Tabla "A"

idA
nombreA

Tabla "B"

idB
idA
nombreB

Entonces lo que queremos será mostrar en la vista admin del modelo B el nombre de A en lugar de su id.

Para esto no te hace falta crear ninguna función a mayores, ya q en tu modelo "B" deberías de tener todo lo necesario.

Modelo "B"

Aquí deberías de tener una relación del siguiente tipo (o parecida):

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(
                    'FK_rel_A_B' => array(self::BELONGS_TO, 'A', 'idA'),
);
}


admin.php de "B"

....
....
'columns'=>array(
array('header'=>'Nombre A', 
       'value'=>'$data->FK_rel_A_B->nombreA),
....
....


Y ya está, ya estarías mostrando el nombre en lugar del id. Tendrías también (si lo deseas, claro), añadir una propiedad (por ejemplo llamada $nombreA), configurar el search para q te busque por nombre, y añadir un AttributeLabel si quieres que se muestre un nombre distinto de nombreA a tu propiedad.

Y si quisieras crear una función del tipo ObtenerNombre, lo conveniente sería q la creases en tu modelo y no en tu controlador:

public function ObtenerNombre()
    {                                        
        return $this->FK_rel_A_B->nombreA;
    }


En tu caso no tendría sentido pero sí por ejemplo para calcular el total de una factura.

Un saludo.



Saludos.

Gracias por tu explicación muy ilustrativo, voy a aplicarlo a mi programa..saludos!..
0

#4 User is offline   safitanet 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 45
  • Joined: 04-August 11

Posted 02 April 2013 - 03:10 AM

La function en tu Controller tendría que tener el siguiente formato:


protected function ObtenerNombre($data, $row) {

}



Saludos
0

#5 User is offline   junke1988 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 21
  • Joined: 08-April 13

Posted 13 April 2013 - 01:12 AM

Hola, tengo el mismo problema que cesarg24, ya he conseguido mostrar los campos que quiero de un modelo llamado "usuario" (por ejemplo) en el gridview (la vista admin) de otro modelo llamado "alumno".

Pero no consigo hacer que filtre por los campos mostrados del modelo de usuario. Al parecer tengo que añadir una fila a la función search() del modelo alumno ¿no?, he añadido filas pero no filtra... (ver codigo más abajo)

Os explico mi codigo:

Tengo una clase Usuario [dni,nombre,direccion,telefono,email] y 3 clases que heredan de ella Alumno[dni,grupoScout,asociacion,nExpediente], profesor[dni,titulacion,curriculum], administrador[dni].
Lo que pretendo es hacer 3 gridview de alumnos, profesores y administradores en el que muestre tambien los campos de usuario.

MODELO:
public function search()
        {
                $criteria=new CDbCriteria;
                $criteria->compare('dni',$this->dni,true); //CAMPO DE ALUMNO
                $criteria->compare('grupoScout',$this->grupoScout,true); //CAMPO DE ALUMNO
                $criteria->compare('asociacion',$this->asociacion,true); //CAMPO DE ALUMNO

                $criteria->compare('email',$this->usuario->email,true); //CAMPO DE USUARIO (FILA AÑADIDA)
                $criteria->compare('telefono',$this->usuario->telefono,true); //CAMPO DE USUARIO (FILA AÑADIDA)

  return new CActiveDataProvider($this, array(
                        'criteria'=>$criteria,
                ));
        }



VISTA (admin.php):
<?php $this->widget('zii.widgets.grid.CGridView', array(
        'id'=>'alumnos-grid',
        'dataProvider'=>$model->search(),
        'filter'=>$model,
        'columns'=>array(
                array(
                'name'=>'usuario.nombre',
                'value'=>'$data->usuario->nombre." ".$data->usuario->apellidos',
                ),
                'dni',
                array(
                'name'=>'usuario.telefono',
                'value'=>'$data->usuario->telefono',
              //  'filter' => CHtml::activeTextField($model->usuario,'telefono'), // HE PROBADO PONIENDO ESTA LINEA Y TAMPOCO FUNCIONA EL FILTRO
                ),
                array(
                'name'=>'usuario.email',
                'value'=>'$data->usuario->email',
                ),
                'grupoScout',
                'asociacion',
                array(
                        'class'=>'CButtonColumn',
                ),
        ),
)); ?>



¿Alguien puede ayudarme?

Muchas gracias
0

#6 User is offline   junke1988 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 21
  • Joined: 08-April 13

Posted 13 April 2013 - 06:50 AM

He encontrado la solución en esta página: http://www.internetr...dview/#more-990
;D
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