viernes, 25 de febrero de 2011

Tutorial: Creando un bonito y estilizado contador con php y GD library.(parte 2)

Ahora si vamos a por el script


Paso 1: Comenzando con el desarrollo.

Primero vamos a necesitar un fondo para nuestra imagen. Yo les proporciono este con el logo de Codeigniter para probar, tiene un tamaño de 400x60 a este fondo le vamos a poner ‘fondo.jpg’ ustedes pueden usar el que prefieran.



Ahora vamos a crear un archivo que se llame contador.php y vamos a colocar lo siguiente


<?php 
Header("Content-type: image/png"); 
$im = imagecreatefromjpeg("fondo.jpg"); 
imagepng($im); 
imagedestroy($im); 
?> 

Vamos a utilizar la función header para especificar que esto va a ser una imagen png, hago esto de esta manera para que se den cuenta que aunque creemos una imagen a partir de una en jpeg podemos crear una en formato png o gif como queramos. Veremos que al ejecutar nuestro script veremos la misma imagen que tenemos en la carpeta y también si revisamos la información de la imagen veremos que dice imagen png.


Paso 2: Imprimiendo el numero en la imagen.


Vamos a necesitar ahora una fuente TrueType, en San google podremos conseguir cualquier cantidad de fuentes, yo les proporciono en el archivo final una para este ejercicio que se llama 'Broken Poster Tour.ttf', para poder usar esta letra vamos a requerir primero crear un color para nuestra letra así que vamos a añadir los comandos antes vistos Imagettftext y Imagecolorallocate. Nuestro código nos va a ir quedando así:

<?php 
$numero=5;
Header("Content-type: image/png"); 
$im = imagecreatefromjpeg("fondo.jpg"); 
$col = imagecolorallocate($im, 255, 255, 255); 
imagettftext ($im, 35, 0, 90, 50, $col, 'Broken Poster Tour.ttf',$numero); 
imagepng($im); 
imagedestroy($im); 
?>

Si vamos bien hasta ahora debemos tener de salida algo así:


Nota: si nos sale un error en FireFox que diga así:


No se puede Mostrar la siguiente imagen “xx” porque contiene errores


Debemos primero comentar con ‘//’ la función header, guardar y volver a ejecutar para poder ver cual es el error que tenemos.


Paso 3: Dándole un formato acorde al numero.


A partir de este paso ya no tiene nada que ver con la creación de imágenes sino mas bien con mejorar nuestro script, en este paso vamos a dar formato al texto para que tenga una longitud siempre igual y con delimitador de miles, para ello vamos a usar estas dos funciones: number_format y str_pad.


Number_format: esta función nos va a dar formato el número con separador de miles. Así va a ir quedando nuestro número:

$numero = number_format($numero, 0, '', '.'); 

Str_pad: rellena un texto a cierto tamaño con una cadena. Después le agregamos esta función y nos queda así:

$numero = str_pad(number_format($numero, 0, '', '.'),8,'0', STR_PAD_LEFT); 

Con esto ya tenemos un número de longitud con su respectivo separador de miles con punto. El código nos debe ir quedando así:

<?php 
$numero=5; 
$numero = str_pad(number_format($numero, 0, '', '.'),8,'0', STR_PAD_LEFT); 
Header("Content-type: image/png"); 
$im = imagecreatefromjpeg("fondo.jpg"); 
$col = imagecolorallocate($im, 255, 255, 255); 
imagettftext ($im, 35, 0, 90, 50, $col, 'Broken Poster Tour.ttf',$numero); 
imagepng($im); 
imagedestroy($im); 
?> 

Paso 4: Almacenando el numero.

Ahora ya tenemos una script en php que genera contador nos falta es un lugar donde guardar el numero para que cada ves que alguien visite nuestra pagina se aumente en uno, en este ejemplo vamos a almacenar el numero en un archivo que vamos a llamar ‘contador.dat’.

