Mostrando entradas con la etiqueta Php. Mostrar todas las entradas
Mostrando entradas con la etiqueta Php. Mostrar todas las entradas

sábado, 2 de noviembre de 2013

CodeIgniter - Crear Proyecto con Netbeans


CodeIgniter (CI) es un framework para aplicaciones web de código abierto para crear sitios web dinámicos con PHP. «Su objetivo es permitir que los desarrolladores puedan realizar proyectos mucho más rápido que creando toda la estructura desde cero, brindando un conjunto de bibliotecas para tareas comunes, así como una interfaz simple y una estructura lógica para acceder esas bibliotecas.»


También hay que destacar que CodeIgniter es más rápido que muchos otros entornos. Incluso en una discusión sobre entornos de desarrollo con PHP, Rasmus Lerdorf, el creador de PHP, expresó que le gustaba CodeIgniter «porque es rápido, ligero y parece poco un entorno».


Para configurar Netbeans para CI, debemos instalar su plugin, para lo cual nos vamos a “Tool -> Plugins”, aquí nos vamos a la pestaña “Settings y hacemos clic en “Add”, luego agregamos lo siguiente:

Name: CodeIgniter
URL: https://kenai.com/downloads/nbphpci/Latest_NetBeans730/updates.xml


Según la versión de Netbeans puede cambiar la URL, por ejemplo
  • For NetBeans 7.2 use https://kenai.com/downloads/nbphpci/Latest_NetBeans720/updates.xml
  • For NetBeans 7.2.1 use https://kenai.com/downloads/nbphpci/Latest_NetBeans721/updates.xml
  • For NetBeans 7.3 use https://kenai.com/downloads/nbphpci/Latest_NetBeans730/updates.xml
  • For NetBeans 7.3.1 use https://kenai.com/downloads/nbphpci/Latest_NetBeans731/updates.xml
La web donde podemos obtener esta información es:  https://kenai.com/projects/nbphpci/pages/NBInstall

                           

Luego simplemente hacemos clic en “OK”

Ahora nos vamos a la pestaña “Available Plugins” y hacemos clic en “Check for Newest” para que actualice el plugin de CodeIgniter. Con el plugin listo y actualizado, debemos buscar “PHP CI Framework Repository”, lo seleccionamos y damos clic en “install”.



Luego, al más estilo de Windows, lo instalamos del tipo “siguiente, siguiente y siguiente”. Finalizando, hacemos lo mismo con “PHP CI Framework”.



Finalmente debemos ir a “Tools -> Options” aquí nos dirigimos a la pestaña “PHP -> CodeIgniter”, aquí nos vamos a “Base Files”, agregamos el zip del framework descargado desde http://ellislab.com/codeigniter



Ya tenemos todo configurado, por lo que estamos listos para crear nuestro proyecto con el framework CI.

lunes, 14 de octubre de 2013

PHP - JSON




JSON es un formato ligero de intercambio de datos que desde hace algún tiempo ha comenzado a usarse de una forma tan popular como se uso en su tiempo el XML. JSON es la abreviación de JavaScript Object Notación – Notación de Objetos de JavaScript – También es subconjunto del estándar ECMA 262 publicado en diciembre de 1999. El formato de JSON es ampliamente reconocido por una gran variedad de lenguajes como Java, PHP, JavaScript, C++, C# entre otros, la lista completa se puede consultar desde el sitio web de JSON.

Para muchos, es el compañero perfecto de Ajax. Al igual que XML, sirve para modelar y presentar datos, así que se puede combinar con todo tipo de aplicaciones como lectores RSS, Widgets de WordPress, Mods de Joomla, Gadgets y Badges en diferentes aplicaciones y servidores.

Esta constituido por dos estructuras perfectamente válidas en cualquier lenguaje de programación:
  1. Una colección de pares nombre / valor
  2. Una lista ordenada de valores

Decodificar JSON desde array

Lo primero será crear un simple PHP, el cual contiene un array de prueba, y la transformación a JSON.

 1, 'dos' => 2, 'tres' => 3, 'cuatro' => 4, 'cinco' => 5);
    echo json_encode($numeros);
?>

Como resultado, obtendremos lo siguiente:

{"uno":1,"dos":2,"tres":3,"cuatro":4,"cinco":5}
Decodificar JSON desde MySQL

El segundo ejemplo, es crear un JSON desde datos obtenidos de una consulta a MySQL



Lo que hace el ejemplo, es en primer lugar conectarse a una base de datos, luego guarda los datos obtenidos en un array, finalmente lo toma y muestra en pantalla en formato JSON.

Como resultado obtenemos

[["uno","1"],["dos","2"],["tres","3"],["cuatro","4"],["cinco","5"]]

