Les platico, tuve que hacer esto en mi archivo routes.php debido a que por recomendaciones SEO en unos ejemplos que leí de canonical URL.
Sé que es un parámetro entretenido que puede resultarnos útil para subir el ranking de la página, incrementar los resultados orgánicos y
mejorar todas esas cosas que generan monedas.
La cosa es que un cuate de aquí de la oficina estaba implantando el botón tipo “like” de facebook pero provisto por el mismísimo google.
En la documentación del botoncito, el compa encontró que ese botón tiende a buscar-usar el canonical url para asociar la página a la que se le dio LIKE.
La intención de modificar el archivo routes.php de codeigniter es precisamente para que tanto los usuarios como los crawlers puedan encontrar con el canonicalurl
una respuesta bonita (en este caso, la sección de la marca que está buscándose).
Por ejemplo, si un usuario escribía www.intruder.mx/sangoma, el router class de CI le indicaba que al no aparecer como un archivo dentro de la carpeta (y subcarpetas)
de controladores no existía y devolvía un error 404. La modificación es ésta y está pensada para que a las rutas (arreglo $routes)
del CI se le añadan las cosas que necesitamos dirigir a un controlador específico.


// conectándome a la base de datos
// DATABASE_HOST, DATABASE_USER, DATABASE_PASS son constantes definidas en mi archivo constants.php
$db_shop = mysql_connect(DATABASE_HOST, DATABASE_USER, DATABASE_PASS);

//Cheando que 'aiga' conexión.
if (! $db_shop)
{
	show_error(503, "routes.php: No se pudo conectar a la base de datos: ".mysql_error(), 'error_db');
	log_message('error', "routes.php: No se pudo conectar a la base de datos: ".mysql_error());
}

//Seleccionando la BD que se usa.
mysql_select_db('base_de_datos');
$getInformacion = "SELECT * FROM tabla WHERE campo_condicion = 1;"; // checando las marcas activas
$fuenteDatos = mysql_query($getInformacion); // consultándolo en la base