Primero abrimos el archivo con Fopen donde tenemos que especificar la ruta del archivo y el modo, el modo que vamos a poner es ‘r+’, porque así vamos a poder leer y escribir a la ves nuestro archivo, eso si nuestro archivo debe existir si nos dará error.


Después leemos con fread(), devolvemos el puntero al inicio del archivo con rewind(), escribimos el nuevo total con fwrite() y cerramos la conexión fclose(). Al final nuestro script quedaría de la siguiente forma:

<?php
$archivo = "contador.dat";   
$abre = Fopen($archivo, "r+"); 
$numero = fread($abre, Filesize($archivo)); 
rewind($abre); 
Fwrite($abre, ++$numero); 
Fclose($abre); 

$numero = str_pad(number_format($numero, 0, '', '.'),8,'0', STR_PAD_LEFT); 
Header("Content-type: image/png"); 
$im = imagecreatefromjpeg("fondo.jpg"); 
$col = imagecolorallocate($im, 255, 255, 255); 
imagettftext ($im, 35, 0, 90, 50, $col, 'Broken Poster Tour.ttf',$numero); 
imagepng($im); 
imagedestroy($im); 

?> 



Paso 5: Evitando contar números de más.


Ya tenemos nuestro contador listo y operativo, pero ahora nos surge un problema, el contador se va a actualizar cada ves que yo refresque la pagina ¿Pero de verdad quiero yo eso? Si yo quiero saber realmente el número de personas que visiten mi página, no me va a interesar que se cambie la cantidad de visitas cada ves que cargue la página sino cuando entre una persona diferente diariamente. Para hacer esto vamos a utilizar las cookies, vamos a almacenar con la función setcookie una variable en el navegador del visitante con un tiempo de vida de 24 horas, para que así tengamos un contador más realista. Agregaremos este código:

if (!isset($_COOKIE['visita'])) //comprobamos que la cookie NO este ya puesta
{
// aqui editaremos el archivo y guardaremos el numero
setcookie("visita", "lo que sea", time()+86400); //estableceremos la cookie con una caducidad de 24h = 86400seg
} 

Y el código a la final nos quedaria asi.

<?php 
    $archivo = "contador.dat"; 
    $abre = Fopen($archivo, "r+");
    $numero = fread($abre, Filesize($archivo));
    if (!isset($_COOKIE['visita'])) 
    {
        rewind($abre);
        Fwrite($abre, ++$numero);
        setcookie("visita", "lo que sea" , time()+86400);
    }
    Fclose($abre);

    $numero = str_pad(number_format($numero, 0, '', '.'),8,'0', STR_PAD_LEFT);
    
    Header("Content-type: image/png");
    $im = imagecreatefromjpeg("fondo.jpg");
    $col = imagecolorallocate($im, 255, 255, 255);
    imagettftext ($im, 35, 0, 90, 50, $col, 'Broken Poster Tour.ttf',$numero);
    imagepng($im);
    imagedestroy($im);
    setcookie("TestCookie", $value);
?> 
 
Aqui esta el archivo completo con fuentes y todo.
http://www.megaupload.com/?d=ED5CV7UD

miércoles, 23 de febrero de 2011

Manipulando las cabeceras HTTP con php

¿Qué es HTTP?

HTTP es el protocolo de transmisión de datos que le da vida a la gran telaraña mundial de la Web, es lo que permite que hoy cree un blog y tú lo puedas leer, este protocolo se basa en transacciones independientes una de otra y sigue el esquema petición respuesta entre cliente-servidor, cada transacción consta de una línea de petición, cabecera general, cabecera de solicitud o respuesta, cabecera de entidad y cuerpo de entidad.

Este protocolo NO guarda la información sobre conexiones anteriores. Para el desarrollo de aplicaciones Web dinámicas se requiere mantener alguna información y para ello se instaura la noción de sesiones del lado del servidor y también se pueden guardar pequeñas cantidades de información en las en el navegador, ha esta información que se guarda en el navegador se le llaman cookies.

Para profundizar más sobre el protocolo pueden visitar:

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

¿Como manipular las cabeceras HTTP con php?