Codificar array en JSON

Aquí vemos lo inverso a lo hecho anteriormente, tenemos un arreglo con estructura JSON y lo decodificaremos para verlo en un array de PHP.


domingo, 13 de octubre de 2013

YII - Rules Compare



Es muy probable que necesitemos comparar ciertos parámetros cuando estamos validando un formulario, por ejemplo, podemos querer validar password, entonces, pedimos escribir 2 veces la password, y luego comprobar que ambas son iguales, también podemos querer comparar fechas, por ejemplo, que la fecha de inicio nunca sea mayor a la fecha de término, sólo por nombrar algunas.

En YII, esto lo podemos validar a través del modelo, ya que en este existe la función rules, podemos leer sobre este en http://www.yiiframework.com/wiki/56/#hh7

Leyendo el enlace anterior, podemos darnos cuenta, que para comparar que la fecha de término sea mayor a la inicial, debemos hacer algo como lo siguiente:

array('fer_termino','compare','compareAttribute'=>'fer_inicio','operator'=>'>=','message'=>'Fecha de Término debe ser superior a Fecha de Inicio'),

Lo que hacemos, es que tomamos la fecha_termino, indicamos que lo compararemos con la fecha_inicio, luego indicamos que utilizaremos el operador '>=' (mayor que), si esta regla no se cumple, lanza el mensaje de error especificado en 'message'

YII - Generar PDF



Al tener diferentes datos, es muy lógico que vamos a querer exportar esto a un formato, en este caso a PDF. Por suerte, YII trae algunas extensiones que nos facilitan mucho esto, ya que ocupan librerías de PHP para trabajar con PDF, como mpdf y html2pdf. 

La extensión que utilizaremos será yii-pdf, la cual la podemos descargar desde http://www.yiiframework.com/extension/pdf/ 

Al descargarla, debemos ubicar el directorio dentro de extensions, quedando: /protected/extensions/yii-pdf Luego debemos descargar las librerías que utiliza esta extensión, las podemos descargar desde: http://www.mpdf1.com/mpdf/download http://html2pdf.fr/en/download Estas las podemos ubicar en el directorio vendors (el directorio vendors lo debemos crear), quedando: /protected/vendors/mpdf /protected/vendors/html2pdf 

*Vendors es donde dejamos los elementos creados por terceros, que no son creados específicamente para el framework YII. 

En sí, no son necesarias ambas, sino, que la extensión nos permite utilizar cualquiera de las dos. Volviendo a la web de la extensión, copiamos el código en el fichero main.php, quedando algo como lo siguiente:

