V Jornadas Nacionales de Soberanía Tecnológica
JORNASTEC
Por: Lenin Hernandez
Lenin Hernandez
¿Framework de Desarrollo?
Un Framework es un conjunto de codigo,
librerías y
componentes probados y optimizados para facilitar y agilizar el
desarrollo de aplicaciones, basado en mejores prácticas de
desarrollo, que nos permitirán trabajar de forma uniforme,
organizada y con la mayor calidad posible. Normalmente
cuentan con documentación, una comunidad que lucha por su
desarrollo y mantenimiento.
- Yii (PHP) - yiiframework.com
- Symfony (PHP)- symfony-project.org
- CakePHP (PHP) - cakephp.org
- CodeIgniter (PHP) – codeigniter.com
- Ruby on Rails (Ruby) – rubyonrails.org
- Catalyst (Perl) – catalystframework.org
- Django (Python) - djangoproject.com
Yii Framework
- Generación de CRUD → Create, Read, Update and Delete y más...
- Urls Amigables → jornastec.org.ve/sedes-2/distrito-capital/
- Seguridad → Inyección SQL, Cross-site Scripting, etc...
- Sistema de Cache, de session
- Extenciónes Soportadas y de terceros
- Scaffolding → crear un módulo entero basado en la descripción de una
tabla de la base de datos
- Mapeo Objeto Relacional → ORM Object-Relational mapping
- MVC → Modelo - Vista - Controlador
Yii Framework
Yii es un framework generico de programación Web que puede
ser utilzado para todo tipo de aplicaciones Web. Gracias a que
es liviano de correr y está equipado con soluciones de cacheo
sofisticadas, es adecuado para desarrollar aplicaciones de grán
tráfico como portales, foros, sistemas de administración de
contenidos (CMS), Sistemas de comercio electrónico (e-
commerce), etc. yiiframework.com
- Simple, Sencillo, Humilde.
- Curva de Aprendizaje no es empinada.
- Esta hecho para funcionar por defecto.
- Rápido (Puesta en Marcha y aplicación).
¿Que Necesitamos?
aptitude install apache2 php5 php5-cli postgresql-8.4 php5-pgsql pgadmin3
1- Descargar, Descomprimir.
2- www$yii/framework/yiic webapp tu_sistema
3- chmod -R 777 tu_sistema → ojo en un servidor nunca colocar esta permisologia
4- http://localhost/tu_sistema
Si es todo lo que necesitamos
comenzar con Yii,
simple verdad como Yii
Configurando
Archivo de configuración: /protected/config/main.php
- Habilitar GII - GiiModule is un modulo que proveee una interfaz Web con capacidad de
generación de codigo: localhost/tu_sistema/index.php?r=gii
- Comentar la base de datos por defecto y agregar la nuestra
- Agregar al final del archivo:
'language'=>'es',
'sourceLanguage'=>'en',
'defaultController'=>'tu_modulo/admin',
Agregar usuarios: /protected/components/UserIdentity.php
Pagina Principal: /protected/views/layouts/main.php
<link rel="shortcut icon" href="<?php echo Yii::app()->request->baseUrl; ?
>/images/icon.png" type="image/x-icon" />
<img src="<?php echo Yii::app()->request->baseUrl; ?>/images/jornastec.png" />
Ajustando Formularios
/protected/view/nombre_modelo/_form.php
Relaciones en formularios:
Reemplezar:
<?php //echo $form->textField($model,'ocupacion'); ?>
Por:
<?php echo $form->dropDownList($model, 'ocupacion',
CHtml::listData(Ocupacion::model()->findAll(), 'id_ocupacion', 'descripcion'), array('prompt' => 'Seleccione Ocupación') ); ?>
Combos no vinculados a base de datos
echo $form->dropDownList($model,'sexo',array('M'=>'Masculino','F'=>'Femenino'), array('options' =>
array('2'=>array('selected'=>true))));
//echo $form->textField($model,'fecha_nacimiento');
$this->widget('zii.widgets.jui.CJuiDatePicker', array(
'model'=>$model,
'attribute'=>'fecha_nacimiento',
'value'=>$model->fecha_nacimiento,
'language' => 'es',
'htmlOptions' => array('readonly'=>"readonly"),
'options'=>array(
'autoSize'=>true,
'defaultDate'=>$model->fecha_nacimiento,
'dateFormat'=>'dd-mm-yy',
'buttonImage'=>Yii::app()->baseUrl.'/images/calendar.png',
'buttonImageOnly'=>true,
'buttonText'=>'Fecha',
'selectOtherMonths'=>true,
'showAnim'=>'slide',
'showButtonPanel'=>true,
'showOn'=>'button',
'showOtherMonths'=>true,
'changeMonth' => 'true',
'changeYear' => 'true',
//'minDate'=>'-50Y', //fecha minima
'maxDate'=> 'date("Y-m-d")',
//fecha maxima
),
Fechas seleccionables
Agregando Extenciones
/protected/extensions Agregaremos PDF's al sistema
Agregar carpeta de extencion. Usaremos MPDF
En el Controller: protectecd/controller/ModuloController.php
Agregar
));
}
public function actionPdf($id)
{
$this->render('pdf',array(
'model'=>$this->loadModel($id),
Y Permitir ser visto:
'actions'=>array('index','view','pdf'),
En las vistas:
Agregar el icono del PDF en el admin
array(
'class'=>'CButtonColumn',
'template' => '{view} {update} {delete} {pdf}',
'buttons'=>array(
'pdf' => array(
'label'=>'Generar PDF',
'url'=>"CHtml::normalizeUrl(array('pdf', 'id'=> \$data->id_persona))",
'imageUrl'=>Yii::app()->request->baseUrl.'/images/pdf.png',
'options' => array('class'=>'pdf'),
),
),
),
Crear pdf.php
Y colocar:
<?php
$pdf = Yii::createComponent('application.extensions.MPDF52.mpdf');
$this->breadcrumbs=array(
'Personas'=>array('index'),
$model->id_persona,
);
$html = '
<link rel="stylesheet" type="text/css" href="'.Yii::app()->request->baseUrl.'/css/pdf.css" />
Htmllll '.$model->nombre.' '.$model->apellido.'</b><br>';
$mpdf=new mPDF();
$mpdf->WriteHTML($html);
$mpdf->Output();
exit;
Subir Imagen
En los formularios: /protected/view/nombre_modelo/_form.php
Reemplezar:
<?php echo $form->textField($model,'foto',array('size'=>60,'maxlength'=>200)); ?>
Por:
<?php echo $form->fileField($model,'foto',array('size'=>25)); ?>
En el controlador: /protected/controllers/NombreController.php
Agregar en actionCreate y actionUpdate:
$model->foto = CUploadedFile::getInstance($model, 'foto');
$model->foto->saveAs(Yii::app()->basePath.'/../images/'.$model->foto);
Quedaria asi:
public function actionUpdate($id)
{
$model=$this->loadModel($id);
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['Persona']))
{
$model->attributes=$_POST['Persona'];
$model->foto = CUploadedFile::getInstance($model, 'foto');
$model->foto->saveAs(Yii::app()->basePath.'/../images/'.$model->foto);
if($model->save())
$this->redirect(array('view','id'=>$model->id_persona));
}
$this->render('update',array(
'model'=>$model,
));
}
En las vistas: /protected/views/view.php y _view.php
<img src="<?php echo Yii::app()->request->baseUrl.'/images/'.CHtml::encode($data->foto); ?>" >
Ver la imgen en el listado: /protected/views/admin.php
array('name'=>'foto','sortable'=>'true',
'header'=>'Fotico', 'type'=>'image',
'value'=>'"images/" . $data->foto',
'htmlOptions'=>array('style'=>'text-align: center'),
),
Dudas, Preguntas,
Sugerencias???
Por: Lenin Hernandez
Lenin Hernandez
Gracias Totales!!!
Lenin Hernandez
Lenin Hernandez
[email protected]
[email protected]
Twitter: @leninmhs
Twitter: @leninmhs
Comentarios de: yii Framework (1)