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; :)

sábado, 12 de julio de 2008

Manual de CodeIgniter en español

Hola amig@s, he vuelto!!!

esta vez con buenas noticias, he vuelto para avisarles que el manual de codeIgniter, finalmente se pudo terminar de traducir al español, Gracias Sebastian, Pablo y Viktor, gracias a ellos ya tenemos este manual completamente traducido (obs. aun no se hizo la revision). Y lo que hemos traducido gracias a Viktor que se tomo la molestia de recopilar la info que pusimos y diagramarlo, lo ha pasado a un documento pdf, pueden descargarlo de la página:

http://www.conocimientovirtual.edu.co/soporte/CodeIgniter_Spanish_UserGuide.zip

aunque la version que traducimos creo que es para la version 1.6.1 y la actual es algo como la 1.6.3 no creo que haya demasiadas variaciones.

Próximamente estaré publicando una introduccion a la programación php con algunas diferencias entre php4 y php5, orientación a objetos, conexiones a base de datos, sql, y una interaccion entre ambos... para luego ir dando una introduccion a codeIgniter asi entenderan porque "es mas mejor" jeje (me encanta la frase ;)

Si tienen ganas de comentarme algo no duden en hacerlo, siempre el feedback sera bienvenido :)

hasta luego!!!

sábado, 7 de junio de 2008

Levantando la interfaz wireless de mi notebook

Lamento no haber publicado en tanto tiempo pero como sabran estoy con el proyecto de fin de curso en mi facultad y junto con mi laburo se encargan de consumir todo mi tiempo ;)
Bueno pero vayamos al tema...
Tengo una toshiba a205-s5804 que tiene el chip realtek 8187b

root@darkstar:~# lsusb
Bus 002 Device 002: ID 0bda:8197 Realtek Semiconductor Corp. RTL8187B Wireless Adapter
Bus 002 Device 001: ID 0000:0000
Bus 007 Device 001: ID 0000:0000
Bus 006 Device 001: ID 0000:0000
Bus 005 Device 001: ID 0000:0000
Bus 001 Device 001: ID 0000:0000
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 001: ID 0000:0000
root@darkstar:~#
ese es el resultado de ejecutar el comando 'lsusb', bueno, en teoria uno puede ejecutar el ndiswrapper para mapear drivers que no existen para linux desde los .inf y .sys provenientes del fabricante para el SO Windows. Pero me encontraba con la sorpresa que con este chip no funcionaba, pero vayamos primero a la instalacion del ndiswrapper

yo descargue el ndiswrapper de esta direccion del sitio sourceforge.net
http://sourceforge.net/project/showfiles.php?group_id=93482
luego ejecutamos

root@darkstar:/etc#tar -zxvf ndiswrapper-1.53.tar.gz
luego

root@darkstar:/etc#cd ndiswrapper-1.53
root@darkstar:/etc#make distclean
root@darkstar:/etc# make install

con eso en slackware 12.1 ya tenemos instalado el ndiswrapper
luego descargue el driver del realtek 8187b de su pagina
http://www.realtek.com.tw/downloads/downloadsView.aspx?Langid=1&PNid=1&PFid=1&Level=6&Conn=5&DownTypeID=3&GetDown=false&Downloads=true#RTL8187B

ahora si hacemos
root@darkstar:/Win98#ndiswrapper -i net8187b.inf
se instalara el driver lo que normalmente deberia ser suficiente, pero no en el caso de este driver
donde lo que hice fue agregar la direccion especifica del dispositivo

root@darkstar:/Win98#ndiswrapper -a 0bda:8197 net8197b
asi "forzamos" a que el driver se direccione al id del dispositivo, recordemos que ese id es el que se obtiene al ejecutar el comando
root@darkstar:~# lsusb

hasta ahi recien tenemos instalado el dispositivo
ahora tenemos que hacer que este dispositivo este en funcionamiento, o algo asi,
jeje

cargamos el modulo :
root@darkstar:~#modprob ndiswrapper

Agregamos el ndiswrapper a los modulos que se cargan al inicio
root@darkstar:~#echo 'ndiswrapper' | sudo tee -a /etc/modules

linkeamos el alias 'wlan0' a nuestro ndiswrapper
root@darkstar:ndiswrapper -m

luego de esto reinicie la pc, y al hacer el
root@darkstar:~#iwconfig
aun no veia mi interface, entonces recorde un comando que habia probado antes
que esta en la carpeta /etc/rc.d/
root@darkstar:/etc/rc.d#./rc.inet1 wlan0_start
'ANY EESID' o algo asi salio el resultado
pero al ejecutar el iwconfig
ya aparecia mi eth0
el lp0
y mi wlan0 :)
por fin no? pero al probar un ping a google, aun no conseguia lo que necesitaba
entonces segui probando algunas cosas
entre ellas jugar con el ruteo, a proposito, no se como eliminar una ruta dada... osea la sintaxis especifica, en fin ese no es el tema


root@darkstar:~#ifconfig wlan0 192.168.1.154 netmask 255.255.255.0
probe unos pings a unas ip validas de por ahi y me funcionaba, pero al hacer
root@darkstar:~#ping www.google.com
no me daba el ping... eso quiere decir que el dns no estaba configurado
entonces al archivo
/etc/resolv.conf
y le agregue la siguiente linea
nameserver 192.168.1.254
la direccion ip que esta ahi, es la del router wireless que tengo, que como es un servidor dhcp en teoria tambien es servidor dns...

y listo, guarde y ya funcionaba todo, y desde esta computadora con mi querido linux slackware y mi navegador favorito, 'mozilla firefox', es que estoy escribiendo este post
aprovechando que hay muchnisima gente con el mismo problema, pero este credito no es mio basicamente lo que hice fue traducir lo que encontre en las siguientes urls, asi que siquiren ver mi bibliografia asi no se pierden ningun paso :)
http://tiagoboldt.net/blog/toshiba-l40-ndiswrapper-realtek-8187/
http://linuxespanol.com/ftopic231.php


Bueno, me despido hasta un proximo post :) saludos amigos!