'components'=>array(
'ePdf' => array(
      		'class' => 'ext.yii-pdf.EYiiPdf',
		'params' => array(
             	'mpdf' => array(
'librarySourcePath' => 'application.vendors.mpdf.*',
                   	'constants' => array(
'_MPDF_TEMP_PATH' => Yii::getPathOfAlias('application.runtime'),
                    ),                    

		'class'=>'mpdf',
			
            ),
            'HTML2PDF' => array(
			'librarySourcePath' => 'application.vendors.html2pdf.*',
			'classFile' => 'html2pdf.class.php', 
            )
        ),
    ),
    //Resto del código

*El ejemplo que sale en la web, es mucho más extenso, pero elimine lo comentado. 

Ahora debemos configurar el controlador de donde queremos generar los PDF, según mi punto de vista, a diferencia del excel, en PDF no quiero generar todos los datos, sino, quiero generar fichas, por lo cual, se generará un PDF por registro, producto de lo anterior, debemos crear la función crearPDF, de la siguiente forma:

public function actionCrearPdf($id){
	$mPDF1 = Yii::app()->ePdf->mpdf();
	$mPDF1->WriteHTML(
		$this->render('pdf',array(
			'model'=>$this->loadModel($id), true
		))
	);
	$mPDF1->Output();
}

Luego, debemos crear una vista llamada pdf.php (puede tener otro nombre), por ejemplo, debería quedar algo como /protected/views/usuarios/pdf.php, este fichero debe componerse de la siguiente forma:


            
                RUN: 
                $model->rut-$model->dv
            
            
                Nombres:
                $model->nombre
            
            
                Apellidos:
                $model->apellidos
            
        
HERE;

$mpdf = new mPDF('utf-8','LETTER','','',15,15,25,12,5,7);
$mpdf->SetHeader(Yii::app()->name);
$mpdf->SetFooter('Pie de página');
$mpdf->SetWatermarkImage("/images/logo.jpg");
$mpdf ->showWatermarkImage = true;
$mpdf->WriteHTML($html);
$mpdf->Output('Ficha-Usuario_'.$model->rut.'-'.$model->dv.'.pdf','I');
exit;
?>


En el ejemplo anterior, tenemos una tabla que va mostrando los atributos del modelo, en este caso RUN,NOMBRE, APELLIDOS, luego empezamos a configurar mpdf. Con esto ya tenemos configurado para generar el PDF, ahora, agregaremos un ícono para acceder al PDF, para esto, vamos a la vista admin.php, y buscamos donde tenemos:
array (
	'class'=>'CButtonColumn',
),
y lo reemplazamos por:
array(
   'class'=>'CButtonColumn',
   'template' => '{view} {update} {delete} {pdf}',
   'buttons'=>array(
      'pdf' => array(
         'label'=>'Generar PDF', 
         'url'=>"CHtml::normalizeUrl(array('crearpdf', 'id'=>\$data->idusuarios))",
         'imageUrl'=>Yii::app()->request->baseUrl.'/images/pdf_icon.png', 
         'options' => array('class'=>'pdf'),
      ),
   ),
),

*Debemos tener una imagen de pdf, por ejemplo /images/pdf_icon.png 

Con esto, ya tenemos todo listo, y nos aparecerá un botón para acceder al pdf, como lo siguiente:

viernes, 11 de octubre de 2013

PHP - Visualizar XML

El trabajo de ficheros XML en PHP no es muy complejo gracias a SimpleXML. La extensión SimpleXML proporciona un conjunto de herramientas muy simple y fácil de usar para convertir XML a un objeto que pueda ser procesado con selectores de propiedades normales e iteradores de arrays.

Para visualizar un XML, podemos seguir un ejemplo básico que aparece en la página de PHP, el cual es el siguiente:






Lo que hace el código, es verificar que existe el fichero text.xml, si existe, guarda en la variable $xml, la sentencia simplexml_load_file y luego lo imprime con un print_r. Por el contrario, si no existe el fichero, envía un mensaje advirtiendo.

Un ejemplo un poco más completo, es el siguiente que he hecho. En primer lugar, tenemos el fichero empleados.xml con el siguiente contenido:




    
        123
        Pedro
        Gerente IT
    
    
        456
        Juan
        Jefe de Proyectos
    
    
        789
        Diego
        Programador
    


Luego tenemos un fichero php, puede llamarse como queramos, en mi caso, se llama test.php



                    
                        
                            RUT
                            NOMBRE
                            CARGO
                        
                    
                    ';
                        foreach ($xml->trabajador as $empleados){
                            echo '
                                    ' . $empleados->rut . '
                                    ' . $empleados->nombre . '
                                    ' . $empleados->cargo . '
                                  ';
                        }
                    '
                ';
        }
    }
    else{
        exit('Ha ocurrido un error inesperado');
    }
?>

A grandes rasgos, lo que hace este código es validar el fichero xml, y validar que este correcto, si está todo correcto, mostramos el XML en una tabla.

jueves, 15 de agosto de 2013

YII – Exportar datos a Excel

Es muy probable y lógico, que cuando tenemos muchos datos, vamos a querer exportarlos a una hoja de cálculo, como MS Office es lo más conocido, he elegido Excel para exportar, aunque al exportarlo a LibreOffice, no he visto inconvenientes. 

La opción más conocida es modificando las cabeceras, pero el problema que sucede con esto, es que al abrir el fichero, aparece un mensaje, en cambio al hacerlo con PHPExcel, se abre sin mensaje alguno. 

Lo primero que debemos hacer es ir a la página de PHPExcel para descargar el complemento http://phpexcel.codeplex.com/ Aquí podemos hacer clic en “Download” o también irnos al menú “Downloads” y descargar:

PHPExcel x.x.x - with Documentation in MS Office format

Una vez descargado, lo descomprimimos e ingresamos al directorio. Aquí encontraremos el directorio Classes, al cual también ingresamos. Finalmente aquí, encontraremos el directorio PHPExcel y un fichero php llamado PHPExcel.php. Estos 2 elementos los debemos copiar a /protected/vendors

*La carpeta vendors la debemos crear

Ahora ingresamos a /protected/config/main.php y dentro de components, debemos agregar:

'excel'=>array(
                'class'=>'application.vendors.PHPExcel',
            ),

Quedando algo parecido a lo siguiente:

