lunes, 28 de marzo de 2011

Tutorial: Jquery UI autocomplete y Codeigniter

Después de un buen tiempo sin escribir por exceso de trabajo, vuelvo con el tutorial prometido de como usar jquery UI autocomplete con codeigniter, es muy sencillo. Para comenzar vamos a necesitar tener las librerías de jquery ui que se pueden descargar de la pagina oficial: aqui!, podemos descargar un tema si queremos(yo descargue darkhide) , y por supuesto tener codeigniter.

Paso 1: Preparando el terreno.

Primero tenemos que crear un controlador que yo le voy a llamar autocomplete, una vista con el mismo nombre y una base de datos de usuarios que se van a mostrar.

En el código del controlador debemos por ahora agregar la carga de nuestra vista y la carga de el driver para base de datos y el  uri helper que nos ayudara.

Código de controlador inicial:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Autocomplete extends CI_Controller {
    function __construct()
    {
        parent::__construct();
        $this->load->database();
        $this->load->helper('url');
    }
    public function index()
    {
        $this->load->view('autocomplete');
    }
}

/* End of file welcome.php */
/* Location: ./application/controllers/autocomplete.php */

En el código de vista solo debemos poner el enlace a el css y js de jquery ui, para facilitarnos la vida nos ayudaremos con la función base_uri que nos permitirá darle una ruta absoluta.

Código vista:

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <title>jQuery UI Autocomplete Ejemplo</title>
        <link type="text/css" href="<?php echo base_url(); ?>css/dark-hive/jquery-ui-1.8.10.custom.css" rel="stylesheet" />    
        <script type="text/javascript" src="<?php echo base_url(); ?>js/jquery-1.4.4.min.js"></script>
        <script type="text/javascript" src="<?php echo base_url(); ?>js/jquery-ui-1.8.10.custom.min.js"></script>
        <script type="text/javascript">
        </script>
    </head>
    <body>
    
    </body>
</html>

Y por ultimo crearemos una pequeña Base de datos de usuarios con solo un id y nombre de usuario, así:

CREATE TABLE `autocomplete`.`usuarios` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`user` VARCHAR( 80 ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL
);


INSERT INTO `usuarios` (`id`, `user`) VALUES
(1, 'mariano'),
(2, 'jose'),
(3, 'juan eduardo'),
(4, 'juan pedro'),
(5, 'no se uqe'),
(6, 'no se uqe mas'); 


Lo ultimo de este paso es configurar nuestra base de datos y ya debería cargar una pagina en blanco.

Paso 2: Configurando nuestra vista con autocomplete.

Ahora debemos configurar en la vista el autocomplete, solamente debemos agregar en el cuerpo un input text, y dentro de las etiquetas script la configuracion del autocomplete que va a ser referencia a una función que despues crearemos en nuestro controlador que se llamara ajax. Asi nos debería ir quedando la vista:
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <title>jQuery UI Autocomplete Ejemplo</title>
        <link type="text/css" href="<?php echo base_url(); ?>css/dark-hive/jquery-ui-1.8.10.custom.css" rel="stylesheet" />    
        <script type="text/javascript" src="<?php echo base_url(); ?>js/jquery-1.4.4.min.js"></script>
        <script type="text/javascript" src="<?php echo base_url(); ?>js/jquery-ui-1.8.10.custom.min.js"></script>
        <script type="text/javascript">
        $(document).ready(function(){
            $('#autocomplete').autocomplete({source:'<?php echo site_url('autocomplete/ajax'); ?>'});
        });
        </script>
    </head>
    <body>
    <p><label for='autocomplete'>Nombre de Usuario: </label><input type='text' id='autocomplete'></p>
    </body>
</html>
Paso 3: Empezando con el controlador.(Input Class)

En el controlador debemos crear una función llamada ajax que sera la encargada de enviar en formato json los datos para el autocomplete, para esto vamos a usar el Active Record Class de Codeigniter y el input class.

El codeigniter trae una clase ya echa y precargada para lo que son los input, esta libreria incluye funciones muy utiles:
  1. Pre-procesa todas las variables de entrada por seguridad.
  2. Provee algunas funciones para procesar las variables enviadas y pre-procesarlas.
Esta libreria nos provee una función que se llama $this->input->get(), esta función permite dos parametros el primero es para saber que variable de $_GET requerimos y el segundo establecer el filtrado en true(activado) o false(desactivado). La otra ventaja de esta función es que no nos va a dar error si nuestra variable no fue definida, ya que si la variable no fue definida devuelve un false. en nuestro caso agregariamos lo siguiente al código:
if($buscar=$this->input->get('term'))
{ 
} 
Paso 4: Usando Active Record Class para buscar en la base de datos.

Continuamos con el active record class, esta clase trae funciones para seleccionar, insertar, eliminar y modificar ya predefinidas que nos pueden ahorrar muchas lineas de código ademas de que con estas funciones ya todo va pre-filtrado contra posibles ataques.

lo primero es ver la función basica de select, $query=$this->db->get('usuarios') esta función haria simplemente un "select * from usuarios" y devuelve un objeto en $query. Como queremos buscar dentro de user los usuarios que tengan un nombre parecido a el termino de busqueda, debemos usar la función $this->db->like(), que recibe dos parametros, en uno la columna en la que deseamos buscar y el otro lo que deseamos buscar. Y por ultimo usaremos la funcion $this->db->select(), para poder especificar que columnas queremos y como las queremos: a la final nuestra funcion nos quedaria asi:

        $this->db->select('id, user as value');
        $this->db->like('user', $buscar); 
        $query=$this->db->get('usuarios');

Que generaria algo asi "SELECT `id`, `user` as value FROM (`usuarios`) WHERE user` LIKE '%$buscar%'"

Ahora solo debemos verificar que la respuestasea mayor que 0, pero en ves de usar el clasico mysql_num_rows usaremos $query->num_rows() > 0, y  para listar los resultados en ves de while ($row = mysql_fetch_array($result) ) usaremos foreach ($query->result_array() as $row). y por ultimo usamos la funcion json_encode para pasar nuestro array al formato json.

Condigo de la funcion ajax():
function ajax()
    {
        if($buscar = $this->input->get('term'))
        {
            $this->db->select('id, user as value');
            $this->db->like('user', $buscar); 
            $query=$this->db->get('usuarios');
            if($query->num_rows() > 0)
            {
                foreach ($query->result_array() as $row)
                {
                    $result[]= $row;
                }
            }
            echo json_encode($result);
        }
    } 

Con esto ya queda listo nuestro autocomplete solo queda probarlo.

Nota:
  • Si usan php 5 pueden usar el Method Chaining que les permite hacer los select en una sola linea.
  • Es buena idea limitar el numero de filas que vamos a devolver con agregar $this->db->limit(10); es suficiente.
  • Este metodo devulve el id de el usuario a el autocomplete, podemos agregar al autocomplete el siguiente codigo para usar en algo esa info:

    select: function( event, ui ) {
    alert(ui.item ?
    "Selected: " + ui.item.id :
    "Nothing selected, input was " + this.value );
    }


El resultado final esta en esta dirreccion: http://www.box.net/shared/agnursjr8n

sábado, 12 de marzo de 2011

Mi primer curso de photoshop.

Bueno, hace poco (hoy) termine de hacer un curso de photoshop en un instituto de aqui de venezuela que se llama Benllisoft, dictado por Victor Llanos y el curso de verdad muy bueno. Pues aprendi bastante sobre esta herramienta, ya yo conocia fireworks y no se me hico muy extraño, me encanto el curso y hicimos 5 trabajos que nos quedaron bien cheveres, aunque todavia tengo bastante que mejorar aqui se los muestro:


Primer Dibujo: un carro de Cocacola.

Todo venia por separado, hasta el logo de Coca-cola. pero a la final quedo chevere.

Segundo trabajo: Bulldog.
Tercer Trabajo: Flash


Cuarto Trabajo: Elefante en el ocaso


Quinto trabajo: El dragon maya



No son lo mas arrecho del mundo, pero estoy comenzando.

martes, 1 de marzo de 2011

Tutorial: Jquery UI autocomplete

Hace poco estaba creando un proyecto y cuando estaba usando codeigniter y jquery tuve unos problemas porque al enviar los parametros por get como lo hace autocomplete por defecto pues el sistema no hacia nada y se hiba a la pagina de inicio, pero para mi frustacion esto solo pasaba en el servidor y no en localhost asi que supuse que eran problemas quizas con el apache o algo asi y como andaba frustado porque no me funcionaba, decidi sentarme a revisar a ver si yo podria mandar la info en ves de por GET por POST, cuando busque por internet no conseguí nada de información, asi que me deje de vainas y me sente a arreglar yo mismo mi problema y lo solucione. Ahora quiero compartir esa info con ustedes y pongo este tutorial de como usar autocomplete.



¿Que es jquery UI Autocomplete?


Es un plugin de la librería jquery UI (USER INTERFACE), que nos permite agregar a un input text funcionalidad de mostrar un menú al usuario con las posibles opciones que puede buscar y eligir. de una lista pre-acomodada. Donde esa lista puede venir de un array, de un  xml en nuestro servidor o de un código en php que se conecte a mysql y le muestre lo que nos interesa.


Opciones o parámetros:


  • disabled: Inhabilita o habilita el autocomplete, la opción por default es false.
  • appendTo: Selección en que elemento se va a abrir nuestro menú. el default es body.
  • delay: Sirve para especificar el tiempo que autocomplete va a esperar para activarse.  default: 300.
  • minLength: El tamaño mínimo que debe tener el texto para empesar a buscar.default 1.
  • source: que puede ser un array o una función.



Eventos:


  • Create:  cuando se crea el autocomplete.
  • Search:  cuando se va a realizar una búsqueda.
  • Open:  cuando se abre el menú.
  • Focus: es cuando el foco se mueve a un item de la lista, en este caso seria solo cuando es con el teclado.
  • Select: Cuando se selección un elemento de la lista
  • Close: Cuando la lista es cerrada.
  • Change: Después de que un item es seleccionado.

¿Como se usa Jquery UI Autocomplete?

Primero la opción sencilla, seleccionamos nuestro input text y le especificamos un array como source:

$('#selectbox').autocomplete({source:["codeigniter", "php", "jquery", "javascript"]});


Podemos también crear un variable de tipo array pasársela como source, ejemplo:

var lenguajes = ["codeigniter", "php", "jquery", "javascript"];

$('#selectbox').autocomplete({
source:lenguajes
});


También podemos usar un source remoto como un script php para ello solo vastaria con poner  la dirección del script en el source, y el script deberia responder con las variable en formulada en json:

$('#selectbox').autocomplete({
source:"search.php"
});

En esta pagina conseguirán los ejemplos para cada cosa, si tienen alguna duda me pueden dejar un comentario y yo los ayudo.

http://jqueryui.com/demos/autocomplete/

Ahora bien, ¿como hago para pasar por post los comandos al php?


Pues no es muy complicado para el que no sabe usar $.ajax, debemos primero saber con en el parámetro source podemos usar funciones las funciones deben tener permitir que les pasen dos parámetros: request, response, la variable request almacena lo que el autocomplete esta buscando y response almacena la respuesta.

Ahora bien dentro de esa función vamos a crear una llamada ajax a nuestro script en php,  debemos especificarle la url y el tipo de dato que va a devolver, también usando request.term pasaremos el termino que se desea buscar y después el resultado en json se lo vamos a pasar a la función autocomplete a través de response para que ella cree su lista.

A la final nuestro script debería quedar así:

    $("#selectbox").autocomplete({
        source: function( request, response ) {
                $.ajax({
                    type: "POST",
                    url: "search.php",
                    dataType: "json",
                    data: {
                        term: request.term
                    },
                    success: function( data ) {
                        response(data);
                    }
                });
            }
    });

Cave destacar que mediante este método, también podemos aprovechar las bondades de $.ajax y pasar varios parámetros al script ya que en el opción data de nuestra llamada ajax, podemos especificar varias variables, que era otra cosa que el autocomplete no nos permitia hacer.

Después haré un tuto para juntar esto con codeigniter y mysql, quizás con un poco de active record para que vean como es.

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.