Mis estimados amigos, bienvenidos a esta primera parte de como usar el framework para PHP: CodeIgniter. En esta primera parte veremos cómo configurar CI y cómo usar su sistema de views, ademas de intentar conseguir una novia para Pley();.
CI es un framework orientado a objetos, aplicando el patrón de diseño Modelo Vista Controlador. Voy a dar como supuesto que todos manejan medianamente bien php y que, al igual que yo, jamas en su vida habían usado un framework. Empecemos descargando codeignaiter. Descomprimanlo y subanlo a su hosting favorito (localhost). Renombren la carpeta con el nombre del proyecto que en este caso y en honor a "Pley();" se llamara "quiero-novia" el cual sera un catalogo para una florería.
Tenemos la carpeta user_guide, system e index.php. La guía es la misma que se encuentra en su sitio oficial. El index es el mismo que se usara en este proyecto y en system está todo lo que hará funcionar el sistema, por tanto solo nos interesan los 2 últimos.
Por ultimo, creen una base de datos para el proyecto en MySQL llamada "garageflash".
Ya todo esto listo, ¡manos a la obra! la carpeta en la cual programaremos nuestra aplicación es justamente application, alojada en la carpeta system.

Empezaremos editando los archivos de configuración que necesitaremos para empezar a programar
database.php
Editaremos los datos para la conexión a nuestra DB favorita: garageflash en MySQL.
Código :
$db['default']['hostname'] = "localhost"; $db['default']['username'] = "garageflash"; $db['default']['password'] = "clab"; $db['default']['database'] = "garageflash"; $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";
No me detendré a explicar que significa cada variable, por que el nombre de cada una de ellas es muy descriptivo.
config.php
Designa la ruta en la que se encuentra alojada nuestra web entre otros datos
Código :
$config['base_url'] = 'http://127.0.0.1/quiero-novia'; $config['index_page'] = 'index.php'; $config['uri_protocol'] = 'AUTO'; $config['url_suffix'] = ''; $config['language'] = 'spanish'; $config['charset'] = 'UTF-8';
Cuidado con la ruta que vayan a poner en $config['base_url'], si quieres salir a internet debiese ser tu IP publica o DNS.
routes.php
Código :
$route['default_controller'] = 'floreria'; $route['scaffolding_trigger'] = "";
Acá nos detendremos en 2 detalles importantes
- El 'default_controller' se refiere a el controlador o pagina principal **cof cof clase cof cof ** en la cual programaremos nuestra aplicación, mas adelante ahondaremos en esto.
- 'scafolding_trigger' sirve para usar los mentados scafolding (administración pre-fabricada), pero como no me gusta usarlos por fundadas razones dejaremos esta opción en blanco ¿razones?:
- No se me da la gana.
- Son muy estáticas, difíciles de adaptar.
- Inseguras, dentro de el apartado adaptar me referías integrarlas a un sistema de usuarios.
- En el video tutorial (en ingles) muestran como usarlas, pero como a mi no me gustan.
Empezando a programar el proyecto
Recordarás que a 'default_controller' le asignamos 'floreria'. Así se llamara nuestra clase. Creamos el archivo 'floreria.php' en la carpeta
system/aplication/controllers, en el cual crearemos nuestra clase que obviamente heredara de la clase controladores.
Código :
class Floreria extends Controller {
function Floreria ()
{
parent::Controller();
}
function index()
{
$this->load->view('floreria');
}
}Dentro de esta clase está la función que siempre se llamara index. En esta clase pondremos todo lo que queremos que se muestre en la primera pantalla de nuestra clase. Si eres buen observador te darás cuenta que se esta llamando a la clase view, que es la que usaremos para manejar nuestros templates. Como primer paso, escribiremos el titulo y encabezado en nuestro template. Este código debe ir en un archivo nuevo en: system/aplication/views/floreria.php. Ese será nuestro template:
Código :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es"> <head> <title>Quiero Novia</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <h1>Flores Para Conseguir Novia</h1> </body> </html>
Grabamos y vemos el resultado en nuestro navegador.
Ahora nos toca enviar variables a nuestro template, para esto modificaremos nuestro template del siguiente modo:
Código :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es"> <head> <title><?php echo $titulo ?></title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <h1><?php echo $encabezado ?></h1> </body> </html>
Y luego modificaremos nuestra función index() del siguiente modo para poder enviarle las variables requeridas:
Código :
class Floreria extends Controller {
function Floreria ()
{
parent::Controller();
}
function index()
{
$datos['titulo']='Quiero Novia';
$datos['encabezado']='Una Novia para Pley';
$this->load->view('floreria',$datos);
}
}A la función view, además del nombre del template, le entregamos un array donde sus vectores serán las variables que se usaran en dicho template. Mira el resultado en el navegador.
Para en un futuro aplicarle formato a esta cosa y mantener la misma estructura en todo el sitio, separaremos el template en 3 partes:
header
Código :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es"> <head> <title><?php echo $titulo ?></title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body>
contenido (en este caso floreria)
Código :
<h1><?php echo $encabezado ?></h1>
foot
Código :
</body> </html>
Ahora nuestra función index() de la clase florería quedaría así:
Código :
function index()
{
$datos['titulo']='Quiero Novia';
$datos['encabezado']='Una Novia para Pley';
$this->load->view('header',$datos);
$this->load->view('floreria',$datos);
$this->load->view('foot);
}Ahora subiremos datos a nuestro sistema, para lo cual crearemos una segunda clase llamada 'admin' en la cual administraremos el sistema. En este paso voy a obviar el infaltable sistema de usuarios, para el cual pueden seguir esta serie de tutoriales que trata a profundidad el tema.
Continuará.

drarock :
yo creo que es mejor darlo por capitulos y como soy yo quien escribe PTJ
los comentarios clabers suelen ser muy enriquecedores, y los tutos no tienen comentarios
mmm creo que deberian permitir comentarios a los tutos O.o
De todas formas es un capitulo interesante. Bien ahí.
Por siddharta el 09 de Diciembre de 2008
inyaka sucks -200
Por siddharta el 09 de Diciembre de 2008
no entendi
drarock. En parte tienes razón, es posible que estas cosas vayan mejor en un tutorial o un curso (aunque eso realmente dependerá de hasta dónde quiera llegar Inyaka con los artículos), pero él está en su derecho de publicarlo como tip (seguramente porque no quiere entrar en la interminable cola de tutoriales pendientes de revisión); si se considera que debería ser un tuto, ya F se encargará de publicarlo como tal (como le pasó a elichinet). En cualquier caso, tu observación es apreciada.
Parece que éste va a ser otro de esos experimentos de tips concatenados, esperaré ansioso el segundo, a ver si me animo con el CI.
The Fricky! :
Como sea el esta en su derecho de publicarlos como quiera, siempre y cuando lo haga rápido!
Por argonauta el 11 de Diciembre de 2008
*Pero con un tutorial hubieras tenido más clablevel
Otaku RzO :
Por panchokira el 12 de Diciembre de 2008
Por CarlosN el 14 de Diciembre de 2008
Por Marco Antonio Solis el 07 de Enero de 2009
marcoasoliscruz@gmail.com
Por Disculpa mi ignoranc el 22 de Febrero de 2009
Lo unico que encontré en el panel de control plesk de mi domonio fue una opcion que dice crear base de datos y me deja crearla, pero solo me pone el nombre y ya se autocrea...
Pero me conecto por FTP y no se donde quedan guardadas las bases de datos... me pueden asesorar en ese aspecto?
Por avali2 el 15 de Abril de 2009
Por Zull el 17 de Abril de 2009
Por Nando el 20 de Abril de 2009
Gracias
¡pero por amor lo mas sagrado olvida esa absurda idea! :sock: ¡usar frames en pleno año 2008 !
Por _programing el 25 de Agosto de 2009
class Control extends Controller
{
function index()
{
//sin nada
}
function f1
{
//algun codigo
}
function f2
{
}
}
Por _programing el 25 de Agosto de 2009
class Control extends Controller
{
function index()
{
//sin nada
}
function f1
{
//algun codigo
}
function f2
{
//desde aqui quiero llamar a (f1);
}
}
Muchas Gracias...
_programing-blog :
Código :
class Control extends Controller { function index() { //sin nada } function f1 { //algun codigo } function f2 { //desde aqui quiero llamar a (f1); } }Muchas Gracias...
Código :
class miClase{ function familia(){ echo $this->papa(); echo $this->mama(); } function papa(){ return "Enrique"; } function mama(){ return "Candelaria"; } }Por Miguel Quiroz el 19 de Septiembre de 2009
Muy bueno TuTO, Gracias por recomendarmelo soy nuevo con esto de framework, esta muy bueno y bastante simple la explicacion.. espero que publique otros TIPS de este tema.
Por makers el 30 de Octubre de 2009
Por teetet el 11 de Noviembre de 2009
Por Cristian el 20 de Marzo de 2010
Por lo menos el tutorial esta re-simple
Gracias !!
Por Luciano el 27 de Mayo de 2010
Una pregunta, hay alguna forma que antes de procesar el controller ejecute una funcion (ej check_login() ) en un helper o similar. Sin tener que agregarla en todos los controllers?
Saludos
Luciano-blog :
Una pregunta, hay alguna forma que antes de procesar el controller ejecute una funcion (ej check_login() ) en un helper o similar. Sin tener que agregarla en todos los controllers?
Saludos
si, lee en la documentación sobre hooks
es un buen tema para un tuto rapido
Por xAnubiSx el 28 de Mayo de 2010
Gracias por el aporte.
Por Ing. Omar Carmona el 26 de Enero de 2011
Por lopezalvarado el 17 de Febrero de 2011
una consulta con este frame puedo conectarme a una base de datos sql server 2005 o 2008 ya que estas bases han cambiado su metodologia de coneccion con nuevas funciones sqlsrv_connect por ejemplo.
espero tu respuesta gracias
Por jacr1102 el 21 de Febrero de 2011
Por codeignitersolutions el 28 de Marzo de 2011
Por fvchapa el 21 de Abril de 2011
Por MarK el 23 de Abril de 2011
class MiControlador extends Controller
{
function LLamarOtroControlar
{
//Codigo que llama una funcion de otro controlador
}
}
Como seria ese codigo? es posible llamar una funcion de un controlador en otro controlador?
Muchas gracias.
Por fmatamala.cl el 09 de Diciembre de 2011