'components'=>array(
        'excel'=>array(
            'class'=>'application.vendors.PHPExcel',
        ),
        //Resto del código

Seguido de esto, debemos crear el fichero LibroExcel (o el nombre que queremos) en:

/protected/vendors/PHPExcel/LibroExcel.php

Quedando una estructura similar a lo siguiente:



fillSheetByArray($objPHPExcel, $array);
            $this->nameSheet($objPHPExcel);
            
            // Redirect output to a client’s web browser (Excel2007)
  header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
            header('Content-Disposition:attachment;filename='.$nombreFichero.'.xlsx');
            header('Cache-Control: max-age=0');
            $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
            $objWriter->save('php://output');
            exit;
        }

        function fillSheetByArray($objPHPExcel, $array = null)
        {
            $objPHPExcel->setActiveSheetIndex(0);
            $fila = 1;
            $columna = 0;
            foreach($array[0] as $titulo => $valor)
            {
                $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($columna , $fila, $titulo);
                $columna++;
            }
            
            $fila++;

            foreach($array as $cliente)
            {
                $columna = 0;
                foreach($cliente as $dato)
                {
                    $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($columna , $fila, $dato);
                    $columna++;
                }

                $fila++;
            }
        }

        function nameSheet($objPHPExcel)
        {
            $objPHPExcel->getActiveSheet()->setTitle('Simple');
        }
    }
?>

Teniendo LibroExcel.php listo, nos vamos al controlador que queremos generar el Excel, en mi caso, es el controlador de empleados, y luego creamos la función actionGenerateExcel(), de la siguiente forma:

public function actionGenerateExcel() { 
 Yii::import('application.vendors.LibroExcel');
 $model=Empleados::model()->findAll();
 $xlsx = new LibroExcel();
 $xlsx->generateExample($model);
}

*Empleados lo debemos cambiar por el nombre del modelo que estamos trabajando.
*LibroExcel() lo debemos cambiar si creamos la clase PHP con otro nombre.

Además, debemos darle privilegios en accessRules() de la siguiente forma:

array('allow',
 'actions'=>array('create','update','admin','delete','generateexcel'),
 'users'=>array('@'),
),

Finalmente lo que necesitamos es hacer en la vista que podamos crear el Excel, en mi caso, lo crearé en el menú lateral, de la vista admin.php

$this->menu=array(
 array('label'=>'Crear Empleados', 'url'=>array('create')),
 array('label'=>'Exportar a Excel', 'url'=>array('generateExcel')),
);

Con esto, ya podemos generar los ficheros Excel.

lunes, 8 de julio de 2013

YII – Mostrar nombre en vez de ID en Foreign Key

En YII Podemos definir en el modelo lo que es llaves foráneas, esta vez, no explicaré mucho el proceso, producto que, si está definido el modelo de la base de datos, Yii lo tomará automáticamente, por ejemplo, si trabajamos con MySQL y motor InnoDB, y creamos todas las relaciones necesarias, para finalmente crear el modelo con GII, podemos ver una función como la siguiente en el modelo.
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(
  'idcliente0' => array(self::BELONGS_TO, 'Cliente', 'idcliente'),
  'idempleados0' => array(self::BELONGS_TO, 'Empleados', 'idempleados'),
  );
}

Está vez, utilizaré un ejemplo de Empleado, Cliente y Atención, en donde en Atención, se guardará la atención que hace el empleado al cliente, por lo cual, está tiene las llaves foráneas de los ID tanto de empleado como cliente.

Como podemos ver, en el modelo, está la función relations(), aquí tenemos un array con elementos, en este caso, los elementos que nombra las relaciones son:

  • idcliente0
  • idempleados0

Estos son los que debemos utilizar en la vista, en este caso, haré un ejemplo de como hacerlo en la vista admin.

En la vista admin, encontraremos lo siguiente:

widget('zii.widgets.grid.CGridView', array(
 'id'=>'atencion-grid',
 'dataProvider'=>$model->search(),
 'filter'=>$model,
 'columns'=>array(
  'idatencion',
  'hora',
  'motivo',
  'comentario',
  'idcliente',
  'idempleados',
  array(
   'class'=>'CButtonColumn',
  ),
 ),
)); 
?>
Por lo cual 'idcliente' y 'idempleados' lo debemos reemplazar y dejar de la siguiente forma:


widget('zii.widgets.grid.CGridView', array(
 'id'=>'atencion-grid',
 'dataProvider'=>$model->search(),
 'filter'=>$model,
 'columns'=>array(
  'idatencion',
  'hora',
  'motivo',
  'comentario',
  array(
   'name'=>'idcliente',
   'value'=>'$data->idcliente0->nombres',
  ),
  array(
   'name'=>'idempleados',
   'value'=>'$data->idempleados0->nombre',
  ),
  array(
   'class'=>'CButtonColumn',
  ),
 ),
)); 
?>;

Como podemos ver, eliminados lo necesario, y agregamos un array, el cual tiene el nombre, y valor. En valor indicamos 

$data->NOMBRE-RELACION->CAMPO-A-MOSTRAR

domingo, 30 de junio de 2013

Yii – incorporar MBMenu

