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.


RHEL / CentOS - Instalar Ajenti



Ajenti es un panel web de código abierto basado en el sistema de gestión de control de la gestión de las tareas de administración de sistema remoto desde el navegador web muy similar al módulo de Webmin. Ajenti es una herramienta muy potente y ligero, que proporciona una interfaz web rápido y sensible para la gestión de servidores pequeños montajes y también la más apropiada para VPS y servidores dedicados. Se ha construido con muchos plugins pre-hechos para la configuración y software de monitoreo y de servicios como Apache, Cron, sistema de archivos, Firewall, MySQL, Nginx, Munin, Samba, FTP, calamar y muchas otras herramientas como el Administrador de archivos, editor de código para el servidor desarrolladores y acceso a la terminal.

Lo primero es instalar el repositorio EPEL

$ sudo yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

Luego, instalamos el repositorio

$ sudo yum install http://repo.ajenti.org/ajenti-repo-1.0-1.noarch.rpm

Después de tener el repositorio, podemos instalar Ajenti

$ sudo yum install ajenti

Ahora, debemos permitir el puerto 8000 a través de IPTables, para eso, debemos hacer lo siguiente:

$sudo iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
$ sudo iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
$ sudo service iptables restart

Reiniciamos el servicio

$ sudo service ajenti restart

Finalmente, ingresamos a la ip o hostname e indicamos en el puerto 8000

https://<ip>:8000/

Aquí nos pedirá el usuario y contraseña, el cual es:

User: root
Pass: admin

Una vez ingresadas las credenciales, nos enviará al Dashboard de Ajenti


Ahora nos queda sólo explorar Ajenti.

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:

Linux - Configurando servicios fácilmente

Cuando el sistema inicia, carga diferentes servicios, estos normalmente los encontraremos en /etc/rcX.d/, en Donde X va del 0 al 6. Sin intentar explicar esto, existe una forma de administrar los servicios bastante fácil, esto es gracias a sysv-rc-conf. Para instalarlo debemos:

$ sudo aptitude install sysv-rc-conf


Una vez instalado, simplemente lo ejecutamos en consola:

$ sudo sysv-rc-conf


Aquí nos encontraremos con algo similar a lo siguiente:


Como podemos ver, nos muestra los diferentes servicios, y del 0 al 6, por lo cual podemos activar o desactivar según nosotros estimemos conveniente.

  • Con la tecla espacio podemos marcar o desmarcar un servicio en un nivel de ejecución, al tener la “X” significa que estará activado.
  • Con la combinación “Ctrl + N” pasamos a la siguiente página, al igual que lo podemos hacer si simplemente empezamos a bajar.
  • Para detener o iniciar un servicio que ya esté en ejecución, utilizamos las teclas “-” y “+”.
  • Para salir, simplemente utilizamos la tecla “q”


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.

domingo, 21 de julio de 2013

Bootstrap - Creando proyecto Bootstrap

Primero que nada, debemos entender que es Bootstrap, y he encontrado las siguientes definiciones que me han parecido interesantes:

“Twitter Bootstrap es una colección de herramientas de software libre para la creación de sitios y aplicaciones web. Contiene plantillas de diseño basadas en HTML y CSS con tipografías, formularios, botones, gráficos, barras de navegación y demás componentes de interfaz, así como extensiones opcionales de JavaScript.
Es el proyecto más popular en GitHub1 y es usado por la NASA y la MSNBC junto a demás organizaciones”

http://es.wikipedia.org/wiki/Twitter_Bootstrap

“Bootstrap v.2.n es una herramienta para el desarrollo rápido y correcto de aplicaciones y sitios web. Fomenta las buenas prácticas de diseño y desarrollo web, conforme a estándares W3C. Permite diseñar webs adaptables y fluidas, visualizables correctamente en múltiples dispositivos (Responsive Web Design). Incluye una robusta base de HTML5, CSS3 y Javascript, también incluye elementos de diseño, tipografías, tablas, formularios, navegación, alertas, etc.”

http://internoma.github.io/tutorial-bootstrap/

Lo primero que debemos hacer es descargar Bootstrap desde http://twitter.github.io/bootstrap/ 

Una vez descargado, lo descomprimimos, aquí veremos la siguiente estructura:




Para utilizar los js de Bootstrap, debemos descargar jquery desde http://www.jquery.com y descargarlo. Es muy importante el orden en el que se agreguen estos a nuestro proyecto, ya que Jquery, siempre debe estar antes que los js de Bootstrap.

Ahora deberíamos crear un index y tener algo parecido a la siguiente estructura:


En el index, podemos generar un código bastante simple, para saber si nos está o no funcionando Bootstrap, el código es el siguiente:



    
        
        Test Bootstrap
        
        
        
    
    
        
        
        
        
        
        
    

Luego, nos dirigimos al navegador, y deberíamos ver algo como lo siguiente:



jueves, 11 de julio de 2013

SQL Server – Copiar Tablas de una DB a Otra

Para copiar una tabla completa de una base de datos a otras, debemos hacer un proceso bastante simple, el cual puede ser simplemente de 1 o 2 pasos dependiendo de lo que necesitemos.

En primera instancia, copiamos las tablas (todas  o seleccionamos cuales) de una DB a otra.

SELECT * 
INTO [historica].[dbo].[mi_tabla_nueva]
FROM [actual].[dbo].[tabla_antigua]


Como pueden ver, estamos copiando todas las tablas, desde la DB “actual” y tabla “tabla_antigua” a la DB “histórica”, tabla “mi_tabla_nueva”.

Este proceso lo debemos hacer SOLO si la tabla no existe, producto que de esta forma copiamos la tabla completa, su estructura y datos, si queremos copiar sólo los datos debemos hacer lo siguiente:


INSERT INTO [historica].[dbo].[mi_tabla_nueva]
SELECT *
FROM [actual].[dbo].[table_antigua]