Php tiene la función header() que le permite al programador manejar esas cabeceras de respuesta que se envían de el servidor al cliente dándole mayor poder a nuestros códigos. Esta función se debe utilizar por ejemplo cuando vamos a mostrar una imagen o un documento xml, cuando vamos a redirigir la pagina actual y esto lo vamos a hacer con php. Otra función importante también es setcookie() que se encarga de enviar guardar cookies en el navegador.

Aquí les dejo unos ejemplos de la funcion header y setcookie:

Header("Content-type: image/png"); // esta cabecera le indica al navegador el mime type
header("Location: http://www.google.com.ve"); // le dice al navegador que cambia la url a google
header("HTTP/1.0 404 Not Found"); // manda el error 404 al navegador
setcookie("TestCookie", 'valor de la cookie'); //manda la cookie al navegador.
Header("Content-disposition: attachment; filename=photo.jpg");//forza la descarga de un archive


Las cabeceras deben ser enviadas antes de cualquier salto de línea, letra o lo que sea, sino nos dará un error como el siguiente:

Warning: Cannot modify header information - headers already sent by (output started at  xxxx:17) in xxxxx  on line 19


Si nos sale este error es porque ya a habido una salida y no se pueden modificar las cabeceras, por eso también debemos estar pendientes de cualquier espacio o salto de línea antes de iniciar nuestras etiquetas.

Tutorial: Creando un bonito y estilizado contador con php y GD library.(parte 1)

Esta entrada del blog la voy a utilizar para mostrar como podemos crear nuestro propio contador, sencillo y personalizado para nuestra pagina Web con php y la librería gd. Pero primero un poco de explicación.

PHP aunque sea una sorpresa para algunos no sirve solo para generar documentos html y conectarse con la base de datos, php es un lenguaje muy poderoso que nos permite también generar y manipular imágenes, con esta librería podemos hacer muchas cosas desde crear una imagen sencilla hasta complejas graficas, lo cual puede llegar a ser muy útil para nuestros proyectos.

La librería GD es una librería escrita en c de código abierto para permitir a los programadores la creación de imágenes. Se pueden trabajar con imágenes de tipo png, jpg, gif y algunos otros formatos, pero los más importantes para la Web son los tres que nombre. Funciones gd

Para leer este tutorial les recomiendo empezar leyendo primero sobre manejo de archivos y headers para seguir mejor el curso.

Primero les voy a hacer una pequeña descripción de las funciones de la librería GD que vamos a usar, si ya saben para que sirven se lo pueden saltar:

Imagecreatefromjpeg($filename)
Imagecreatefromgif($filename)
Imagecreatefrompng($filename)


$filename = Dirección de la imagen del archivo. Tipo texto.

Estas tres funciones crean identificadores de imágenes representando la imagen obtenida del archivo especificado, dependiendo del tipo de imagen que usemos debemos usar la correspondiente.

Imagecolorallocate($im, $red, $green, $blue)


$im= Identificador de imagen.
$red = Cantidad de color rojo, tipo numero (0 a 255)
$green = Cantidad de color verde, tipo numero (0 a 255)
$blue = Cantidad de color azul, tipo numero (0 a 255)

Crea un identificador de color para una imagen específico basado en colores RGB.

Imagettftext( $im, $size, $angle, $x, $y, $color, $fontfile, $text )


$im = Identificador de imagen.
$size = Tamaño de la letra, tipo numero.
$angle = angulo de la imagen, tipo numero
$x = cordenadas x donde se va a ubicar el texto
$y = cordenadas y donde se va a ubicar el texto
$color = identificador de color para esta imagen(define el color del texto)
$fontfile = dirección de una fuente TrueType.
$text = Texto que se va a escribir en la imagen.

Este comando escribe en nuestra imagen con el tipo de fuente que le hayamos especificado.

Imagepng ($image, $filename, $quality, $filters)  
Imagejpeg ($image, $filename, $quality)  
Imagegif ($image, $filename)