CBMenu, es una extensión que nos permite tener nuestro menú estilo “Drop Down Menú”, lo cual le da un aspecto más amigable si es que necesitamos muchos menús, y también, nos ayuda a que sea menos invasivo para la vista.

Lo primero que debemos hacer es descargar MBMenu desde

http://www.yiiframework.com/extension/mbmenu/

Luego lo debemos descomprimir e incorporar en nuestro proyecto en el directorio /protected/extensions

*Como recomendación, al menos yo lo hago así, copio mbmenu.css al directorio /css/

Ahora, debemos modificar nuestra vista /protected/views/layouts/main.php. Aquí nos encontraremos con un DIV con id=”mainmenu”, este es el que debemos modificar, y podemos generar algo como lo siguiente

widget('application.extensions.mbmenu.MbMenu',array( 'items'=>array( array('label'=>'Home', 'url'=>array('/site/index')), array( 'label'=>'Usuarios', 'items'=>array( array('label'=>'Administrar Usuarios','url'=>array('empleados/admin')), array('label'=>'Crear Usuarios','url'=>array('empleados/create')), ), ), ) )); ?>

Si nos fijamos bien, tenemos un arreglo con label Usuarios, y este arreglo tiene “items”, los cuales son otros arreglos, pero cada uno de estos, es un sub-menú, que son los que nos aparecerán al pasar el mouse sobre su menú padre.

Para que nos tome el css, en el mismo main.php, debemos incorporarlo, de la siguiente forma:

sábado, 29 de junio de 2013

Yii - Error Gii Unable to write the file

Es muy probable que en el momento de querer utilizar Gii para generar nuestro código, nos aparezca un error que es que no nos permite escribir el fichero. Esto es un tema netamente de permisos.

Para solucionar este problema, debemos dejar a nuestro usuario y grupo apache como propietario, en las diferentes versiones de Linux, puede cambiar un poco su nombre, puede ser apache2, www-data, etc. En el caso de Debian, es www-data, y es donde utilizaré el ejemplo. Debemos escribir lo siguiente:

$ sudo chown www-data:www-data /ruta/al/directorio/ -R

sábado, 1 de junio de 2013

Integración Netbeans con YII Framework

La verdad es que por experiencia propia, es mucho más rápido configurar el Framework en Linux que en Windows. Actualmente mi IDE para desarrollar es Netbeans, es el cual más tiempo he tenido desarrollando, por lo que debido a esto es que he necesitado configurarlo.

Lo primero que debemos hacer es escargar el framework YII desde su  página web http://www.yiiframework.com/download/ y luego descomprimir el fichero descargado

Si lo hacemos a través de consola debemos hace consola, debemos hacer lo siguiente:

$ wget http://yii.googlecode.com/files/yii-1.1.13.e9e4a0.tar.gz
$ tar -xvf yii-1.1.13.e9e4a0.tar.gz

Ahora debemos ir al menú “Tool → Option” y dentro de este ir a “PHP → General”, aquí debemos especificar la ruta de nuestro interprete de PHP5, normalmente lo está, pero si no es así, debemos agregarlo (/usr/bin/php).



Luego debemos especificar Yii, para esto nos vamos al Menú YII, en donde veremos “YII Script”, aquí debemos elegir la carpeta donde está el script que venía en el fichero descargado de YII, ej: /yii-1.1.13.e9e4a0/framework/yiic.php

Para el caso de Windows, quizás sea necesario especificar las variables de entorno del sistema.

YII - Tips Formulario

Cuando generamos un CRUD, nos crea lo necesario para administrar lo creado, pero quizás sea necesario realizar algunas pequeñas modificaciones al CSS de los formularios, esto obviamente según cada requerimiento que tengamos.

En primer lugar debemos saber cuál es el fichero a editar:

\css\form.css

Aquí con encontraremos con

div.form
{
}

Aquí nos podremos dar cuenta que cada elemento del formulario lo debemos vincular con lo que acabamos de ver, por ejemplo:

div.form fieldset
{
    border: 1px solid #DDD;
    padding: 10px;
    margin: 0 0 10px 0;
    -moz-border-radius:7px;
}


Ahora que ya entendemos a grandes rasgos como está funcionando esto, podemos modificarlo según queramos, algunos de los tips que he usado hasta el momento y que puedo compartir son:

Permitir sólo mayúsculas o minúsculas: Esto es que en el momento de escribir, transforme a mayúsculas o minúsculas según lo necesitemos, y así no dejamos está responsabilidad en el usuario, yo lo uso para guardar una homogeneidad en los datos de la base de datos.

div.form testField{
    /*Ocupar sólo una*/
    text-transform: uppercase; /*Transformar a mayúsculas*/
    text-transform: lowercase; /*Transformar a minúsculas*/
}



