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
 

Ahora vamos con el modelo, el modelo (por adaptación del concepto que tomé del manual de CodeIgniter) es una entidad que se encarga de interactuar con el controlador (que es de donde vienen las solicitudes del usuario y a donde éste envía las respuestas de las consultas para mostrar info al usuario final).


@name md_comentarios
@access publico
@description Esta clase se encarga de interactuar con la base de datos, básicamente es para la minería de datos
@parameters none
*/

class md_comentarios extends CI_Model {

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

	/**
	@author Pedro Navarro 
	@name get_comentarios
	@access publico
	@description Busca dentro de la base de datos los registros que aún no estén publicados, esto es para "moderar" cada uno de ellos y decidir cuáles han de mostrarse y cuales no.
	@parameters none
	@return resultset object
	*/
	public function get_comentarios()
	{
		//inicializando la conexión de la base de datos
		$db_comentarios = $this->load->database('default', True);

		//creando la consulta para obtener los registros
		$sql_comentarios = " SELECT * FROM comentarios;";

		//ejecuto la consulta y con un operador ternario (condicion) ? parte verdadera : parte falsa; determino qué es lo que voy a enviar como resultado al controlador
		$resultado = ($db_comentarios->query($sql_comentarios)->num_rows() >= 1) ? $db_comentarios->query($sql_comentarios)->result() : Null;

		//escupo al log el valor asignado a la variable; desde aquí ya sé cómo se va a comportar el controlador
		log_message('info', "md_comentarios->get_comentarios->sql_comentarios: {$db_comentarios->last_query()}");

		//cierro la conexión con la base de datos
		$db_comentarios->close();

		return $resultado;
	}

	/**
	@author Pedro Navarro 
	@name get_comentario
	@access publico
	@description Busca dentro de la base de datos los registros que aún no estén publicados, esto es para "moderar" cada uno de ellos y decidir cuáles han de mostrarse y cuales no.
	@parameters none
	@return row object
	*/
	public function get_comentario ( $parametros = Null )
	{
		// la variable de retorno siempre es False al inicio
		$resultado = false;

		// verifica que los parámetros sean un arreglo y no sea Null
		if( ( ! is_null( $parametros ) ) && ( is_array( $parametros ) ))
		{
			//inicializando la conexión de la base de datos
			$db_comentarios = $this->load->database('default', True);

			//creando la consulta para obtener los registros
			$sql_comentarios_pendientes = " SELECT * FROM comentarios WHERE com_id = {$db_comentarios->escape($parametros['com_id'])} LIMIT 1; ";

			//ejecuto la consulta y con un operador ternario (condicion) ? parte verdadera : parte falsa; determino qué es lo que voy a enviar como resultado al controlador
			$resultado = ($db_comentarios->query($sql_comentarios_pendientes)->num_rows() == 1) ? $db_comentarios->query($sql_comentarios_pendientes)->row() : Null;

			// cierro la conexión a la base de datos
			$db_comentarios->close();
		}

		return $resultado;
	}

	/**
	@author Pedro Navarro 
	@name set_publicar_comentario
	@access publico
	@description Actualiza el campo com_publicar a 1 en la tabla comentarios
	@parameters array
	@return boolean
	*/
	public function set_publicar_comentario ( $parametros = Null )
	{
		// la variable de retorno siempre se inicia con False
		$resultado = False;

		// verifica que los parámetros sean un arreglo y no sea Null
		if( ( ! is_null( $parametros ) ) && ( is_array( $parametros ) ))
		{
			// inicializando la conexión a la base de datos
			$db_comentarios = $this->load->database('default', True);

			// creación de la consulta SQL con la actualización del registro
			$sql_publicar_comentario = "UPDATE comentarios SET com_publicar = 1 WHERE com_id = {$db_comentarios->escape($parametros['com_id'])};";

			// ejecuto el query
			$db_comentarios->query($sql_publicar_comentario);
			log_message('info', "md_comentarios->set_publicar_comentario->sql_publicar_comentario: {$db_comentarios->last_query()}");

			// checo si actualizó o no alguno de los comentarios y regreso True/False dependiendo de la respuesta
			$resultado = $db_comentarios->affected_rows() == 1 ? True : False;

			// cerrando conexión con la base de datos.
			$db_comentarios->close();
		}
		return $resultado;
	}