//Si se fue a la merga la conexión, pues a la merga el usuario
if (!$fuenteDatos)
{
	show_error(503, 'routes.php: Consulta no válida: ' . mysql_error() . "La consulta es:
{$getInformacion}

", 'error_db');
mysql_free_result($fuenteDatos);
}
else{ // Si hay conexión y todo está chingón, vamos a iterar la respuesta de la base.
$route = array();
// iterando el recordset
while($datos = mysql_fetch_assoc($fuenteDatos))
{
// Solo si no tienes esa ruta para la marca entras, sino... bríncate
if ( ! array_key_exists("{$datos['id_o_texto']}/(:any)" , $route) )
{
$route["{$datos['id_o_texto']}"] = "controlador/metodo/{$datos['id_o_texto']}/";
}
}
mysql_free_result($fuenteDatos);
}
//cerrando la conexión con la bd porque luego hay weyes que no hacen esto y su estúpido mysql se ataranta hermoso
mysql_close($db_shop);
// a la chingada las basuras
unset($db_shop);
unset($getInformacion);
unset($fuenteDatos);
unset($marcas);

// ¿cómo queda el routes? :
ob_start();
print_r($route);
$dump = ob_get_contents();
ob_clean();
log_message('debug', "routes.php array.route {$dump}");

SociBook del.icio.us Digg Facebook Google Yahoo Buzz StumbleUpon
 

Para entenderle sí van a tener que saber de PHP.

En varias ocasiones me he visto forzado a guardar en un campo de la base de datos un string así “1,2,3,4,5″, generalmente cada número representa un ID que concierne a una llave foránea. Precisamente porque soy holgazán, me di a la tarea de idear una función que me permitiera crear una cadena SQL válida con tantos OR como números (incluso palabras) separados por comas tenga el campo.

Esta función nace del siguiente caso práctico… tengo una tabla llamada campaña, la cual almacena cierta información, a cada campaña se le pueden asignar “N” cantidad de agentes, ergo hice un listado de agentes que (mediante ajax) se asignan a la campaña en dicho campo con el formato “1,2,3,4,5,6″, cada número significa el id del registro del agente. Para continuar, al consultar la campaña debía extraer el nombre de cada uno de los agentes para listarlos como “asignados” a “x” campaña…

La finalidad es escribir menos y hacer más.

 


	//Este convierte un '1,2,3' en un (campo = {1} OR campo = {2} OR campo = {3})
	function or_sql_cadena ( $parametros = null )
	{
		//el resultado siempre lo declaro al principio y como vacío para que si se cuelan... se lleven un '';
		$result = '';
		//Haciendo que el que llama esta funcíón sepa que debe mandar una rreglo como parámetro.
		if( is_array($parametros) )
		{
			//Variables para todo el flujo de la función.
			$campo_comparacion = '';
			$arr_temporal = array();
			$result_and = '';
			$result_or = '';

			if(array_key_exists('campo_comparacion', $parametros)) // que sí venga el parámetro
			{
				if(!empty($parametros['campo_comparacion'])) //Que el parámetro no sea vacío
				{
					$campo_comparacion = $parametros['campo_comparacion'];
				}
			}

			if(array_key_exists('cadena_texto', $parametros)) // que el parámetro sí venga
			{
				if( !empty($parametros['cadena_texto']) ) //que el paraámetro no sea vacío
				{
					$arr_temporal = explode(',', $parametros['cadena_texto']);
				}
			}
			//Si trae datos el arreglo, etonces continua
			if(count($arr_temporal)>=1)
			{
				//Armando la cadena SQL empezando con el AND
				$result_and .=  ' AND (';
				//por cada posición del arreglo temporal haz:
				foreach($arr_temporal as $idx => $campo_id)
				{
					//si ya trae algo la cadena, entonces métele un OR
					if ($result_or != '') { $result_or .= ' OR '; }
					//aquí hago que el query haga la comparación entre datos con el campo (casi siempre llave foránea) que se va a comparar
					$result_or .= " {$campo_comparacion} = {$campo_id}";
				}
				//concateno lo que armó el for
				$result_and .= $result_or;
				//cierro la condición
				$result_and .= ')';
			}
			//Si hubo incidencias en el for, entonces haz:
			if ($result_or != '')
			{
				//Si el query tiene AND
				if ($result_and != '')
				{
					//regresas la cadena al resultado
					$result = $result_and;
				}
			}

		}
		//regresa la cadena al resultado
		return $result;
	}

La manera en que se invoca dicha función es ésta:


//obtener todos los datos de la campaña
$sql_get_campana = "SELECT * FROM campana cmp WHERE cmp.cmp_id = {$db_indial->escape($campana_id)} AND cmp.cmp_estatus =  {$db_indial->escape(CAMPANA_ACTIVO)}  LIMIT 1; ';
$registro_campana = $db_indial->query($sql_get_campana)->num_rows() == 1 ? $db_indial->query($sql_get_campana)->row() : false;

//obtener todos los datos de los agentes
$agentes_asignados_cadena = (count($registro_campana)>=1) ? $registro_campana->cmp_agentes : ''; // asigno el valor del campo

//por si no trae ningún agente:
$registros_agentes = '';
$sql_get_agentes_or = '';
if(!empty($agentes_asignados_cadena)) // Cuando traigo un dato, entonces preparo la consulta SQL para que haga el OR
{
	$param_or_sql['cadena_texto'] = $agentes_asignados_cadena;
	$param_or_sql['campo_comparacion'] = 'agn.agn_id';
	$sql_get_agentes_or = $this->indial_utilerias->or_sql_cadena($param_or_sql);
	$sql_get_lista_agentes = "SELECT * FROM agente agn WHERE agn.agn_estatus = {AGENTE_ACTIVO}  {$sql_get_agentes_or}  AND agn.agn_enllamada = 0 ";
	$sql_get_lista_agentes .= " AND agn.agn_estatusoperativo IN (SELECT cat_id FROM catalogo WHERE sec_id = {$db_indial->escape(ESTATUS_PANEL_AGENTE)} AND cat_valor0 = UPPER('SI')) ";
	$sql_get_lista_agentes .= "ORDER BY agn_id ASC; ";
	$registros_agentes = $db_indial->query($sql_get_lista_agentes)->num_rows() >= 1 ? $db_indial->query($sql_get_lista_agentes)->result() : false;
} 

//Happy coding.
SociBook del.icio.us Digg Facebook Google Yahoo Buzz StumbleUpon
 

Ya tenía rato sin postear y qué mejor que retomar el posting en el blog con la siguiente noticia, que para mi es importante:

En este preciso momento se está haciendo la demostración del software que he estado programando desde Octubre pasado, estoy muy nervioso, se que funcionará bien, pero no todo está terminado, como sea, son solamente detalles. En este desarrollo aprendí mucho más de lo que ya sabaía acerca de codeigniter, estandarización de código, normalización de base de datos, prototype js, scriptaculous, validation js, postgres y como olvidarme de las hermosas CSSs que tanto odiaba antes.

Me siento complacido por que un niño más está a punto de nacer, ya solo falta que lleguen los que fueron a hacer la demostración para felicitarme ó para darme mi ticket de “pase por su liquidación a la ventanilla 2″ (risas).

Espero que el esfuerzo no haya sido en vano y todo funcione correctamente, existen algunos bugsitos que quedaron pendientes, pero por la premura y todo ya no alcance a commitearlos para que los treparan al server en el que se va a hacer la prueba.

En ocasiones como estas me siento eufórico y preocupado, y en verdad sí es como cuando estas viendo como operan a tu esposa para sacarle a tu hijo. Es una experiencia que me gusta mucho, afortunadamente ahora solo podré parir soft-hijos (hijos de software).

Quiero agradecer a todas las personas que me hicieron aprender lo que ahora se. Lo dificil es el comienzo, pero una vez encarrerado el ratón, chíngue su madre el gato;  las ansias me comen por saber ¿qué está pasando en el salón donde se hace la demostración?. Me gustaría haber ido, pero seguramente me habría pedorreado nomás de los purititos nervios.

Bueno, espero que pronto venga la gente y me digan ¿cómo les fué?.

SociBook del.icio.us Digg Facebook Google Yahoo Buzz StumbleUpon
 

La semana pasada puse un artículo donde explícaba mi propuesta para el envío de parametros entre modelos y controladores del framework de codeigniter; ahora se me ocurrió la fabulantástica idea de hacer lo mismo, pero esta vez de la vista al controlador. Actualmente uso prototypejs para el manejo de operaciones/acciones con ajax y para los efectillos uso scriptaculous. El caso es que dejaré un ejemplo muy sencillo de como hacer esto, tanto de la vista y el script de JS así como el controlador y obviamente con el ejemplo anterior de pasar parametros como un arreglo al modelo

//MODELO
/*
*Este es el ejemplo de como el MODELO recibe parametros desde el
*controlador mediante un arreglo descriptivo
*/
<php if (!defined("BASEPATH")) { exit("No direct access allowed");}
class Getusuarios extends Model {

  function __construct(){
    parent::Model();
  } 

  function details($parametros = NULL){
    //Checo que el arreglo de parametros contenga datos
    if (is_array($parametros)){
      //Creo la sentencia SQL para extraer los datos
      $sqlUsuariosDetalle = ' SELECT * ';
      $sqlUsuariosDetalle .= ' FROM Users ';
      $sqlUsuariosDetalle .= ' WHERE uid = ? ';
      $sqlUsuariosDetalle .= ' AND dep = ? ';
      //ejecuto el query a la base de datos pasandole el arreglo que
      //viene del controlador
      $rs = $this->db->query($sqlUsuariosDetalle, $parametros);
      //checo que contenga datos
      if ($rs->num_rows() > 0){
        //en caso de que contenga datos regreso el resultado
        $result = $rs->result();
        return $result;
      //no hay datos, no regreso nada.
      } else { return FALSE; }
    //si no hay parametros, no hay consulta
    } else { return FALSE; }

  }

  function list () {
    //creo la sentencia sql para obtener los datos
    $sqlListaUsuarios = ' SELECT uid, name ';
    $sqlListaUsuarios .= ' FROM Users ';
    $sqlListaUsuarios .= ' WHERE gid >= 12 ';
    //ejecuto el query en la base de datos.
    $rs = $this->db->query($sqlListaUsuarios);
    //checo que traiga datos
    if ($rs->num_rows() > 0){
      //De tener algo, regreso el resultado
      return $rs->result();
    //Si no hay datos, regreso falso
    } else { return FALSE; }

  }
}
?>

Ahora veamos como se aplícan ambos ejemplos en el controlador, tanto para recibir parametros desde la vista con JS mandados con prototype y a su vez como manda los parametros al modelo por medio del arreglo.

//Controlador
<php if (!defined("BASEPATH")) { exit("No direct access allowed");}
class Usuarios extends Controller {

  function __construct(){
    parent::Controller();
    $this->load->model('getusuarios');
  }

  function detalles(){

    //convierto lo que viene de la cadena en un arreglo.
    $param = explode(',',$this->input->post('params'));

    if ($param[0] > -1 ) {

      $dep = $param[1]!=5?$param[1]:-1;

      $dao_params['id'] = $param[0];
      $dao_params['dep'] = $param[1];
      //envío el arreglo de parametros al modelo.
      $recordset = $this->getusuarios->details($dao_params);

      if (count($recordset) > 0) { $data['registros'] = $recordset; } else { $data['registros'] = NULL; }

      $this->load->view('user_details',$data);

    } else { $this->usuarios(); }

  }

  function lista(){

    $recordset = $this->getdepartamentos->list();

    if (count($recordset) > 0) {

      $datos = array('-1'=>"Seleccione");

      foreach($recordset as $rs){ $datos[$rs->id] = $datos[$rs->nombre_dep]; }
      $data['lista_departamentos'] = $datos;

    } else { $data['lista_departamentos'] = NULL; }

    $this->load->view('users_list',$data);
  }
}
?>
//VISTA







Próximamente me pondré a jugar con JSON para poner ejemplos, espero les ayude y les guste el post, por favor no olviden dejar su comentario.
Saludos.

SociBook del.icio.us Digg Facebook Google Yahoo Buzz StumbleUpon
 

He estado pensando acerca de unas cuantas cosas que he hecho en PHP con CodeIgniter, me dí cuenta que sí en una función de PHP recibes 1 solo parametro entre controladores y modelos te ahorras unos cuantos teclazos….

Ejemplo de caso habitual de paso de parametros entre controlador y modelo:

****Controlador*****

<?php if (! defined('BASEPATH') ) { exit ('No direct script access allowed'); end();}
class Proove extends Controller{
  function __construct(){
	parent::Controller();
	$this->load->model('proove');
  }

  function index () {$this->proove();}

  function proove ($param1, $param2, $param3 = '', $param4 = -1){
	if (empty ($param3) ) {$param3 = 'GUEST';}
	//doing amazing stuff and stunts with this params
	$var = $this->proove->get_users($param1, $param2, $param3);
	if ($var) {
	  $data['records'] = $var;
	  $this->load->view('index.php',$data);
	}
  }
}

?>

****Controlador*****

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

class Proove extends Model{

  function __construct (){
	parent::Model();
  }

  function get_users ($param1, $param2, $param3){
	$sql = 'SELECT * ';
	$sql .= ' FROM users ';
	$sql .= ' WHERE type = \''.$param1.'\'';
	$sql .= ' AND kind = \''.$param2.'\'';
	$sql .= ' AND domain = \''.$param3.'\'';
	$rsproove = $this->db->query($sql);

	if ($rsproove->num_rows()){
	  return $rsproove->result();
	} else {
	  return FALSE;
	}
  }
}

?>

Okay, continuemos… PHP te permite el uso de arreglos asociativos por lo cual podríamos usar esto para el paso de parametros a las funciones que sean necesarios. Lidiar con arreglos es muchas veces enfadoso, más sí no son asociativos, por que la iteración con bucles se vuelve pesada y más sí eres principiante como Yo y no sabes como accesar bien al índice que necesitas; en cambio con un arreglo asociativo (qué para mi gusto son como un hash de perl) puedes dirigirte perfectamente al índice que quieres del arreglo con el que estas trabajando…

La idea es principalmente usar los arreglos asociativos como parametro único, de esta manera podrías solo preocuparte por saber el nombre del índice que esperas y no por n parametros y validarlos todos.

Tengamos en mente el siguiente escenario de programación. Estás usando CodeIgniter (aplicación demo sin la aplicación de esta idea aquí)

Estas haciendo una clase que tiene varios metodos, uno de ellos necesita una serie de parametros muy específicos donde todos esos parametros son requeridos; haces tu validación con JS ó con algun framework, hasta aquí todo bien, te aseguras de que los parámetros llegan perfecto al método de la clase que quieres y haces de nuevo una validación para evitar “que te metan gol”. Una vez hecho eso, entonces comienzas a escribir chingomil (muchas) líneas de código con las que harás cosas impresionantes en tu aplicación. Bueno, imagina que tiempo después de que tu aplicación ha sido liberada alguien se encuentra TAMPER DATA en los agregados de FIREFOX y lo instala en su máquina *no estoy suponiendo que alguien va a hackearte, sino que un individuo curioso con el mínimo grado de conocimientos informáticos, decide probar lo que ha leído en un manualito de 20 minutos por que tiene tiempo libre*. Entonces comienza el juego, el píca un botón y le pregunta sí quiere modificar los parametros enviados, acepta la petición y pum a menear todo. Bueno, ahí tienes que tus validaciones con JavaScript han sido fácilmente burladas. Luego ¿qué sige?, fácil, tu controlador responderá de acuerdo a como ha sido creado, tomará los parametros y jugará con ellos, lo dificil del caso es cuando expones el borrado de usuarios de una tabla ó la alteración de los mismos, ya que puedes caer fácilmente en un SQL Injection Attack o algo por el estilo.

Veámos, aquí va el truco, como no puedes impedir que el usuario sea metiche y juegue con tu trabajo, entonces lo que sigue es ir un paso adelante; puesto que la mayoría de ataques exitosos de cualquier tipo a casi cualquier tipo de sitio son debido a un error humano, pués haremos esto más divertido, tanto para la persona que curiosea la respuesta del sitio como a nosotros mismos como programadores.

CodeIgniter tiene una librería para la base de datos llamada Active Record Class así como una cosa llamada SQL Binding, ambas dos sirven para cosas que tienen que ver con la base de datos. Active Record Class sabe defenderse de SQL Injection Attack, Cross Scripting Attack y otras chucherías del tipo nada más que para mi gusto, la librería es como un diamante en bruto, falta pulirla y en lo personal no me gusta. ¿Sí eres alguien que prefiere construir los queries a mano y sentir el poder del SQL en tus manos?, entonces el siguiente párrafo es para ti, veamos:

****Controlador*****

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

class Proove extends Controller{

  function __construct(){
	parent::Controller();
	$this->load->model('proove');
  }

  function index () {$this->proove();}

  function proove (){

	//El último parámetro (TRUE) en $this->input->post('variable', TRUE) protege tu entrada de XSS
	$parametros[0] = $this->input->post('param1',TRUE) == '' ? $this->input->post('param1',TRUE) : '-1' ;
	$parametros[1] = $this->input->post('param2',TRUE) == '' ? $this->input->post('param2',TRUE) : '-1' ;
	$parametros[2] = $this->input->post('param3',TRUE) == '' ? $this->input->post('param3',TRUE) : '-1' ;
	$parametros[3] = $this->input->post('param4',TRUE) == '' ? $this->input->post('param4',TRUE) : '-1' ;
	$var = $this->proove->get_users($parametros);

	if ($var) {
	  $data['records'] = $var;
	  $this->load->view('index.php',$data);
	}
  }
}

?>

****Modelo*****

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

class Proove extends Model{

  function __construct (){
	parent::Model();
  }

  function get_users ($parametros){
	if (is_array($parametros)){
	  $sql = ' SELECT * ';
	  $sql .= ' FROM users ';
	  $sql .= ' WHERE type = ? ';
	  $sql .= ' AND kind = ? ';
	  $sql .= ' AND domain = ? ';

	  $rsproove = $this->db->query($sql, $parametros);

	  if ($rsproove->num_rows()){
		return $rsproove->result();
	  } else {
		return FALSE;
	  }
	} else {
	  return FALSE;
	}
  }
}
?>

Notarás que las modificaciones han sido mínimas, pero esto te da a cambio de modificar tu código un poco más de tranquilidad ya que puedes explotar la ventaja de escape de bad characters que un framework como CodeIgniter te ofrece, hay muchísimo más que publicar de esta herramienta y de otras tantas que apenas estoy conociendo y no he tenido tiempo de picar.

Espero que el artículo haya sido de interés y opines al respecto.

PHP CodeIgniter JavaScript Framework SQL Sql Injection Attack XSS

SociBook del.icio.us Digg Facebook Google Yahoo Buzz StumbleUpon
 

Asumo que ya han leído algo acerca del FrameWork, así que me ire de lleno.
Archivos de configuración:

config.php
Aquí, se pueden modificar varios parametros, pero necesitamos sólamente 2 para que el CodeIgniter funcione bien. Estas 2 variables, vienen “setteadas” desde la descarga del CodeIgniter.

$config['base_url']    = “http://127.0.0.1/”;
$config['index_page'] = “index.php”;

database.php
$db['hostname']  El hostname de su server de base de datos.
$db['username'] El usuario para conectar a la BD.
$db['password'] El password del usuario.
$db['database'] El nombre de la base de datos al que nos vamos a conectar.
$db['dbdriver'] Actualemente, CodeIgniter, soporta los siguientes SGBDR’s:
mysql, mysqli, postgre, odbc, mssql, sqlite, oci8
Las demás variables, sirven, pero la neta, son estas las que ocupas.

routes.php
$route['default_controller'] = “index”; (aquí se pone el controlador por defecto, que se desea cargar).

SociBook del.icio.us Digg Facebook Google Yahoo Buzz StumbleUpon
 

CodeIgniter, un framework, sencillo, simple y poderoso, basado en el emergente MVC. Eso me lleva a la siguiente idea, si es tan bueno y está subiendo como la espuma, ¿por qué no escribir unos ejemplos y lograr que la raza visite más mi blog?.

Bueno, comenzamos. CodeIgniter, como varios frameworks, tienen una carpeta de archivos, preorganizada, donde puedes meter tu aplicación/aplicaciones.

Teniendo como premisa éste dato, daré instrucciones prácticas y sencillas para lograr con el mínimo esfuerzo y dolor, una aplicación sencillita. Además pondré ejemplos con Prototype, Scriptaculous y Validation, los cuales son frameworks de JavaScript para AJAX.

Veremos los siguientes puntos:

  • MVC.
  • Organización de carpetas.
  • Archivos de configuración.

Modelo Vista Controlador (MVC) es un patrón de arquitectura de software que separa los datos de una aplicación, la interfaz de usuario, y la lógica de control en tres componentes distintos. El patrón MVC se ve frecuentemente en aplicaciones web, donde la vista es la página HTML y el código que provee de datos dinámicos a la página, el modelo es el Sistema de Gestión de Base de Datos y la Lógica de negocio y el controlador es el responsable de recibir los eventos de entrada desde la vista.

Estructura de archivos

geek@thebeach:~/Public/www$ ls -l ~/Public/www/CodeIgniter_1.7.0/* | awk ‘{print $NF}’

/home/geek/Public/www/CodeIgniter_1.7.0/index.php
/home/geek/Public/www/CodeIgniter_1.7.0/license.txt
/home/geek/Public/www/CodeIgniter_1.7.0/plantilla.php
/home/geek/Public/www/CodeIgniter_1.7.0/private.php
/home/geek/Public/www/CodeIgniter_1.7.0/public.php

/home/geek/Public/www/CodeIgniter_1.7.0/css:
private.css
public.css

/home/geek/Public/www/CodeIgniter_1.7.0/js:
builder.js
controls.js
dragdrop.js
effects.js
private_manage_users.js
prototype.js
public_users_view.js
scriptaculous.js
slider.js
sound.js
unittest.js

/home/geek/Public/www/CodeIgniter_1.7.0/system:
application
cache
codeigniter
database
fonts
helpers
language
libraries
logs
plugins
scaffolding

El último texto que escupió el awk es el que nos interesa, todo lo demás es paja, ya que solo habla de mi manera particular de organizar algunos archivos, en un post próximo hablaremos acerca de las carpetas CSS y JS.

La carpeta system contiene los archivos que hacen que el CI jalen sin peos.

Archivos de configuración

geek@thebeach:~/Public/www$ ls -l /home/geek/Public/www/CodeIgniter_1.7.0/system/application/public/config/ | awk ‘{print $NF}’
autoload.php
config.php
constants.php
database.php
hooks.php
index.html
mimes.php
routes.php
smileys.php
user_agents.php
¿Por qué no puse en negritas todos los archivos?, sencillo, por que no los vamos a utilizar por ahora. Al grano:

autoload.php sirve para cargar módelos, librerías y helpers, entre otras cosas.

config.php guarda en un arreglo typo ($config) algunas variables globales, útiles dentro de la vida del programa.

database.php esta es bastante descriptiva y sino, es por que no eres una persona “deductiva”.

routes.php aquí se almacenan las “rutas” para el aplicativo, entre ellos, el archivo que contiene el ‘index.php’, etc.

Estos archivos son bastante sencillos y no necesitas indagar en un libro muy grueso para comprender el funcionamiento básico de los archivos de configuración del CI.

Felices trázos.

SociBook del.icio.us Digg Facebook Google Yahoo Buzz StumbleUpon
© 2012 Geekeandome Suffusion theme by Sayontan Sinha