YII - Encriptar contraseñas

Por un tema de seguridad, practicamente todos buscamos que las contraseñas no se vean reflejas directamente en nuestra base de datos, es por eso que siempre se busca encriptarlas. En YII existe una manera bastante fácil de poder encriptar las contraseñas, y es simplemente agregando una sola línea a nuestro código. Para realizar esto, debemos irnos al controlador de donde queremos trabajar esto, aquí nos debemos fijar en 2 funciones que trabajan esto: actionCreate() que crea un nuevo registro actionUpdate() que modifica un registro Imaginemos que nuestro modelo se llama “Usuarios” (deben cambiar Usuarios por el nombre de su modelo), este fué creado con GII, y nos creará algo similar a esto:


public function actionCreate()
{
 $model=new Usuarios;

 // Uncomment the following line if AJAX validation is needed
 // $this->performAjaxValidation($model);

 if(isset($_POST['Usuarios']))
 {
  $model->attributes=$_POST['Usuarios'];
  if($model->save())
   $this->redirect(array('view','id'=>$model->idusuarios));
 }

 $this->render('create',array(
  'model'=>$model,
 ));
}

public function actionUpdate($id)
{
 $model=$this->loadModel($id);

 // Uncomment the following line if AJAX validation is needed
 // $this->performAjaxValidation($model);

 if(isset($_POST['Usuarios']))
 {
  $model->attributes=$_POST['Usuarios'];
  if($model->save())
   $this->redirect(array('view','id'=>$model->idusuarios ));
 }

 $this->render('update',array(
  'model'=>$model,
 ));
}

Simplemente lo que debemos hacer es agregar la línea $model->password=md5($model->password); quedando más o menos de la siguiente forma:


public function actionCreate()
{
 $model=new Usuarios;

 // Uncomment the following line if AJAX validation is needed
 // $this->performAjaxValidation($model);

 if(isset($_POST['Usuarios']))
 {
  $model->attributes=$_POST['Usuarios'];
  $model->password=md5($model->password); //Encriptar en MD5
  if($model->save())
   $this->redirect(array('view','id'=>$model->idusuarios));
 }

 $this->render('create',array(
  'model'=>$model,
 ));
}

public function actionUpdate($id)
{
 $model=$this->loadModel($id);

 // Uncomment the following line if AJAX validation is needed
 // $this->performAjaxValidation($model);

 if(isset($_POST['Usuarios']))
 {
  $model->attributes=$_POST['Usuarios'];
  $model->password=md5($model->password); //Encriptar en MD5
  if($model->save())
   $this->redirect(array('view','id'=>$model->idusuarios ));
 }

 $this->render('update',array(
  'model'=>$model,
 ));
}

YII - Empezando con GII

Gii (potente generador de código basado en web) para automatizar la creación de códigos para ciertas tareas. Podemos crear modelos, controladores, generar CRUD, utilizando módulos Gii. Gii viene incorporado en YII, sólo que hay que activarlo. Antes de comenzar a explicar el trabajo con GII, es importante identificar los conceptos,  dejaré links a la información oficial de YII en español.

Modelo: http://www.yiiframework.com/doc/guide/1.1/es/basics.model
Controlador: http://www.yiiframework.com/doc/guide/1.1/es/basics.controller

Activar GII

En el fichero /protected/config/main.php debemos descomentar lo siguiente:

'gii'=>array(
 'class'=>'system.gii.GiiModule',
 'password'=>'CONTRASEÑA',
 // If removed, Gii defaults to localhost only. Edit carefully to taste.
 'ipFilters'=>array('127.0.0.1','::1'),
),

Se debe reemplazar CONTRASEÑA con la contraseña deseada.

Ahora, para ingresar a GII, debemos ingresar a http://dominio/index.php?r=gii y veremos



Con esto hemos creado todas las vistas, el controlador y el modelo para esa tabla en particular, las vistas son: create, update, index, admin y view. Lo más básico o común es trabajar con los menú de Model y Crud.

Crear el modelo es vincular nuestra base de datos con nuestro sistema, toma todos los datos. Aquí veremos un menú como el siguiente:


Aquí debemos colocar los datos de nuestra bas de datos en donde dice "Table Name", lo que está con fondo amarillo, no lo debemos modificar. El "Model Class" lo generará automáticamente a partir del "Table Name", aunque si queremos otro nombre, lo podemos cambiar.

En cuanto al CRUD es el que nos genera el controlador, y todo lo escencial para trabajar con nuestro modelo.


Aquí debemos colocar le nombre de nuestro modelo, y todo lo generará automáticamente.


Fuentes: 
http://www.arvaro.org/php/crear-modelos-y-crud-con-gii-en-yii-framework
http://www.yiiframework.com/doc/guide/1.1/en/topics.gii
http://www.yiiframework.com/doc/guide/1.1/en/quickstart.first-app
http://yiiframeworkespanol.blogspot.com/2012/06/gii-generacion-automatica-de-codigo.html

YII - Autenticación de usuario

Lo primero que debemos hacer es crear la tabla en la base de datos

CREATE TABLE usuario (
Id INT NOT NULL AUTO_INCREMENT,
username VARCHAR(15) NOT NULL,
password VARCHAR(15) NOT NULL
)

Ahora creamos el modelo a través de YII, para esto, ingresamos a través de nuestra URL y le agregamos el valor ?r=gii, por ejemplo http://localhost/yii/index.php?r=gii



Ahora creamos el CRUD



Ahora debemos entrar a editar /protected/components/UserIdentity.php y reemplazar la clase con lo siguiente:


public function authenticate()  {
        $username=strtolower($this->username);
        $user=Usuario::model()->find('LOWER(username)=?',array($username));
        
        if($user===null)
            $this->errorCode=self::ERROR_USERNAME_INVALID;
        else if(!$user->validatePassword($this->password))
            $this->errorCode=self::ERROR_PASSWORD_INVALID;
        else{
            $this->_id=$user->id;
            $this->username=$user->username;
            $this->errorCode=self::ERROR_NONE;
        }
        
        return $this->errorCode==self::ERROR_NONE;
    }
    
    public function getId(){
        return $this->_id;
    }


Luego en /protected/models/Usuario.php debemos agregar al final del fichero, las funciones para validar el usuario:


public function validatePassword($password){
return $this->hashPassword($password)===$this->password;
}
 
public function hashPassword($password){
return md5($password);
}

YII - Conexión a la base de datos MySQL

Por defecto YII utiliza la conexión sqlite, es muy probable que nosotros elijamos otro motor de base de datos para trabajar, en este caso, realizaré la conexión al motor MySQL, para hacer esto debemos abrir el archivo “/protected/config/main.php”, y buscar buscar:





'db'=>array(
    'connectionString' => 'sqlite:'.dirname(__FILE__).'/../data/testdrive.db',
),
// uncomment the following to use a MySQL database
/*
    'db'=>array(
        'connectionString' => 'mysql:host=localhost;dbname=testdrive',
        'emulatePrepare' => true,
        'username' => 'root',
        'password' => '',
        'charset' => 'utf8',
    ),
*/


En donde debemos invertir los papeles, comentaremos lo de sqlite y descomentar lo de MySQL, dejándolo de la siguiente forma:


/*'db'=>array(
    'connectionString' => 'sqlite:'.dirname(__FILE__).'/../data/testdrive.db',
),*/
'db'=>array(
    'connectionString' => 'mysql:host=nuestro-host;dbname=nombre-bd',
    'emulatePrepare' => true,
    'username' => 'nuestro-user',
    'password' => 'nuestra-password',
    'charset' => 'utf8',
),

YII – Mostrar elementos si el está usuario logeado

Lo más probable, es que queramos mostrar diferentes elementos según si el usuario está o no logeado, y más aún, quizás queremos mostrar elementos a usuarios específicos, por ejemplo, un usuario administrador tiene más permisos de visualización que los otros usuarios.

En YII, mucho de esto, lo podemos hacer a través de la función rules(), a pesar de esto, hay más que hacer, por ejemplo, que nuestr menú nos muestre o no elementos, según el usuario. Por ejemplo, en la ruta /protected/views/layouts/main.php veremos el menú que viene por defecto, algo similar a esto:


 

Aquí ya nos podemos fijar en 2 cosas, y son los array de Login y Logout, que son los que están trabajando como queremos nosotros. Ya que si el usuario está logeado, muestra uno, si no está logeado, muestra otro. 

Mostrar u ocultar elementos, lo comparamos con que si el usuario es invitado o no (isGuest). Por ejemplo, si queremos qe el menú “Contact” sólo se muestre cuando el usuario esté logeado, hacemos lo siguiente:

array('label'=>'Contacto', 'url'=>array('/site/contact')), 'visible'=>!Yii::app()->user->isGuest),
Lo que aquí estamos indicando, es que sea visibile siempre y cuando el usuario NO sea invitado. Esta negación la hacemos con el signo de exclamación (!).

martes, 2 de abril de 2013

PHP - Pasar variables sin usar form


La verdad es que este es un tema sumamente sencillo, uno siempre tiende a pensar en lo complejo, por lo que buscamos una solución sencilla. Para pasar variables sin usar un formulario, simplemente lo hacemos a través de GET, como bien sabemos, GET permite pasar variables a través de URL’s, por lo cual simplemente le damos los valores pertinentes. Por ejemplo:

Hoja 1: index.php



    
    Prueba Variables

    
    Abril 2013

Hoja 2: imprimir.php


En la primera hoja (index.php) tenemos una estructura HTML, en la cual está el tag <a > el cual nos redirecciona a la hoja imprimir.php, la diferencia está en que aquí les pasamos las variables que nosotros deseamos.

En el caso de la hoja 2 (imprimir.php), recepcionamos las variables en otras variables ($ano y $mes) y luego las imprimimos con echo, claro está, que si queremos, podemos imprimirlas directamente.

jueves, 21 de marzo de 2013

Conexión PHP - MongoDB



Lo primero es instalar el driver para que podamos hacer la conexión, para lo cual hacemos lo siguiente:

$ sudo yum install php-devel

$ sudo pecl install mongo


Entramos a nuestro php.ini

$ sudo nano /etc/php.ini


Al final del fichero, ingresamos la siguiente línea:

extension=mongo.so


Si tenemos problemas de permiso denegado (RedHat, CentOS, Fedora) debemos aplicar lo siguiente:

$ /usr/sbin/setsebool -P httpd_can_network_connect 1


Ahora creamos un fichero de prueba para probar la conexión de MongoDB con PHP

$ sudo nano testmongodb.php


Dentro de este fichero, copiamos lo siguiente:

 
comedy;

// select a collection (analogous to a relational database's table)
$collection = $db->cartoons;

// add a record
$document = array( "title" => "Calvin and Hobbes", "author" => "Bill Watterson" );
$collection->insert($document);

// add another record, with a different "shape"
$document = array( "title" => "XKCD", "online" => true );
$collection->insert($document);

// find everything in the collection
$cursor = $collection->find();

// iterate through the results
foreach ($cursor as $document) {
    echo $document["title"] . "\n";
}
?>

Finalmente, corremos el fichero PHP desde consola

 $ php testmongodb.php


martes, 31 de julio de 2012

PHP - Instalar Framework Symfony desde pear

Symfony es un completo framework diseñado para optimizar el desarrollo de las aplicaciones web basado en el modelo vista controlador. Para empezar, separa la lógica de negocio, la lógica de servidor y la presentación de la aplicación web. Proporciona varias herramientas y clases encaminadas a reducir el tiempo de desarrollo de una aplicación web compleja. Además, automatiza las tareas más comunes, permitiendo al desarrollador dedicarse por completo a los aspectos específicos de cada aplicación. El resultado de todas estas ventajas es que no se debe reinventar la rueda cada vez que se crea una nueva aplicación web

Existe una forma muy sencilla para instalar este framework, les dejo un script que generé en Bash, para automatizar el proceso de instalación en debian:

#!/bin/bash 
echo "Instalación del Framwork Symfony"
echo "--------------------------------" 
sudo aptitude install php-pear
sudo pear channel-discover pear.symfony-project.com
sudo pear remote-list -c symfony
sudo pear install symfony/symfony

viernes, 16 de marzo de 2012

YII - Instalación Framework Yii


Hoy un profesor estuvo hablando sobre los framework, la verdad había escuchado de ellos, pero nunca los había querido utilizar, es por esto que luego de su charla, al llegar a casa quise probar uno, el más conocido es zend (creo), pero quise probar otro, y vi una lista de framework http://www.phpframeworks.com/top-10-php-frameworks/ y en el número 1 estaba el framework Yii, por el cual me decidi.


Nota: Las características de Yii las pueden leer en:
http://www.yiiframework.com/doc/guide/1.1/es/quickstart.what-is-yii
La verdad es que la instalación no es para nada complicada, bajamos el archivo desde http://www.yiiframework.com/, luego lo descomprimimos y lo dejamos en /var/www/, en mi caso hice lo siguiente:
$ mv yii-1.1.10.r3566 /var/www/yii
Nota: Aproveche de cambiar el nombre

Luego debemos crear un directorio el cual será nuestra página web, por ejemplo creamos el directorio PhpYii, por lo que debiesemos tener las 2 carpetas de la siguiente forma:
/var/www/yii
/var/www/PhpYii
Despues de esto ocuparemos yiic para que el framework yii nos cree la estructura en nuestro directorio, para esto nos situamos en /var/www y tecleamos lo siguiente:
yii/framework/yiic webapp PhpYii/
y si ahora vemos el directorio de nuestra web, veremos que se han añadidos los archivos que necesita el framework.

Como ahora estoy empezando a aprender sobre este framework, es posible que empiecen a ver varios articulos sobre este framework.