$image= identificador de la imagen
$filename = (opcional) dirección donde se guardara la imagen
$quality = (opcional) calidad de la imagen. Por defecto es 75
$filters = (opcional) Permite la reduccion de el tamaño de la imagen png

Todos estos comandos generan la imagen como tal en cada uno de los diferentes formatos. Si especificamos la variable $filename se guardara en un archivo sino se generara y se mostrara por el explorador.

Imagedestroy($image)


$image=identificador de imagen.

Libera la memoria que ocupo la imagen.


Esta es la primera parte, despues publico el tutorial en si de como crear el script.

domingo, 20 de febrero de 2011

Que es Codeigniter y porque usarlo como framework de desarrollo.

Codeigniter es simplemente un framework para el desarrollo de aplicaciones escritas en php que utiliza el MVC, que permite a los desarrolladores Web mejorar la forma de trabajar y también agregar mayor velocidad a la hora de crear una pagina Web. Codeigniter no es el único framework del mercado, también están zend, cakephp, symphony, entre otros. Pero CI (Codeigniter) se diferencia al resto por lo rápido, lo extensible, lo sencillo de aprender y lo poderoso que puede llegar a ser si lo sabemos usar bien. Codeigniter fue desarrollado por EllisLab y hasta la versión 1.7.3 soportaba php 4, ya para la versión 2.0 solo soporta php 5.







Que es el MVC??

El MVC es el acrónimo de Modelo Vista Controlador, que es un patrón para el desarrollo de software que separa la lógica de control, la interfaz del usuario y los datos del sistema. En este tipo de arquitectura del software existe un sistema central o controlador que controla las entradas y salida del sistema, un o unos modelo que se encargan de buscar los datos e información que sea necesaria y unas interfaz grafica que son lo muestran que es lo que al final va a ver un usuario.

El MVC es muy usado en el desarrollo Web porque a diferencia de la creación de programas locales donde se usa por lo general un mismo lenguaje para desarrollar toda un aplicación en el desarrollo Web se requiere por lo menos usar 2 lenguajes(html y php) para crear una pagina simple, y todo esto en una sola pagina aunado a las consultas en la base de datos que son imprescindibles pues crean hasta paginas de 300 líneas que después para depurar, mejorar o saber donde nos estamos equivocando es un poco difícil. A continuación una explicación un poco más detallada del model, vista y controlador:

  • Modelo: es el que se encarga de la gestión de la base de datos y toda la lógica del negocio, el modelo permite abstraer al resto de la aplicación de como se obtienen o gestionan los datos. Lo cual nos da una ventaja ya que si después se requiere migrar la base de datos o cambiar algo, no va a ser necesario modificar ni la vista ni los controladores, lo cual nos facilita el trabajo. Otra cosa importante de destacar es que el modelo permite la reutilización de código ya que varios controladores pueden usar el mismo modelo sin que eso afecte en nada a los otros controladores y se evita tener que crear un modelo para cada controlador.
  • Controlador: es el centro de control de nuestra aplicación, se encarga de recibir la información del usuario procesarla, validarla, sacar o introducir la información lo que sea necesario con la ayuda de los modelos y renderizar una nueva vista acorde a las necesidad del usuario.
  • Vista: como ya dije anteriormente la vista va a ser la interfaz para nuestro usuario, en nuestro sistema siempre vamos a tener diversidad de vistas que deberán ser cargadas por el control de acuerdo a las necesidades, en desarrollo Web para crear una vista se requiere de html y php, sin contar con que se puede agregar css y javascript para darle mas dinámica a nuestro sitio y mejor apariencia. En la vista va a seguir existiendo código php, pero esta ves pequeños códigos solo para hacer repeticiones o mostrar uno que otro dato importante.

Codeigniter usa este patrón y además agrega librerías, ayudantes y drivers para ayudarnos a simplificar las tareas en el desarrollo de nuestro sistema, con funciones ya predefinidas que nos facilitan el trabajo.

En codeigniter se sigue el siguiente flujo, que después explicare mejor pero para que lo vayan viendo:



En resumen codeigniter, es un útil framework sencillo de aprender, útil para programar, poderoso y nos permite trabajar entre varios programadores al mismo tiempo.

jueves, 10 de febrero de 2011

El español llego a Codeigniter 2.0

Muchos de nosotros hemos usado las librerias y clases que trae el codeigniter y debimos habernos fijados muchas veces como los mensajes de error o cualquier otro mensaje siempre sale en ingles, aqui les traigo actualizado a CI 2.0.0 el lenguaje español listo para usar en nuestros proyectos, aqui les dejo el enlace:

Box.net: CI español(7kb)

Como usarlo?? pues es simple, solo nos vamos a la carpeta /system/language, hay creamos una carpeta que le podemos llamar español y dentro de esa carpeta extraemos los archivos. Despues si queremos usar este idioma tenemos que ir a /application/config/config.php  y modificar donde en la variable language la modificamos de english a español y nos deberia quedar asi:
$config['language']='español';

lunes, 7 de febrero de 2011

Tutorial Paso a paso: como actualizar codeigniter a la version 2.0.0. (Parte II)

Bueno para continuar la guía de actualización de la versión 1.7.3 a la 2.0 pues tenemos que continuar pasando nuestra configuración de la versión 1.7.3 a la 2.0.

  1. Comenzando con application/config/database.php este archivo no a cambiado mucho, sigue siendo el mismo solo se le a agregado: 
    1. autoinit: que es solo para decirle al sistema si automáticamente inicia o no el manejo de base de datos.
    2. stricton: que sirven para forzar las conexiones a la base de datos en  "Modo estricto”, buenas para usar el SQL estricto cuando se esta desarrollando una aplicación.
  2. application/config/autoload.php esta archivo solo se le agrego solo la posibilidad de auto cargar paquetes, el resto de las opciones siguen iguales, claro tenemos que estar pendientes ya que los plugins fueron eliminados a favor de los helpers y si tenemos plugins en nuestros proyectos debemos migrarlos.
  3. application/config/config.php aquí ah habido algunos cambio, empezando porque ahora la opción de configuración base_url ahora viene vacía por defecto y además automáticamente detecta cual es la ruta.
  4. E tratado hasta ahora los archivos más generales, en el resto de los archivos casi no hubo cambios así que no será difícil de reconfigurarlos por su cuenta.
Ahora bien después de configurar de nuevo nuestra aplicación todavía nos resta nada mas pasar los demás archivos que tuviéramos como hojas de estilo, scripts en javascript, imágenes, etc. a su respectiva carpeta y listo, hemos actualizado Codeigniter a la versión 2.0, es algo súper sencillo pero debemos hacerlo con cuidado porque podemos cambiar cosas que después nos podemos arrepentir, por eso siempre hay que hacer un respaldo por si acaso. Una última acotación si en tu proyecto poseías información encriptada con la antigua versión de codeigniter debes desencriptarla primero para después poder encriptarla con la nueva versión.

domingo, 6 de febrero de 2011

jquery 1.5



En esta nueva versión de jquery 1.5 todos los aspectos de el API an sido que an sido agregados o tienen una nueva signatura agregada. A Jquery 1.5 se le a reescrito todo el modulo de AJAX, y se le an agregado un buena cantidad de utilidades al modulo de AJAX.

Llistado de herramientas actualizadas, principlamente fueron actualizadas las que tienen que ver con AJAX:

  • jQuery.ajax()
  • .clone()
  • jQuery.get()
  • jQuery.getJSON()
  • jQuery.getScript()
  • jQuery.post()

Estas son las herramientas nueva que ahora dispone jQuery:

  • deferred.done()
  • deferred.fail()
  • deferred.isRejected()
  • deferred.isResolved()
  • deferred.reject()
  • deferred.rejectWith()
  • deferred.resolve()
  • deferred.resolveWith()
  • deferred.then()
  • jQuery.parseXML()
  • jQuery.sub()
  • jQuery.when()