	/**
	@author Pedro Navarro 
	@name set_bannear_comentario
	@access publico
	@description Actualiza el campo com_publicar a 1 en la tabla comentarios
	@parameters array
	@return boolean
	*/
	public function set_bannear_comentario ( $parametros = Null )
	{
		//la variable de retorno siempre se inicia como False
		$resultado = False;

		// verifica que los parámetros sean un arreglo y no sea Null
		if( ( ! is_null( $parametros ) ) && ( is_array( $parametros ) ))
		{
			// inicializa la conexión con la base de datos
			$db_comentarios = $this->load->database('default', True);

			//creo la sentencia SQL para actualizar a 0 el campo com_publicar
			$sql_bannear_comentario = "UPDATE comentarios SET com_publicar = 0 WHERE com_id = {$db_comentarios->escape($parametros['com_id'])};";

			//ejecuto el query
			$db_comentarios->query($sql_bannear_comentario);
			log_message('info', "md_comentarios->set_publicar_comentario->sql_bannear_comentario: {$db_comentarios->last_query()}");

			// le pregunto con un operador ternario a la base de datos cuántos registros alteró y asigno True/False dependiendo de lo que haya hecho
			$resultado = $db_comentarios->affected_rows() == 1 ? True : False;

			// cerrando la conexión a la base de datos.
			$db_comentarios->close();
		}
		return $resultado;
	}

	//** De aquí para abajo van los métodos para la otra parte del ejemplo **//

	/**
	@author Pedro Navarro 
	@name get_comentarios_publicados
	@access publico
	@description Busca dentro de la base de datos los registros que aún no estén publicados, esto es para "moderar" cada uno de ellos y decidir cuáles han de mostrarse y cuales no.
	@parameters none
	@return resultset object
	*/
	public function get_comentarios_publicados()
	{
		//inicializando la conexión de la base de datos
		$db_comentarios = $this->load->database('default', True);

		//creando la consulta para obtener los registros
		$sql_comentarios = " SELECT * FROM comentarios WHERE com_publicar = 1;";

		//ejecuto la consulta y con un operador ternario (condicion) ? parte verdadera : parte falsa; determino qué es lo que voy a enviar como resultado al controlador
		$resultado = ($db_comentarios->query($sql_comentarios)->num_rows() >= 1) ? $db_comentarios->query($sql_comentarios)->result() : Null;

		//escupo al log el valor asignado a la variable; desde aquí ya sé cómo se va a comportar el controlador
		log_message('info', "md_comentarios->get_comentarios_publicados->sql_comentarios: {$db_comentarios->last_query()}");

		//cierro la conexión con la base de datos
		$db_comentarios->close();

		return $resultado;
	}

	/**
	@author Pedro Navarro 
	@name set_agregar_comentario
	@access publico
	@description Inserta un registro en la tabla comentarios
	@parameters array
	@return boolean
	*/
	public function set_agregar_comentario ( $parametros = Null )
	{
		/**
		En esta función voy a poner el ejemplo de la otra manera de escapar correctamente los queries usando el otro método de escape de CodeIgniter
		*/
		//la variable de retorno siempre va en False al inicio de la función
		$resultado = False;
		// verifica que los parámetros sean un arreglo y no sea Null
		if( ( ! is_null( $parametros ) ) && ( is_array( $parametros ) ))
		{
			// inicializa la conexión con la base de datos
			$db_comentarios = $this->load->database('default', True);

			//creo la sentencia SQL para insertar el registro
			$sql_insertar_comentario = "INSERT INTO comentarios (com_autor, com_comentario, com_fecha, com_publicar) VALUES (?, ?, ?, ?);";

			//ejecuto el query
			$db_comentarios->query($sql_insertar_comentario, $parametros);
			log_message('info', "md_comentarios->set_agregar_comentario->sql_insertar_comentario: {$db_comentarios->last_query()}");

			// le pregunto con un operador ternario a la base de datos cuántos registros alteró y asigno True/False dependiendo de lo que haya hecho
			$resultado = $db_comentarios->affected_rows() == 1 ? True : False;

			// cerrando la conexión a la base de datos.
			$db_comentarios->close();
		}
		return $resultado;
	}	

}

