NDICE
GUI B !I" D# YII F$ %#&'$(............................................................................................................) I*!+ , *D' YII Y P$I%#$ P,I" "I-*............................................................................................... "$# *D' %'D#,'! Y "$UD P $+I$ D# U* B !# D# D +'!...................................................../ ,#*GU 0# Y 1I!+ P'$ D#F#"+'.............................................................................................................2 %'DIFI" *D' #, %#*3..............................................................................................................................7 U+#*+I" "I-* D# U!U $I'!.................................................................................................................4 ", 1#! F'$5*# ! #* 1I!+ !.................................................................................................................)6 1 ,ID *D' ,'! F'$%U, $I'!.............................................................................................................)7 '$D#* P'$ D#F#"+' Y "'*DI"I'* #8+$ #* G$ID.......................................................................)7 F#"9 ! "'* "0UID +#PI"(#$................................................................................................................): B3!;U#D ! P'$ F#"9 ! "'* !YD +#"',U%*...............................................................................6< #8P'$+ $ D#, "G$ID1I#& PDF..........................................................................................................66 $#P'$+#! P $+I$ D# U* B3!;U#D ...............................................................................................67 "'%B'! D#P#*DI#*+#!............................................................................................................................6: " %P' "'* U+'"'%P,#+ $.................................................................................................................) *' %'!+$ $ I*D#8.P9P #* , ! U$,...................................................................................................... GU $D $ U+'%5+I" %#*+# U!U $I' Y F#"9 D# "$# "I-* Y %'DIFI" "I-*............./ 9 "#$ F'$%U, $I' P $ %U,+IP,#! %'D#,'!.............................................................................7 " %P'! #*% !" $ D'! #* F'$%U, $I'........................................................................................:
DescomeAtamos el arreglo gii E colocamos el =assword >ue >ueramosG el modulo GII es el >ue Aos aEuda a crear el modelo E el "$UD de las tablas de Auestra base de datosG a coAtiAuaciCA Bamos a coAFigurar la coAeKiCAG =ara ello debemos comeAtar el siguieAte arreglo: 'dbMNOarraEP 'coAAectioA!triAgM NO 's>lite:M.dirAameP__FILE__Q.'D..DdataDtestdriBe.dbMG QG Y creamos Auestro AueBo arreglo de coAeKiCA as: 'dbMNOarraEP 'coAAectioA!triAgM NO '=gs>l:?ostNlocal?ostRdbAameNAombreJbaseJdatosMG 'emulatePre=areM NO trueG 'userAameM NO 'usuari MG '=asswordM NO '!"a#e$usuari MG 'c?arsetM NO 'utF:MG QG
Gua Bsica de Yii Framework Para dirigirAos al modelo GII co=iamos eA Auestra barra de direccioAes algo como ?tt=:DDlocal?ostDAombreJa=licacioADiAdeK.=?=SrNgiiG Aos =ide el =assword >ue coAFiguramos aAteriormeAteG uAa BeL deAtro le damos a H%odel GeAeratorI E colocamos el Aombre de la tablaG le damos PreBiew E luego GeAerateG a coAtiAuaciCA creamos el "$UD eA H"rud GeAeratorI colocaAdo el Aombre del modelo >ue acabamos de crear. !i logramos coAectarAos satisFactoriameAte a la base de datos Aos mostrar algo como la siguieAte imageA.
"oA esto ?emos creado todas las BistasG el coAtrolador E el modelo =ara esa tabla eA =articularG las Bistas soA: createG u=dateG iAdeKG admiA E Biew. Para agregar el modelo AueBo al meAT Aos Bamos al arc?iBo D=rotectedDBiewsDlaEoutsDmaiA.=?= E modiFicamos el arreglo de items del meAT agregAdole uAo AueBo de la siguieAte Forma: arraEP'labelMNO'#stadoMG 'urlMNOarraEP'DestadoDadmiAMQQG Ya =odemos =robar >ue =odemos crearG modiFicar E elimiAar registros de Auestro modelo.
'deFault"oAtrollerMNO'coAtroladorDadmiAMG DD 1ista =or deFecto #sto Ao Aos traduce las Bistas com=letameAteG muc?as cosas ?aE >ue cambiarlas a maAo. !i >ueremos colocar uA FaBicoA eA el ?ead de =rotectedDBiewsDlaEoutsDmaiA.=?= colocamos:
<link rel="shortcut icon" href="<?php echo Yii::app()->re uest->!ase"rl# ? >$ima%es$icon&pn%" type="ima%e$'-icon" $>
MODIFICANDO EL MEN'
coAtiAuaciCA Bamos a modiFicar el meATG de tal Forma >ue Aos >uede mas es=acio =ara las Bistas E las accioAes de las Bistas PcrearG modiFicarG elimiAarQ se colo>ueA =or deba@o del meAT =riAci=al. Para eso modiFicamos el D=rotectedDBiewsDlaEoutsDcolumA6.=?=: U "ambiamos el Aombre del id del diB HsidebarI =or HmaiAmeAuI. U "olocamos el AueBo diB HmaiAmeAuI Pcom=letoQ deAtro del diB coA classNHs=aAU)4I. U "ambiamos classNHs=aAU)4I =or classIs=aAU67I. U "omeAtamos las siguieAtes liAeas de cCdigo:
(this->!e%in)id%et('*ii&+id%ets&,-ortlet', array('title'=>'.perations',))# 'html.ptions'=>array('class'=>'operations'), (this->end)id%et()#
!i >ueremos uA meAT mas =oteAte =odemos usar la eKteAsiCA mbmeAuG ba@amos la eKteAsiCA de la =agiAa oFicial de Yii E co=iamos la car=eta D=rotectedDeKteAsioAs #A D=rotectedDBiewsDlaEoutsDmaiA.=?= cambiar el widget del "%eAu =or algo como:
<?php (this->+id%et('application&e'tensions&m!menu&0!0enu',array( 'items'=>array( array('la!el'=>'1ome', 'url'=>array('$site$inde'')), array('la!el'=>'-rincipal', 'url'=>array('$site$contact'),
l colocar el AueBo meAT segurameAte se Be eKtraVoG =ara eBitar esto debemos >uitar el idNHmaiAmeAuI. "oA estos cambios >ueda mas es=acio =ara las Bistas E el =e>ueVo meAT de la derec?a >ueda =or deba@o del meAT =riAci=al.
AUTENTICACIN DE USUARIOS
#ste es el s>l de la tabla doAde se guardaraA Auestros usuarios:
CREATE TABLE usuario ( id serial NOT NULL, username character 4aryin%(356) NOT NULL, pass+ord character 4aryin%(356) NOT NULL, ,.7289:;78 usuario<pkey PRIMARY KEY (id) ) WITH (.;=2=>:?2@)# ALTER TABLE usuario .)7@9 TO post%res#
Debes crear el modelo E el "$UD de esta tabla coA el Gii #A =rotectedDcom=oAeAtsDUserIdeAtitE.=?= sustituimos la clase UserIdeAtitE =or:
class "ser;dentity extends ,"ser;dentity A pri ate (<id# p!"lic #!ncti$n authenticate() A (username=strtolo+er((this->username)# (user="suario::model()->find('?.)@9(username)=?',array((username))# if((user===n!ll) (this->error,ode=sel#::@99.9<"2@97:0@<;7B:?;=# else if(C(user->4alidate-ass+ord((this->pass+ord)) (this->error,ode=sel#::@99.9<-:22).9=<;7B:?;=# else A (this-><id=(user->id# (this->username=(user->username# (this->error,ode=sel#::@99.9<7.7@# D return (this->error,ode==sel#::@99.9<7.7@# D p!"lic #!ncti$n %et;d() A return (this-><id#
Para >ue la claBe se guarde eA %D7 al crear los usuarios agregar la siguieAte liAea eA la FuAciCA actioA"reate del coAtrolador =rotectedDcoAtrollersDUsuario"oAtroller.=?=G ?acer lo mismo coA la FuAciCA actioAU=date
(model->attri!utes=(<-.28F'"suario'G# &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&?;7@: : :H9@H:9&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& (model->pass+ord=mdE((model->pass+ord)# &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& if((model->sa4e())
Para otorgar o deAegar =ermisos a usuarios tambiWA se modiFica el coAtrolador del modeloG eA este caso =rotectedDcoAtrollersDUsuario"oAtroller.=?=G Bamos a la FuAciCA access$ules:
p!"lic #!ncti$n access9ules() A return array( array('allo+', 'actions'=>array('inde'','4ie+'), 'users'=>array('I'), ), array('allo+', 'actions'=>array('create','update'),
)<
#A el arreglo actioAs =oAemos las accioAes >ue tieAe el coAtrolador E eA users los usuariosG si >ueremos >ue solo accedaA los >ue estA auteAticados =oAemos uAa M@M E si >ueremos >ue acceda cual>uier =ersoAas usamos MXM
))
DoAde idJestado es claBe ForAea eA muAici=io E ?ace reFereAcia al id de la tabla estado. l crear el modelo E el "$UD =ara ambas tablas coA la ?erramieAta Gii teAemos como resultado >ue eA las distiAtas Bistas del modelo %uAici=io el estado al >ue =erteAece dic?o muAici=io siem=re a=arece reFle@ado coA su idG =ara cambiar esto E >ue a=areLca el Aombre del estado eA las distiAtas Bistas debemos cambiar Barias liAeas de cCdigoG a coAtiAuaciCA te eK=licamos como ?acerlo. !i las relacioAamos bieA eA el gestor de base de datos Yii =or deFecto Aos coAFigura la relaciCA eAtre ellasG DeFiAimos la relaciCA eA el modelo %uAici=io:
p!"lic #!ncti$n relations() A return array('estado' => array(sel#::/@?.7H2<8., '@stado', 'id<estado') )# D
,a me@or Forma de re=reseAtar a los estados eA los Formularios de creaciCA E modiFicaciCA de muAici=ios es coA uA combo boK Pdro= dowA listQG =ara eso colocamos la siguieAte liAea eA el arc?iBo D=rotectedDBiewsDmuAici=ioDJForm.=?=
<?php echo (form->drop=o+n?ist((model,'id<estado', >find:ll(), 'id', 'nom!re<estado'))# ?> ,1tml::list=ata(@stado::model()-
#A lugar de:
<?php echo (form->te't>ield((model,'id<estado')# ?>
Para colocar el Aombre del estado eA el HDetail 1iewI de cada muAici=io Aos Bamos al arc?iBo D=rotectedDBiewsDmuAici=ioDJBiew.=?= E modiFicamos las siguieAtes liAeas:
)6
E colocamos:
<?php echo ,1tml::encode((data->%et:ttri!ute?a!el('7om!re @stado'))# ?>: <?php echo ,1tml::encode((data->estado->nom!re<estado)# ?>
!i >ueremos >ue a=areLca el Aombre del estado eA el 1iew P%ostrarQ del muAici=io abrimos el arc?iBo D=rotectedDBiewsDmuAici=ioDBiew.=?= E Aos Fi@amos eA el siguieAte cCdigo:
<?php (this->+id%et('*ii&+id%ets&,=etailBie+', array( 'data'=>(model, 'attri!utes'=>array( 'id', 'nom!re<municipio', 'id<estado', ), ))# ?>
doAde dice MidJestadoM cambiamos =or Mestado.AombreJestadoM !i deseamos >ue a=areLca el Aombre del estado eA el listado de muAici=ios P%aAageQ modiFicamos eA D=rotectedDBiewsDmuAici=ioDadmiA.=?=
<?php (this->+id%et('*ii&+id%ets&%rid&,HridBie+', array( 'id'=>'municipio-%rid', 'data-ro4ider'=>(model->search(), 'filter'=>(model, 'columns'=>array( 'id', 'nom!re<municipio', 'id<estado',
dicioAalmeAteG =ara >ue la bTs>ueda =ueda FuAcioAar Aos Bamos a D=rotectedDmodelsD%uAici=io.=?= E modiFicamos la FuAciCA searc?. ).
colocamos:
(criteria->+ith =array('estado')# (criteria->add2earch,ondition('estado&nom!re<estado', (this->id<estado)#
2i
ueremos
(criteria->add2earch,ondition('?.)@9(estado&nom!re<estado)', strtolo+er((this>id<estado))#
!i >ueremos crear uA combo cuEos datos Ao =roBeAgaA de la base de datos lo ?acemos de esta Forma: Yo=tioAs N arraEP arraEP'idJti=oJorgMNO)G 'descri=cioAMNO'Dato )MQG arraEP'idJti=oJorgMNO6G 'descri=cioAMNO'Dato 6MQG QR arraEP '?eaderMNO'PruebaMG 'AameMNO'idJti=oJorgMG 'BalueM NO 'YdataUOid+i=o'rgUOdescri=cioAMG '?tml'=tioAsMNOarraEP'stEleMNO'teKtUaligA: ceAterMG'widt?MNO':<=KMQG 'FilterMNO"9tml::listDataPYo=tioAsG 'idJti=oJorgMG 'descri=cioAMQG QG
)/
Para com=arar dos cam=os del mismo Formulario es as: arraEP'moAtoJauditadoMG'com=areMG'com=are ttributeMNO'moAtoJcoAtratadoMG'o=eratorMNO'\NMG'messageMNO'#l %oAto uditado debe ser uA Aumero meAor o igual al moAto coAtratadoMQG )7
Gua Bsica de Yii Framework +ambiWA =odemos crear Auestra =ro=ia FuAcioA >ue Balide: arraEP'Fec?aJFiAalMG 'com=ararJFec?asMG 'tE=eM NO 'dateMG 'dateFormatM NO 'EEEEU%%UddMQG E agregamos la FuAciCA eA el mismo modelo: )u*"i! +u,!ti , com=ararJFec?asPYattributeGY=aramsQ Z iFP]em=tEPYt?isUOattributes^'Fec?aJFiAalM_QQ Z iFPstrtotimePYt?isUOattributes^'Fec?aJFiAalM_Q \ strtotimePYt?isUOattributes^'Fec?aJiAicioM_QQ Z Yt?isUOadd#rrorPYattributeG',a Fec?a de IAicio *o Puede !er %aEor a la FiAalMQR[ [ [ ,a BalidaciCA aAterior se eAcargar de BeriFicar >ue uAa Fec?a iAicial Ao sea meAor a la Fec?a FiAal.
)2
)7
):
Gua Bsica de Yii Framework Ates de guardar debemos BeriFicar >ue la Fec?a Ao BeAga BacaG eso lo ?acemos eA la FuAciCA actioA"reateG recuerda >ue DimagesDcaleAdar.=Ag es uAa imageA >ue ?aEas decido colocar all. l darle clic eA la imageA se mostrara lo siguieAte:
if((model->fecha=='') A (model->fecha=7"??# D
)4
U gregar eA el modelo la Bariable doAde se guardar el raAgo: =ublic YFec?aJBigeAciaJraAge N arraEPQR U gregar a la FuAciCA rules Auestro cam=o Fec?aJBigeAciaJraAge =ara >ue el Formulario maAteAga la Fec?a dada luego de la bTs>ueda
#!ncti$n rules() A return array( &&& array('&&&&&,fecha<4i%encia<ran%e', 'safe', 'on'=>'search'),
(from = (to = ''# if (count((this->fecha<4i%encia<ran%e)>=3) A if (isset((this->fecha<4i%encia<ran%eF'from'G)) A (from = (this->fecha<4i%encia<ran%eF'from'G# D if (isset((this->fecha<4i%encia<ran%eF'to'G)) A (to= (this->fecha<4i%encia<ran%eF'to'G# D
6<
6)
"olocamos =dF eA la FuAcioA access$ulesPQ del mismo coAtrolador =ara >ue los usuarios =uedaA acceder a la acciCA G eA la Bista admiA sustituir el arreglo de los botoAes =or el siguieAte:
array( 'class'=>',/utton,olumn', 'template' => 'A4ie+D AupdateD AdeleteD ApdfD', '!uttons'=>array( 'pdf' => array( 'la!el'=>'Henerar -=>', 'url'=>",1tml::normali*e"rl(array('pdf', 'id'=>R(data->id ))", 'ima%e"rl'=>Yii::app()->re uest->!ase"rl&'$ima%es$pdf<icon&pn%', 'options' => array('class'=>'pdf'), ), ), ),
#A mi caso la claBe =rimaria del registro la =use como id eA la base de datosG si eA tu caso es HidJ=roductoI o algo =or el estilo debes cambiarlo cuaAdo se =asa el dato a la Bista. 66
Gua Bsica de Yii Framework Y =or ultimo teAemos el arc?iBo =dF.=?= >ue estar eA las Bistas:
<?php (pdf = Yii::create,omponent('application&e'tensions&0-=>E5&mpdf')# (html=' <ta!le id="y+L" class="detail-4ie+5"> <tr class="principal"> <td colspan="5" ali%n="center"><!>=:8.2 =@? ,.789:8.<$!><$td> <tr> <tr class="odd"> <td> <!>7S ,ontrol<$!> <$td> <td> '&(model->num<control&'<$td> <$tr> <tr class="e4en"> <td> <!>8rimestre @Mecucion<$!> <$td> <td> '&(model->trimestre<eMecucion&'<$td> <$tr> <tr class="odd"> <td> <!>7om!re @stado<$!> <$td> <td> '&(model->estadoLF"nom!re<estado"G&'<$td><$tr> <tr class="e4en"> <td> <!>@mpresa<$!> <$td> <td> '&(model->empresa&'<$td> <$tr> <tr class="odd"> <td> <!>-ersonal :ctuante<$!> <$td> <td> '&(model->personal<actuante&'<$td><$tr> <tr class="e4en"> <td> <!>7om!re 8ipo ;nforme<$!> <$td> <td> '&(model->informeLF"nom!re<tipo<informe"G&'<$td> <$tr> <tr class="e4en"> <td> <!>7S ,ontrato<$!> <$td> <td> '&(model->num<contrato&'<$td> <$tr> <tr class="odd"> <td> <!>0onto ,ontratado<$!> <$td> <td> '&(model->monto<contratado&'<$td>
6.
6/
DoAde Ycriteria soA los datos de Filtrado E Ysort el arreglo de ordeAaciCAG eso Aos guardar eA uAa Bariable de sesiCA la ultima bTs>ueda realiLadaG si Ao ?emos realiLado AiAguAa bTs>ueda estaremos guardaAdo todos los resultados del listadoG es im=ortaAte colocar eA False la =agiAaciCA =ara >ue =ueda traerAos todos los resultados. #A la Bista admiA agregar el botCA de eK=ortar coA arraEPMlabelMM#K=ortar a PDFMG MurlMarraEPM=dFMQQG eA la coAFiguraciCA del meAT. #A el coAtrolador agregamos la siguieAte FuAciCA:
grega la actioA =dF eA el access$ules del coAtroladorG =ara >ue los usuarios del sistema =uedaA teAer =ermisos de utiliLarla. ,a librera >ue uso E recomieAdo =ara eK=ortar =dF es %PDFG la =uedeA descargar de su =agiAa oFicialG uAa BeL descargada la co=iaA eA eKteAsioAs. UA e@em=lo =ara la Bista =dF es el siguieAte:
67
62
"omo Bemos al =riAci=io del e@em=lo tomamos los datos Filtrado mediaAte la Bariable de sesiCA E dis=oAemos de ellos como >ueramos eA el =dF.
67
COMBOS DEPENDIENTES
;ueremos dos combos: +i=o 'rgaAismo E 'rgaAismoG la idea es >ue al momeAto de escoger uA ti=o de orgaAismo se des=liegue eA el seguAdo combo los distiAtos orgaAismos >ue =erteAeceA a ese ti=o =ara ello utiliLamos el siguieAte cCdigo eA el JForm: // Tipo de organismos
<di4 class="ro+"> <?php echo (form->la!el@'((model,'id<tipo<or%')# // (om)re de la eti0ueta a mostrar e1& -ipo ,rgani2aci3n (departamento = ne% ,=!,riteria# // Preparamos los par4metros de )5s0ueda (departamento->order = 'descripcion :2,'# // ordenamos al/a)6ticamente echo (form->drop=o+n?ist((model,'id<tipo<or%', // id7tipo7org es el nom)re del campo en el modelo ,1tml::list=ata(8ipo.r%H::model()->find:ll((departamento), // -ipo,rgG es el modelo en el 0ue se )uscaran los datos 'id<tipo<or%','descripcion'), // id7tipo7org es el dato 0ue se 0uiere guardar y // descripci3n lo 0ue se 0uiere mostrar array('aMa'' => array('type' => '-.28', 'url' => ,,ontroller::create"rl(',orrespondencia$car%aror%anismos'), la acci3n 0ue 8a a cargar el segundo di8 'update' => 'Y,orrespondencia<id<or%<%' // el di8 0ue se 8a a actuali2ar ),'prompt' => '2eleccione un 8ipo' // +alor por de/ecto ) )# echo (form->error((model,'id<tipo<or%')# ?> <$di4> // 9egundo *om)o, organismos <di4 class="ro+"> <?php echo (form->la!el@'((model,'id<or%<%')# //
6:
64
.<
#A el cCdigo aAterior Balidamos >ue el cam=o Ao estW Baco eA la base de datosG de estar Baco es >ue se est creaAdo uA AueBo registro o Ao se seleccioAC AiAgTA estadoG luego creamos el cam=o de auto com=letar colocaAdole el AombreG el Aombre del modeloG el Balor =or deFectoG caAtidad mAima =ara realiLar la bTs>ueda E la FuAciCA >ue guarda el id del cam=o seleccioAado. "o=iamos la FuAciCA ,istar#stados eA Auestro coAtrolador:
p!"lic #!ncti$n action?istar@stados((term) A (criteria = ne% ,=!,riteria# (criteria->condition = "?.)@9(nom!re<estado) like ?.)@9(:term)"#
.)
#A la FuAciCA de arriba deFiAimos la coAdiciCA >ue Ba a teAer Auestro >uerEG eA Auestro caso buscaremos =or AombreJestado iAdiFereAtemeAte miATsculas E maETsculas utiliLaAdo uA like M` `MG la mKima caAtidad de resultado ser de .<G los datos =roBieAeA del modelo #stadoG el cam=o a guardar es el id E el >ue mostraremos es el Aombre del estado. 9aE >ue darle =ermisos a los usuarios =ara utiliLar la acciCA ,istar#stados
.6
..
DoAde createdJdateG modiFiedJdateG createdJbE E modiFiedJbE soA los datos de Auestra tabla eA doAde >ueremos guardar los datos. !i Ao teAemos uAo de los datos =odemos comeAtar esa liAea de cCdigo.
./
"oA ese cCdigo iAcluimos el cam=o AombreJestado del modelo #stado eA el Formulario de PersoAalG tambiWA agregamos eA el =armetro error!ummarE el modelo YbG >ue eA este caso es #stadoG coA esto Aos Balida el Formulario coA las restriccioAes >ue ?aEamos =uesto eA el rulesPQ de ambos modelosG =or otra =arte =reguAtamos si se est creaAdo uA AueBo registro o AoG eA caso de ser uAa actualiLaciCA cargamos la iAFormaciCA del modelo #stadoG de PersoAal Aos la carga automticameAte. .7
Gua Bsica de Yii Framework #A el caso de las Bistas create.=?= E u=date.=?= cambiamos la siguieAte liAea
<?php echo (this->render-artial('<form', array('model'=>(model))# ?>
=or esta
<?php echo (this->render-artial('<form', array('a'=>(a, '!'=>(!))# ?>
,o =rimero >ue ?acemos es iAstaAciar los modelos PersoAal E #stadoG luego si los datos =asaA la BalidaciCA determiAamos el maEor id de estadoG se lo asigAamos al dato idJestado de cada modelo E guardamos los datos. Para u=date ?acemos algo =arecido:
p!"lic #!ncti$n action"pdate((id) A (a=ne% -ersonal# (!=ne% @stado# (this->perform:Ma'Balidation(array((a,(!))# (a=(this->load0odel((id)# if(isset((<-.28F'-ersonal'G,(<-.28F'@stado'G)) A (a->attri!utes=(<-.28F'-ersonal'G# (!->attri!utes=(<-.28F'@stado'G#
.2
De igual Forma >ue coA el create Balidamos los datosG guardamos E direccioAamos. #A deFiAitiBa ?emos ?ec?o uA Formulario eA el >ue guardamos datos de dos modelos distiAtosG es uA e@em=lo seAcillo =ero BlidoG si tus modelos tieAeA mas datos lo iAcluEes eA el JForm E si >uieres agregar ms modelos al Form se ?ace de la misma Forma.
.7
0O
http://gabrielduarte77.wordpress.com/category/yii-framework/
.: