lunes, 11 de agosto de 2008

Usando CodeIgniter

Bueno, lo prometido es deuda como dirian, me he decidido y ahora quiero ofrecerles un mini tutorial de como usar el codeigniter a un nivel bien basico para que puedan empezar si es que nunca lo han hecho antes con este u otro framework.

ok, lo primero que necesitan conocer medianamente es la estructura de archivos y directorios del framework para que sepan donde poner cada cosa.

cuando descarguen el framework de www.codeigniter.com tendran algo similar a esto:
system
|- application
|-cache
|-codeigniter
|-database
|-fonts
|-helpers
|-language
|-libraries
|-logs
|-plugins
|-scaffolding
user_guide
index.php
license.txt

archivos mas o menos eso deberia ser asi...
ok la carpeta que nos interesa es la que dice system y dentro de esa, la que dice application y dentro de esta carpeta, las carpetas que se llaman
config, controller, model, view

dentro de la carpeta config nos interesan los archivos
autoload.php
config.php
database.php y
routes.php

el primer archivo tiene la configuracion de lo que por defecto se cargara cada vez que se invoque al sitio, por ejemplo la conexion a la base de datos, las funciones de session, y cosas por el estilo, esto es lo que ayuda a que el framework pueda decirse que es liviano, ya que se carga solo con lo que consideremos necesario

el archivo config tiene algunas configuraciones como por ejemplo el

$config['base_url'] = "http://127.0.0.1/new/";
?>

que dice que la raiz de nuestro sitio es esa direccion que aparece en el lado derecho de la expresion de asignacion

otras configuraciones como el

$config['index_page'] = "index.php";
?>


que le dice cual es la pagina index y si usamos el mod rewrite que provee apache y usamos la siguiente regla en nuestro .htacces ( un archivo de configuracion que mediante unas expresiones regulares establece que todo se redirige al index y este se encargara de tomar el rumbo adecuado)

a continuacion les copio el contenido de mi .htaccess para que puedan usar las url amigables y asi no tengan que usar el index.php

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

ahora pasamos al siguiente archivo que es database.php que es el archivo de configuraciones de la base de datos
en el encontraran el siguiente codigo:
<?php
$active_group = "default";
$active_record = TRUE;

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "";
$db['default']['password'] = "";
$db['default']['database'] = "";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";
?>


donde lo importante realmente es el que dice hostname, username, password y database, ahh y el dbdriver, que normalmente solemos compleatar de la siguiente forma:
donde dice hostname, suele ser con "localhost", donde dice username password y database son datos que uds deben manejar, y el dbdriver puede ser mssql, mysql, mysqli, postgre
esta es una de las ventajas del codeigniter, la variedad de controladores de base de datos que tiene, por dentro nosotros programamos en una forma digamos estandar y si tenemos que cambiar de mysql a postgre por ej, solo cambiamos el nombre del driver y no nos complicamos tanto modificando nuestro codigo (claro, si es que no usamos sentencias propias de mysql u otro en nuestras consultas) pero en gral es asi.

y por ultimo en este directorio nos interesa routes.php
que es el archivo en el que definimos las rutas de nuestro sitio...
tendremos en cuenta dos cosas principales en este archivo una, cual va a ser el controlador principal de nuestro sitio, esto es, que controlador se llamara cuando ingresemos a la raiz del sitio, cuando nuestra instalacion es nueva encontramos lo siguiente:
$route['default_controller'] = "welcome";

donde welcome es el nombre del controlador/archivo que se encuentra en nuestra carpeta controller, lo cambiamos por el controlador que nosotros desarrollemos y nos interesa que sea el principal, otra forma de acceder a este controlador seria
http://www.nuestrositio.com/index.php/controlador_por_defecto o sencillamente
http://www.nuestrositio.com/controlador_por_defecto en el caso de que poseamos url amigables con la ayuda del .htaccess

continuemos, ahora nos vamos a la carpeta controller; como les decia aqui vamos a poner los archivos y/o carpetas que nos interesan funcionen como index, y a que me refiero al usar esa frase (que tal vez este mal dicha) imaginense que quieren tener algo asi:
http://www.tusitio.com/blog
o
http://www.tusitio.com/administracion/login

en el primer caso, blog seria nuestro controlador, en el segundo podriamos tener una carpeta administracion y un archivo controlador dentro que se llame login.php

de esa forma se puede determinar a donde queremos ir y que acciones queremos ejecutar

la estructura del archivo controller es asi:

class Micontrolador extends Controller
{
function Micontrolador()
{
parent::Controller();
}
function index()
{
$this->load->model('mi_modelo');

//tambien podemos cargar alguna vista
$this->load->view('bienvenida');
}

funciton miPrimeraFuncion()
{
echo "estamos en nuestra primera funcion";
}
}
?>

ok, fijense en los siguientes detalles, la clase debe llamarse exactamente de la misma forma que el archivo pero la primera letra debe ser mayuscula, (los programadores de java encontraran esto bastante similar)
segundo en la clase constructora siempre se llama al constructor de la clase padre
el metodo llamado index es el metodo que se ejecuta por defecto si no se especifica ninguno cuando se llama al controlador.

la estructura del modelo es similar tambien

class Mimodelo extends Model()
{

function Mimodelo()
{
parent::Model();
}
function misMetodos($parametros)
{
//aqui van los codigos, consultas sql, etc
}
}
?>


y las vistas son archivos php como normalmente lo harian solo que con algunas ventajas mas
por ejemplo, si en nuestro controlador definimos un arreglo de la siguiente forma


$data["valorDeResultado"] = $this->miModelo->dameResultados();
y llamamos a la vista, pasandole el arreglo como parametro
$this->load->view('algunaVista',$data);



y en nuestro archivo de vista
podemos acceder a ese "valor de resultado"como una variable local del archivo
de la siguiente forma:


echo $valorDeResultado; ?>


y otras ventajas como de que se pueden llamar a otras vistas desde la misma vista.

ahora algunas cosas mas antes de ir terminando.

si en el autoload no definimos que se cargue la libreria de base de datos, lo hacemos asi

$this->load->library('database');
?>

y podemos hacer consultas sql
$query = $this->db->query("select * from tabla");

donde $query sera un objeto que es resultado de la consulta de base de datos
para consultar el numero de filas hariamos

$query->num_rows();
?>



y podemos recuperar los resultados de la base datos "como objetos" esto quiere decir que podemos hacer esto:


foreach($query->result() as $row):
echo $row->columna1;
echo $row->columna2;
endforeach;
?>



si quisieramos recuperar como arreglos (como tradicionamente lo hariamos) en vez de ejecutar el metodo result() ejecutamos el metodo result_array(), y si quiesieramos recuperar solamente una fila hariamos row()

bueno eso es todo por ahora...
saludos y si les gusto, no olviden dejar algun comentario y si cometi algun error por favor no duden en hacermelo conocer para corregirlo inmediatamente; :)