/* End of file md_comentarios.php */
/* Location: ./application/models/md_comentarios.php */

Ahora vamos a ver cómo hice el controlador, éste recibe solicitudes vía ajax de parte de la vista. El primero de los controladores que voy a poner está pensado para leer (en la vista pública, por llamarlo de alguna manera)

load->model('md_comentarios', 'md_comentarios');
	}

	/**
	@author Pedro Navarro 
	@name index
	@access publico
	@description Redirecciona al método admin.
	@parameters none
	@return void
	*/
	public function index()
	{
		//redirecciona a la URL del sitio a partir de la propiedad controller_name de la clase y lo manda al método admin
    redirect(base_url()."{$this->controller_name}/leer");
	} 

	/**
	@author Pedro Navarro 
	@name leer
	@access publico
	@description Muestra una vista general, con los comentarios aprobados por el moderador
	@parameters none
	@return void
	*/
	public function leer ()
	{

		//accedo al método get_comentarios de la clase (modelo) md_comentarios para obtener la lista de comentarios
		$parametros_vista['titulo_pagina'] = "{$this->controller_name}";

		// le empujo a esta variable el resultado que devuelva el modelo.
		$parametros_vista['rs_comentarios'] = $this->md_comentarios->get_comentarios_publicados();

		// cargo la vista y le aviento los parámetros que ya definí.
		$this->load->view('comentarios', $parametros_vista);

	}

	/**
	@author Pedro Navarro 
	@name agregar_comentario
	@access publico
	@description Muestra una vista con campos para ingresar comentarios.
	@parameters none
	@return void
	*/
	public function agregar_comentario ()
	{

		// cargo la vista y le aviento los parámetros que ya definí.
		$this->load->view('agregar_comentario');

	}

	/**
	@author Pedro Navarro 
	@name guardar_comentario
	@access publico
	@description Muestra una vista con campos para ingresar comentarios.
	@parameters none
	@return void
	*/
	public function guardar_comentario ()
	{
		$parametros['com_autor'] = $this->input->post('com_autor', true);
		$parametros['com_comentario'] = $this->input->post('com_comentario', true);
		$parametros['com_fecha'] = $this->input->post('com_fecha', true);
		$parametros['com_publicar'] = 0;

		$insertar_comentario = $this->md_comentarios->set_agregar_comentario($parametros);

		if ($insertar_comentario)
		{
			$this->lista_comentarios();
		}
	}

	public function lista_comentarios()
	{
		//accedo al método get_comentarios de la clase (modelo) md_comentarios para obtener la lista de comentarios
		$parametros_vista['titulo_pagina'] = "{$this->controller_name}";

		// le empujo a esta variable el resultado que devuelva el modelo.
		$parametros_vista['rs_comentarios'] = $this->md_comentarios->get_comentarios_publicados();

		// cargo la vista y le aviento los parámetros que ya definí.
		$this->load->view('lista_comentarios', $parametros_vista);
	}

}

/* End of file leer_comentarios.php */
/* Location: ./application/controllers/leer_comentarios.php */

Ahora viene el controlador que hace la “moderación” de los comentarios que los usuarios escriben.

