Anda di halaman 1dari 38

GUIA BASICA DE YII FRAMEWORK

Por: Gabriel Duarte gabrielduarte77@gmail.com

Gua Bsica de Yii Framework

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'........................................................................................:

Gua Bsica de Yii Framework

INSTALANDO YII Y PRIMERA APLICACIN


,o =rimero >ue ?acemos es ba@arAos la ultima BersiCA de Yii Framework desde ?tt=:DDwww.EiiFramework.com la descom=rimimos eA Auestro directorio webG le cambiamos el Aombre a HEiiI E le damos =ermisos de lectura. brimos la coAsolaG Aos ubicamos eA la www E colocamos: EiiDFrameworkDEiic weba== AombreJa=licacioAG Aos Ba a =reguAtar si >ueremos crear uAa a=licaciCA web eA ese directorio E le decimos >ue si. "oA esto ?emos creado Auestra =rimera a=licaciCA eA Yii. #A el =rCKimo ca=itulo se eK=licar como coAectar Auestra a=licaciCA coA uAa base de datos E como crear el modelo E el "$UD de las tablas.

Gua Bsica de Yii Framework

CREANDO MODELOS Y CRUD A PARTIR DE UNA BASE DE DATOS


UAa BeL creada la a=licaciCA abrimos el arc?iBo D=rotectedDcoAFigDadmiA.=?= E modiFicamos lo siguieAte:
'modules'=>array( /* 'gii'=>array( 'class'=>'system.gii.GiiModule', 'password'=>'Enter Your Password ', */ ), ere', 'ip!ilters'=>array('"#$.%.%."','&&"'',

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.

Gua Bsica de Yii Framework

LENGUA%E Y &ISTA POR DEFECTO


#A D=rotectedDcoAFigDadmiA.=?= al FiAal colocar deAtro del arreglo =riAci=al: 'laAguageMNO'esMG 'source,aAguageMNO'eAMG DD #ste es el leAgua@e eA el >ue >uieres >ue muestre las cosas DD #ste es el leAgua@e =or deFecto de los arc?iBos

'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" $>

Gua Bsica de Yii Framework

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()#

#A el D=rotectedDBiewsDlaEoutsDmaiA.=?=: U "omeAtamos las liAeas:


<?php if(isset((this->!readcrum!s)):?> <?php (this->+id%et('*ii&+id%ets&,/readcrum!s', array('links'=>(this>!readcrum!s,))# ?> <?php endif?>

l a=licar estos cambios el meAT >uedara mas o meAos as:

!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'),

Gua Bsica de Yii Framework


'items'=>array( array('la!el'=>'"suarios', 'url'=>array('$usuario')), array('la!el'=>',ontratos', 'url'=>array('$contrato')), ), ), array('la!el'=>'-rue!a', 'items'=>array( array('la!el'=>'2u! 3', 'url'=>array('$site$pa%e','4ie+'=>'su!3')), array('la!el'=>'2u! 5', 'items'=>array( array('la!el'=>'2u! su! 3', 'url'=>array('$site$pa%e','4ie+'=>'su!su!3')), array('la!el'=>'2u! su! 5', 'url'=>array('$site$pa%e','4ie+'=>'su!su!5')), ), ), ), ), ), ))# ?>

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.

Gua Bsica de Yii Framework

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#

Gua Bsica de Yii Framework


D D

#A =rotectedDmodelsDUsuario.=?= agregar las siguieAtes FuAcioAes:


p!"lic #!ncti$n 4alidate-ass+ord((pass+ord) A return (this->hash-ass+ord((pass+ord)===(this->pass+ord# D p!"lic #!ncti$n hash-ass+ord((pass+ord) A return mdE((pass+ord)# D

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'),

)<

Gua Bsica de Yii Framework


'users'=>array('J'), ), array('allo+', 'actions'=>array('admin','delete'), 'users'=>array('J'), ), array('deny', 'users'=>array('I'), ), )# D

#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

))

