hola, lo que pides requiere cierto nivel de avance en Yii, no por dificil, ni porque hayas pedido algo insolito…sino porque consumira varias cosas de Yii que quiza no tengas claras, disculpas si me adelanto a adivinar eso, no lo tomes a mal.
en primer lugar requeriras controlar cuando han hecho click sobre un registro renderizado en un CGridView, considerando ademas que has configurado a la propiedad selectableRows del CGridView, el cual admite 3 valores: 0-noselection_allowed, 1=select_only_one_record, 2=any_selection. Con eso en mente, podrás permitir que CGridView dispare un evento: selectionChanged, el cual es un punto para que tu pongas una funcion javascript que sera lanzada cuando el usuario hara click en un registro, dentro de esa funcion javascript, podras recoger la seleccion usando: [color=#333333][font=Verdana, sans-serif, Arial][size=2][font=monospace]$.fn.yiiGridView.getSelection(id)[/font] [/size][/font][/color]
[color=#333333][font=Verdana, sans-serif, Arial][size=2]puedes referirte a la documentacion de CGridView para detalles.[/size][/font][/color]
[color=#333333][font=Verdana, sans-serif, Arial][size=2]2. requieres conocer algo minimo en ajax/jquery, porque con la seleccion hecha, deberas invocar un action que retorne contenido usando ajax, para que este contenido finalmente se despliegue en un contenedor (un DIV) en tu browser directamente desde el action una vez q hayan hecho click en un record.[/size][/font][/color]
[color=#333333][font=Verdana, sans-serif, Arial][size=2]no es muy sencillo, pero tampoco imposible, hacerlo por tu propia via te dara "skills", copiar y pegarlo…no.[/size][/font][/color]
está bien práctica la solución indicada en el blog, es buena guía, se esta haciendo lo mismo pero de una forma mas oculta (ocultando detalles), si bien sirve para mostrar los registros relacionados a un record maestro, mi unico punto seria en que no le permite a la persona conocer un poco mas allá para que sepa como controlar al 100% la situación, ya q no esta viendo como usar un action ajax-based, el cual mas adelante lo podría necesitar aprendiendo de este metodo.
Gracias por el consejo, si manejo ajax en lo basico pero en yii no em he adaptado, el maestro detalle es algo sencilo, le voy a ir agregando cosas, yo veo el codigo y busco que agregarle mas poco a poco. luego pubico el codigo con mas cosas
Hola, el ejemplo me funciono, muchas gracias, pero tengo una duda pequeña, estuve buscando pero no encontre algo claro, mi duda es esta. como le digo al grid que me muestre ese detalle no cuando le de clic a cualquier columna sino a una columna en especifico. gracias y saludos.
estuve probando asi, agrego una columna de mas y le defino un id, pero me di cuenta que .getSelection() es para el id contenedor de cada row, eso es mi duda, como hacer que solo sea en una columna?
debo agregarle a es columna algo que diga que llame a ese js? como mas o menos podria ser. gracias
Que tal, disculpa la demora por responder no habia visto el post.
Ya en ese caso tiene que ver con las columnas del grid.
Sencillo , tendrias que configurar la columna, darle un id a esa columna usand la propiedad htmlOptions de la clase CDataColumn
Ejem:
$this->widget('zii.widgets.grid.CGridView', array(
'dataProvider'=>$dataProvider,
'columns'=>array(
'title', // una columna random D:
array(
'type'=>'raw', // Tipo raw para poder meter un hidden field
'value'=>'data->myColumnaAttr.CHtml::hiddenField("hiddeId",$data->myID)',
'htmlOptions'=>array("class"=>'myColumn') // le da la clase a cada TD de una columna para poder usar con el evento click
)
),
));
Yii::app()->clientScript::registerScript("LaLa",'
$(".myColumn").live("click","function(){
.....Aqui obtienes el id de esa columna con $(this+" hiddenId").val(), y lo utilizas para mandarlo con $.fn.yiiGridViewUpdate
}");
');
definir una columna tipo Raw te da la opcion de agregar componetes de Yii dentro del TD. con esto ponemos el valor que deseemos de la DB en un hiden Field para mandarlo al darle click con jquery.
PD> No es saludable hacer esto de este modo…al contrario es muy incorrecto, sugiero que revises el diseño de la base de datos, para que encuentres la forma mas saludable de hacerlo…recuerda tambien que los creadores de el framework son expertos, pensaron casi en todo, asi que no es bueno forzar a las herramientas que se usan por que tienden a dañarse.
usa el legndario principio “KISS” (Keep It Simple Stupid)