load->model('md_comentarios', 'md_comentarios');

	}

	/**
	@author Pedro Navarro 
	@name index
	@access publico
	@description Redirecciona al método admin.
	@parameters none
	@return void
	*/
	public function index()
	{
		//redirecciona a la URL del sitio a partir de la propiedad controller_name de la clase y lo manda al método admin
    redirect(base_url()."{$this->controller_name}/admin");
	} 

	/**
	@author Pedro Navarro 
	@name admin
	@access publico
	@description Muestra la lista de todos los comentarios que hay dentro de la base de datos
	@parameters none
	@return void
	*/
	public function admin()
	{

		//accedo al método get_comentarios de la clase (modelo) md_comentarios para obtener la lista de comentarios
		$parametros_vista['titulo_pagina'] = "{$this->controller_name} admin";

		// le empujo a esta variable el resultado que devuelva el modelo.
		$parametros_vista['rs_comentarios'] = $this->md_comentarios->get_comentarios();

		// cargo la vista y le aviento los parámetros que ya definí.
		$this->load->view('moderador/lista_comentarios', $parametros_vista);

	}

	/**
	@author Pedro Navarro 
	@name publicar
	@access publico
	@description Recibe el parámetro del comentario a publicar y hace las operaciones propias en el modelo
	@parameters integer
	@return void
	*/
	public function publicar()
	{
		//recibo
		$parametros['com_id'] = $this->input->post('com_id', true);
		log_message('info', "\$parametros['com_id'] es: {$parametros['com_id']}");

		$comentario = $this->md_comentarios->get_comentario( $parametros );

		$respuesta_modelo = False;

		if($comentario)
		{
			log_message('info', "\$comentario->com_publicar es: {$comentario->com_publicar}");

			switch ($comentario->com_publicar)
			{
				case 1:
					$respuesta_modelo = $this->md_comentarios->set_bannear_comentario( $parametros ) ? 'Comentario deshabilitado.' : 'Error, no se pudo efectuar la operacion, revisa los logs.';

				break;

				case 0:
					$respuesta_modelo = $this->md_comentarios->set_publicar_comentario( $parametros ) ? 'Comentario publicado.' : 'Error, no se pudo efectuar la operacion, revisa los logs.';
				break; 

				default:
					$respuesta_modelo = False;
				break;
			}
		}

		log_message('info', "\$respuesta_modelo es: {$respuesta_modelo}");
		print($respuesta_modelo);

	}

}

/* End of file moderar_comentarios.php */
/* Location: ./application/controllers/moderar_comentarios.php */

Ahora, vamos a las vistas, la primera de ellas se llama comentarios.php, en esta lista se ponen los comentarios “moderados” que el administrador haya promovido.











com_comentario;?>
com_fecha?>
No hay registros para mostrar
#

Ahora, la vista que por medio de ajax se carga para agregar comentarios al programa y que le aparezcan al moderador



Fecha

Como ya les había comentado previamente,

AQUÍ

pueden descargar el demo que funciona y toda la cosa.

Happy coding!

 

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
 

En este post mostraré como modificar las cabeceras de APACHE con PHP usando las herramientas CodeIgniter y PrototypeJS para crear errores de servidor al vuelo y recogerlos con
Ajax.Request(); para hacer uso de los eventos que ofrece. En este ejemplo usaré 3 de ellos…

onLoading: Para alterar el dom con un texto mientras responde el server

onFailure: Para recoger el error y mostrarlo alterando el dom del html

onSuccess: Para mostrar la respuesta *correcta* que esperamos del server.

Controlador:

class Controlador extends Controller{
    function ejemplo ()
    {
       $param['dato'] = $this->input->post('dato', TRUE);
        // suponiendo que hay dos variables que a huevo deben
        // coincidir para llegar al siguiente proceso
        // si las variables son iguales, entonces muestra la vista
        if ($param['dato'] == 1)
        {
            $this->load->view('opciones');
            // en caso contrario, invoca a la función privada _get500();
        } else {
            $this->_get500();
        }
    }

    // Escribe el "Response status" de respuesta para AJAX.onFailure
    function _get500()
    {
        header("HTTP/1.0 500 Hubo una madre que fallo, por lo pronto no jala.");
    }
}

Ahora, este es el archivito.js que manda llamar el controlador.

function get500()
{
     var url = base_url;
    var $_C = 'controlador/ejemplo';
    url += $_C;
    var notice = $('notifications');
    new Ajax.Request(url, {
      method: 'post',
      {
      parameters: {dato: $F('dato')}
      }

      onLoading: function(transport){
          notice.update('CARGANDO ESTA CHINGADERA').setStyle({ background: '#dfd' });
      },

      onFailure: function(transport) {
          notice.update(transport.statusText).setStyle({ background: '#dfd' });
      },

      onSuccess: function (transport){
          notice.update(transport.responseText).setStyle({ background: '#dfd' });
      }
    });
    new Effect.Appear('notifications');

}

Ahora, la vista donde se observaran los efectos del código


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
© 2011 Geekeandome Suffusion theme by Sayontan Sinha