Gua Bsica de Yii Framework

CLA&ES FOR(NEAS EN &ISTAS


!u=oAieAdo >ue teAemos las siguieAtes tablas:

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

Gua Bsica de Yii Framework


<?php echo ,1tml::encode((data->%et:ttri!ute?a!el('id<estado'))# ?>: <?php echo ,1tml::encode((data->id<estado)# ?>

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',

cambiamos MidJestadoM =or


array ('name'=>'id<estado','4alue'=>'(data->estado->nom!re<estado','type'=>'te't',)

dicioAalmeAteG =ara >ue la bTs>ueda =ueda FuAcioAar Aos Bamos a D=rotectedDmodelsD%uAici=io.=?= E modiFicamos la FuAciCA searc?. ).

Gua Bsica de Yii Framework Y doAde a=arece:


(criteria->compare('id<estado',(this->id<estado)#

colocamos:
(criteria->+ith =array('estado')# (criteria->add2earch,ondition('estado&nom!re<estado', (this->id<estado)#

2i

ueremos

ue trai%a tanto con minKsculas o mayKsculas colocamos:

(criteria->add2earch,ondition('?.)@9(estado&nom!re<estado)', strtolo+er((this>id<estado))#

!i >ueremos >ue la bTs>ueda eA el admiA se ?aga mediaAte uA combo colocamos:


array( 'header'=>'@stado', $/ (om)re de la columna en el *Grid+iew 'name'=>'id<estado', // (om)re del dato en el modelo '4alue' => '(data->estado->nom!re<estado', // +alor a mostrar 'html.ptions'=>array('style'=>'te't-ali%n: center','+idth'=>'6Lp''), // ,pciones -M. 'filter' => ,1tml::list=ata(8ipo.r%H::model()->find:ll(), 'id<estado', 'nom!re<estado'), // *olocamos un com)o en el /iltro ),

!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

)/

Gua Bsica de Yii Framework

&ALIDANDO LOS FORMULARIOS


!i >ueremos Balidar Auestros cam=os lo ?acemos eA el mWtodo rulesPQ del modelo eA cuestiCA: )u*"i! +u,!ti , rulesPQ Z returA arraEP QR [ ,a BalidaciCA mas obBia es la de ?acer tu cam=o obligatorio: arraEP'AombreG correoG edadMG 're>uiredMQG +ambiWA =uedes es=eciFicar >ue el Balor sea AumeroG iAcluso eAtero: arraEP'moAtoMG 'AumericalMG 'iAteger'AlEMNOtrueQG Para cadeAas =odemos restriAgir la loAgitud: arraEP'AameMG'leAgt?MG'miAMNO2G 'maKMNO/<QG 'tra BalidaciCA Baliosa es =ara los correos electrCAicos: arraEP'user#mailMG 'emailMQG o =ara eAlaces: arraEP'liAkMG 'urlMQG !i >ueremos Balidar >ue uA cam=o sea TAico eA la base de datos colocamos lo siguieAte:
array('campo', 'uni ue', 'attri!ute7ame'=>'7om!re0odelo&dato'),

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

Gua Bsica de Yii Framework

ORDEN POR DEFECTO Y CONDICION E-TRA EN GRID


coAtiAuaciCA Bamos eK=licar como ?acemos =ara ordeAar Auestro Grid ba@o el criterio >ue >ueramosG eso lo ?acemos modiFicaAdo el =armetro sort del " ctiBeDataProBider >ue se eAcueAtra eA la FuAciCA searc? del modeloG de igual modo Bamos a agregar uA coAdiciCA eKtra eA la bTs>uedaG eA Auestro caso Filtramos =or el estatus.
(criteria->condition = "estatus=true"# (sort=ne% ,2ort()# (sort->default.rder='num<control =@2,'#

E el " ctiBedataProBider >ueda as:


return ne% ,:cti4e=ata-ro4ider((this, array( 'criteria'=>(criteria, 'sort'=>(sort, ))#

)7

Gua Bsica de Yii Framework

FEC.AS CON C%UIDATEPICKER


#A el D=rotectedDBiewsDAombreJdelJmodeloDJForm.=?= modiFica Auestra Fec?a =or:
<di4 class="ro+"> <?php echo (form->la!el@'((model,'fecha')# ?> <?php if ((model->fechaC='') A (model->fecha=date('d-m-Y',strtotime((model->fecha))# D (this->+id%et('*ii&+id%ets&Mui&,Nui=ate-icker', array( 'model'=>(model, 'attri!ute'=>'fecha', '4alue'=>(model->fecha, 'lan%ua%e' => 'es', 'html.ptions' => array('readonly'=>"readonly"), 'options'=>array( 'auto2i*e'=>true, 'default=ate'=>(model->fecha, 'date>ormat'=>'dd-mm-yy', '!utton;ma%e'=>Yii::app()->!ase"rl&'$ima%es$calendar&pn%', '!utton;ma%e.nly'=>true, '!utton8e't'=>'>echa', 'select.ther0onths'=>true, 'sho+:nim'=>'slide', 'sho+/utton-anel'=>true, 'sho+.n'=>'!utton', 'sho+.ther0onths'=>true, 'chan%e0onth' => 'true', 'chan%eYear' => 'true', 'min=ate'=>'date("Y-m-d")', $$fecha minima 'ma'=ate'=> "O5LY", ), ))# ?> <?php echo (form->error((model,'fecha')# ?> <$di4> $$fecha ma'ima

):

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

!i >ueremos Formatear la Fec?a eA la coAsulta a MdUmUYM debemos modiFicar eA el D=rotectedDBiewsDAombreJdelJmodeloDBiew.=?=:


if ((model->fechaC='') A (fecha=date('d-m-Y',strtotime((model->fecha))# D else A (fecha=''# D

Y eA el MattributesMarraE modiFicar MFec?aM coA:


array('name'=>'fecha', '4alue'=>(fecha,),

)4

Gua Bsica de Yii Framework

B'S/UEDAS POR FEC.AS CON SYDATECOLUMN


U Ba@amos la eKteAsiCA de ?tt=:DDwww.EiiFramework.comDeKteAsioADsEdatecolumAD E la co=iamos la clase eA D=rotectedDcom=oAeAtsD U #A Auestro "Grid1iew colocamos la columAa de la Fec?a as:
array( 'header'=>'>echa Bi%encia', 'name'=>'fecha<4i%encia', '4alue' => 'cam!io<fecha((data->fecha<4i%encia)' , 'html.ptions'=>array('+idth'=>'36Lp''), 'class'=>'2Y=ate,olumn', ),

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'),

U #A la FuAciCA searc? del modelo agregamos lo siguieAte:

(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<

Gua Bsica de Yii Framework


D if ((fromC='' PP (to C='') A if ((fromC='' QQ (toC='') A (from = date("d-m-Y", strtotime((from))# (to = date("d-m-Y", strtotime((to))# (criteria->compare('fecha<4i%encia',">= (from",#alse)# (criteria->compare('fecha<4i%encia',"<= (to",#alse)# D else A if ((fromC='') (creation<time = (from# if ((to C= '') (creation<time = (to# (creation<time = date("d-m-Y", strtotime((creation<time))# (criteria->compare('fecha<4i%encia', "(creation<time" ,#alse)# D D

6)

Gua Bsica de Yii Framework

E-PORTAR DEL CGRID&IEW A PDF


!i >ueremos eK=ortar registros del "gridBiew a =dF a coAtiAuaciCA te eK=licamos como. ,o =rimero >ue ?acemos es ba@arAos la ultima BersiCA de %PDF de su =agiAa oFicial ?tt=:DDwww.m=dF).comDm=dFD E la colocamso eA =rotectedDeKteAsioAsG co=iamos eA el coAtrolador de la tabla a la >ue se ?ar el re=orte la siguieAte FuAciCA:
p!"lic #!ncti$n action-df((id) A (this->render('pdf',array( 'model'=>(this->load0odel((id), ))# D

"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 la Bista Biew agregamos la Bista de Auestro =dF eA el meAu:


array('la!el'=>',rear -=>', 'url'=>array('pdf','id'=>(model->id)),

#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.

Gua Bsica de Yii Framework


<$tr> <$ta!le>'# (header=(header&'<im% src="'&Yii::app()->re uest->!ase"rl&'$ima%es$!anner&pn%"$>'# (mpdf=ne% m-=>('+in-35E5','?@88@9','','',3E,3E,5E,35,E,T)# (mpdf->2et180?1eader((header)# (mpdf->2et>ooter(' A=:8@ M$m$YDP-U%ina A-:H@7.D$An!p%DP2istema de ,ontratos')# (mpdf->)rite180?((html)# (mpdf->.utput('>icha-,ontrato&pdf','=')# e'it# ?>

6/

Gua Bsica de Yii Framework

REPORTES A PARTIR DE UNA B'S/UEDA


9e Bisto eA el Foro >ue ?aE muc?as =ersoAas =reguAtaAdo como eK=ortar eA PDF a =artir de uAa bTs>ueda eA la Bista dmiAG a>u les traigo uAa soluciCA a ese =roblema. #A la FuAciCA searc?PQ del modelo eA cuestiCA agregamos al FiAal PaAtes del retorAoQ las siguieAtes liAeas de cCdigo:

(<2@22;.7F'datos<filtrados'G = ne% ,:cti4e=ata-ro4ider((this, array( 'criteria'=>(criteria, 'sort'=>(sort, 'pa%ination'=>false, ))#

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:

p!"lic #!ncti$n action-df() A (this->render('pdf')# D

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

Gua Bsica de Yii Framework


<? (pdf = Yii::create,omponent('application&e'tensions&0-=>E5&mpdf')# (data-ro4ider = (<2@22;.7F'datos<filtrados'G->%et=ata()# (contador=count((data-ro4ider)# (html&=' <ta!le ali%n="center"><tr> <td ali%n="center"><!>?;28:=. =@ ,.789:8.2<$!><$td> <$tr><$ta!le> 8otal 9esultados: '&(contador&' <ta!le class="detail-4ie+5" repeat<header="3" cellpaddin%="3" cellspacin%="3" +idth="3LLV" !order="L"> <tr class="principal"> <td class="principal" +idth="TV">Qn!sp#7S ,ontrol<$td> <td class="principal" +idth="TV">Qn!sp#7S ,ontrato<$td> <td class="principal" +idth="3WV">Qn!sp#@mpresa<$td> <td class="principal" +idth="3LV">Qn!sp#@stado<$td> <td class="principal" +idth="WV">Qn!sp#0onto ,ontratado<$td> <td class="principal" +idth="5EV">Qn!sp#.!Meto ,ontrato<$td> <td class="principal" +idth="3XV">Qn!sp#-ersonal :ctuante<$td> <td class="principal" +idth="WV">Qn!sp#8ipo ;nforme<$td> <$tr>'# (i=L# (4al=count((data-ro4ider)# +hile((i<(4al)A (html&=' <tr class="odd"> <td class="odd" +idth="TV">Qn!sp#'&(data-ro4iderF(iG F"num<control"G&'<$td> <td class="odd" +idth="TV">Qn!sp#'&(data-ro4iderF(iG F"num<contrato"G&'<$td> <td class="odd" +idth="3WV">Qn!sp#'&(data-ro4iderF(iGF"empresa"G&'<$td> <td class="odd" +idth="3LV">Qn!sp#'&(data-ro4iderF(iGF"estadoL"G F"nom!re<estado"G&'<$td> <td class="odd" +idth="WV">Qn!sp#'&(data-ro4iderF(iG F"monto<contratado"G&'<$td> <td class="odd" +idth="5EV">Qn!sp#'&(data-ro4iderF(iG F"o!Meto<contrato"G&'<$td> <td class="odd" +idth="3XV">Qn!sp#'&(data-ro4iderF(iG

62

Gua Bsica de Yii Framework


F"personal<actuante"G&'<$td> <td class="odd" +idth="WV">Qn!sp#'&(data-ro4iderF(iGF"informeL"G F"nom!re<tipo<informe"G&'<$td> '# (html&='<$tr>'# (iOO# D (html&='<$ta!le>'# (mpdf=ne% m-=>('+in-35E5','?@88@9-?','','',W,W,5X,3L,E,E)# (mpdf->)rite180?((html)# (mpdf->.utput('9eporte<,ontratos&pdf','=')# e'it# ?>

"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

Gua Bsica de Yii Framework

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:

Gua Bsica de Yii Framework


if ((model->is7e+9ecord==3) //9i se est4 creando un registro nue8o A echo (form->drop=o+n?ist((model,'id<or%<%', array('L' => '2eleccione un .r%anismo'))# // se muestra solo 9eleccione un ,rganismo D else A (tipo=(model->id<tipo<or%# // 9i se est4 modi/icando un registro (s l="select count(id<or%<%) from or%anismos<% +here id<tipo<or%='(tipo'#"# // (connection=Yii::app()->d!# // (command=(connection->create,ommand((s l)# // (ro+=(command-> uery9o+()# // (!andera=(ro+F'count'G# // if ((!andera==L) A // echo (form->drop=o+n?ist((model,'id<or%<%', array('L' => '2eleccione un .r%anismo'))# // 9i el tipo de organismo no tiene ning5n else A // organismo solo muestra 9eleccione un ,rganismo echo (form->drop=o+n?ist((model,'id<or%<%', ,1tml::list=ata(.r%anismosH::model()->find:ll/y2 l( //:0u; 8an los datos de la )5s0ueda del segundo com)o "select I from or%anismos<% +here id<tipo<or% =:key+ord order !y id<or%<%=:cla4e5 asc", array(':key+ord'=>(model->id<tipo<or%,':cla4e5'=>(model->id<or%<%)), 'id<or%<%','descripcion'))# D D ?><$di4> D

64

Gua Bsica de Yii Framework #A el coAtrolador colocamos la siguieAte FuAciCA:


p!"lic #!ncti$n action,ar%aror%anismos() A (data=.r%anismosH::model()->find:ll/y2 l( "select I from or%anismos<% +here id<tipo<or% =:key+ord or id<or%<%=L order !y id<or%<%=L desc, descripcion asc", // :0u; )uscamos los di/erentes organismos 0ue pertenecen al tipo elegido array(':key+ord'=>(<-.28F',orrespondencia'GF'id<tipo<or%'G))# (data=,1tml::list=ata((data,'id<or%<%','descripcion')# foreach((data as (4alue=>(name) A echo ,1tml::ta%('option', array('4alue'=>(4alue),,1tml::encode((name),tr!e)# D D

9aE >ue darle =ermisos a la acciCA cargarorgaAismos.

.<

Gua Bsica de Yii Framework

CAMPO CON AUTOCOMPLETAR


#A la Bista doAde Ba a estar el cam=o colocar el siguieAte cCdigo:
if ((model->estadoLC='') A (4alue=(model->estadoL->nom!re<estado# D else A (4alue=''# D echo (form->hidden>ield((model, 'estado')# (this->+id%et('*ii&+id%ets&Mui&,Nui:uto,omplete', array( 'name'=>'estado', 'model'=>(model, '4alue'=>(4alue, 'source"rl'=>(this->create"rl('?istar@stados'), 'options'=>array( 'min?en%th'=>'Z', 'sho+:nim'=>'fold', 'select' => 'Ms:function(e4ent, ui) A M[uery("Y,ontrato<estado")&4al(ui&itemF"id"G)# D', 'search'=> 'Ms:function(e4ent, ui) A M[uery("Y,ontrato<estado")&4al(L)# D' ), ))#

#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)"#

.)

Gua Bsica de Yii Framework


(criteria->params = array(':term'=> 'V'&(<H@8F'term'G&'V')# (criteria->limit = ZL# (data = @stado::model()->find:ll((criteria)# (arr = array()# foreach ((data as (item) A (arrFG = array( 'id' => (item->id, '4alue' => (item->nom!re<estado, 'la!el' => (item->nom!re<estado, )# D echo ,N2.7::encode((arr)# D

#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

Gua Bsica de Yii Framework

NO MOSTRAR INDE-$P.P EN LAS URL


!i deseamos >ue los mCdulos de Auestro sitio =uedaA ser accedidos as: ?tt=:DDmEdomaiA.comDcoAtact E Ao as: ?tt=:DDmEdomaiA.comDiAdeK.=?=arNcoAtact debemos ?acer Barios cambios eA Auestro =roEecto. #A =rimer lugar e@ecutamos eA la coAsola de liAuK: a6eAmod rewriteG abrimos DetcDa=ac?e6D!ite BailablesDdeFault E cambiamos H llowoBerrideN*oAeI =or H llowoBerrideN llI Pse eAcueAtra eA dos liAeas distiAtasQG luego cambiamos la direcciCA de Auestro arc?iBo .?taccess de AombreJ=roEectoD=rotectedD a AombreJ=roEectoDG .?taccess es uA arc?iBo ocultoG =ara mostrar los arc?iBos ocultos usamos el ata@o coAtrol b ?. brimos el .?taccess E =egamos los siguieAte:
9e+rite@n%ine on < i/ a directory or a /ile e=ists, use it directly 9e+rite,ond VA9@["@28<>;?@7:0@D C-f 9e+rite,ond VA9@["@28<>;?@7:0@D C-d < ot>erwise /orward it to inde=.p>p 9e+rite9ule & inde'&php

FiAalmeAte Bamos a D=rotectedDcoAFigDmaiA.=?= E eA el arreglo com=oAeAt agregamos:


'url0ana%er'=>array( 'url>ormat'=>'path', 'sho+2cript7ame'=>false, 'case2ensiti4e'=>false, ), ,on esto hemos limpiado las "9?s de nuestro sistema, es importante ue los

controladores de nuestros modelos no conten%an mayKsculas para e4itar pro!lemas&

..

Gua Bsica de Yii Framework

GUARDAR AUTOM(TICAMENTE USUARIO Y FEC.A DE CREACIN Y MODIFICACIN


*os descargamos la librera de ?tt=:DDwww.EiiFramework.comDeKteAsioADblameableUbe?aBiorD E la =egamos eA Dcom=oAeAtD G Ao olBides darle =ermisos. #A el modelo eA cuestiCA co=iamos la siguieAte FuAciCA:
p!"lic #!ncti$n !eha4iors() A return array( ',8imestamp/eha4ior' => array( 'class' => '*ii&!eha4iors&,8imestamp/eha4ior', 'create:ttri!ute' => 'created<date', 'update:ttri!ute' => 'modified<date', 'set"pdate.n,reate' => tr!e, ), '/lamea!le/eha4ior' => array( 'class' => 'application&components&!eha4iors&/lamea!le/eha4ior', 'created/y,olumn' => 'created<!y', 'updated/y,olumn' => 'modified<!y', ), )# D

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.

./

Gua Bsica de Yii Framework

.ACER FORMULARIO PARA MULTIPLES MODELOS


UAa BeL realiLado el "$UD de cada modelo este Aos geAera automticameAte uA Formulario coA los datos del modeloG si >ueremos ?acer uA Formulario >ue iAcluEa los datos de dos o mas modelos debemos modiFicar Barias liAeas de cCdigo. #A el e@em=lo >ue eK=lico a coAtiAuaciCA teAemos dos modelosG el modelo PersoAal cuEos datos soA idJ=ersoAalG AombreJ=ersoAal E idJestado E el modelo #stado coA idJestado E AombreJestadoG de mas est decir >ue PersoAal es alimeAtado =or #stadoG lo =rimero >ue ?aremos es modiFicar la Bista JForm de PersoAal.
<di4 class="form"> <?php (form = (this->!e%in)id%et(',:cti4e>orm', array( 'id'=>'user-form', 'ena!le:Ma'Balidation'=>true, ))# if ((a->is7e+9ecord==#alse) A (!=@stado::model()->find/y-k((a->id<estado)# D echo (form->error2ummary(array((a,(!))# ?> <di4 class="ro+"> <?php echo (form->la!el@'((a,'nom!re<personal')# ?> <?php echo (form->te't>ield((a,'nom!re<personal')# ?> <?php echo (form->error((a,'nom!re<personal')# ?> <$di4> <di4 class="ro+"> <?php echo (form->la!el@'((!,'nom!re<estado')# ?> <?php echo (form->te't>ield((!,'nom!re<estado')# ?> <?php echo (form->error((!,'nom!re<estado')# ?> <$di4> <di4 class="ro+ !uttons"> <?php echo ,1tml::su!mit/utton((a->is7e+9ecord ? ',rear' : ':ctuali*ar')# ?> <$di4> <?php (this->end)id%et()# ?> <$di4>

"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, '!'=>(!))# ?>

?ora modiFicamos la acciCA create:


p!"lic #!ncti$n action,reate() A (a=ne% -ersonal# (!=ne% @stado# (this->perform:Ma'Balidation(array((a,(!))# if(isset((<-.28F'-ersonal'G,(<-.28F'@stado'G)) A (a->attri!utes=(<-.28F'-ersonal'G# (!->attri!utes=(<-.28F'@stado'G# (s l='select ma'(id<estado) from estado#'# (connection=Yii::app()->d!# (command=(connection->create,ommand((s l)# (ro+=(command-> uery9o+()# (ro+F"ma'"GOO# (!->id<estado=(ro+F"ma'"G# (a->id<estado=(ro+F"ma'"G# if((!->sa4e() QQ (a->sa4e()) (this->redirect(array('4ie+','id'=>(a->id<personal))# D (this->render('create',array('a'=>(a,'!'=>(!))# D

,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

Gua Bsica de Yii Framework


(!->id<estado=(a->id<estado# (!->set;s7e+9ecord(#alse)# if((a->sa4e() QQ (!->update()) (this->redirect(array('4ie+','id'=>(a->id<personal))# D D (this->render('update',array('a'=>(a,'!'=>(!))#

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

Gua Bsica de Yii Framework

CAMPOS ENMASCARADOS EN FORMULARIO


lgo muE Ttil eA los Formularios es =oder eAmascarar los cam=osG esto es colocar los se=aradores automticameAte E restriAgir >ue caracteres =uede iAgresar el usuario a medida >ue Ba tecleaAdoG a coAtiAuaciCA mostramos uA e@em=lo de como im=lemeAtarlo eA YiiG Ao ?ace Falta la iAclusiCA de uAa eKteAsiCA. \0=?= Yt?isUOwidgetP'"%asked+eKtFieldMG arraEP 'modelM NO YmodelG 'attributeM NO 'teleFoAoJ=ersoAaMG 'maskM NO '14444QU444U4444MG '?tml'=tioAsM NO arraEP'siLeM NO ))Q QQR #A eA e@em=lo model es el modelo eA cuestiCAG attribute es el Aombre del cam=oG mask es el ti=o de mscara >ue le >uieres colocar E eA ?tml'=tioAs iAdicas las caractersticas 9+%, >ue >uieres >ue teAga tu cam=o. #A la mascara si usamos M4M iAdicamos >ue solo se =uede teclear ATmerosG MaM es solo letrasG E MXM es cual>uier carcter alFaAumWrico.

0O

http://gabrielduarte77.wordpress.com/category/yii-framework/

.:

Anda mungkin juga menyukai