dominios y alojamiento web en hostalia

Ejemplo de librería en CodeIgniter: Calendar Library

25 de mayo de 2010
Valoración del artículo:
Veamos cómo trabajar con una librería de CodeIgniter, en concreto con la librería Calendar, que nos servirá como ejemplo de uso de libraries.
Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.
En el anterior artículo del Manual de CodeIgniter vimos los pasos y especificaciones para crear nuestras propias librerías, con lo que será bueno detenerse a ver un ejemplo de una librería creada por nosotros mismos.

Vamos a hacer una librería con algunas funciones para convertir formatos de fechas. La funcionalidad en si no importa mucho, lo que nos interesa es ver cómo se hace. En el artículo continuaremos con el procedimiento para cargar la librería desde un controlador de CodeIgniter y utilizarla invocando sus métodos.

Librería propia en CodeIgniter: Conversor_fechas

Este sería el código de nuestra librería de ejemplo.

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

class Conversor_fechas{
   
   ////////////////////////////////////////////////////
   //Convierte fecha de mysql a español
   ////////////////////////////////////////////////////
   function fecha_mysql_a_espanol($fecha){
      ereg( "([0-9]{2,4})-([0-9]{1,2})-([0-9]{1,2})", $fecha, $mifecha);
      $lafecha=$mifecha[3]."/".$mifecha[2]."/".$mifecha[1];
      return $lafecha;
   }

   ////////////////////////////////////////////////////
   //Convierte fecha de español a mysql
   ////////////////////////////////////////////////////
   function fecha_espanol_a_mysql($fecha){
      ereg( "([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})", $fecha, $mifecha);
      $lafecha=$mifecha[3]."-".$mifecha[2]."-".$mifecha[1];
      return $lafecha;
   }
   
}

/* Fin del fichero */
/* No necesito cerrar PHP y de hecho no se recomienda para no insertar saltos de línea al final */

Como se puede ver, se ha creado una clase llamada "Conversor_fechas" (la "C" inicial en mayúsculas) y un par de funciones que serán las que nos aporte la librería cuando la carguemos.

La hemos guardado con el nombre de archivo "Conversor_fechas.php" (También la "C" en mayúsculas), en la siguiente ruta:

system/application/libraries

Controlador que carga la librería propia

Ahora podemos hacer un controlador para probar esta librería. Para ello creamos el archivo del controlador con un código como este:

<?php
class Convierto_fechas extends Controller {

   function index(){
      //creo una variable con una fecha
      $fecha = "21/07/2010";
      //cargo la librería para convertir fechas
      $this->load->library('conversor_fechas');
      //cambio la fecha de formato
      $fecha_formato_mysql = $this->conversor_fechas->fecha_espanol_a_mysql($fecha);
      //muestro la fecha (debería usar una vista)
      echo $fecha_formato_mysql;
      
      //convierto la fecha mysql a español
      $fecha_formato_espanol = $this->conversor_fechas->fecha_mysql_a_espanol($fecha_formato_mysql);
      //muestro la fecha (debería usar una vista)
      echo "<br>" . $fecha_formato_espanol;
   }
   
}
?>

Como ya debemos saber, el controlador lo debemos guardar en el directorio system/application/controllers y con el mismo nombre que la clase que hemos creado, con la extensión .php y en minúsculas: convierto_fechas.php.

Supongo que no será problema localizar el lugar del código donde se carga la librería:

$this->load->library('conversor_fechas');

Y el lugar donde utilizamos los métodos de la librería para acceder a sus funcionalidades:

$fecha_formato_mysql = $this->conversor_fechas->fecha_espanol_a_mysql($fecha);

Nota: En este controlador estamos escribiendo directamente en la página sin utilizar las vistas. Es sólo una prueba y CodeIgniter nos lo permite, pero no es una buena práctica. Deberíamos utilizar una vista.

La URL con la que acceder a este controlador dependerá un poco de donde tengas instalado tu CodeIgniter, pero so lo has puesto en la raíz de tu dominio podrías acceder a través de una URL como esta:

http://www.ejemplo.com/index.php/convierto_fechas/

O si hemos ocultado el index.php a través de un .htaccess:

http://www.ejemplo.com/convierto_fechas/

De momento hemos aprendido a crear una librería 100% desarrollada por nosotros e integrada dentro de nuestro CodeIgniter. En el siguiente artículo mostraremos un detalle importante que debemos implementar en nuestras librerías para acceder a los recursos del framework CodeIgniter desde el código de tus propias librerías.

Compartir en redes sociales

Comentarios
Fueron enviados 4 comentarios al artículo
4 comentarios revisados:
Aviso
Por: leosuaar
17/8/2010
Luego de estudiar este capítulo de librerías, hice el test que explican, pero tuve problemas con la función que busca expresiones regulares. En el ejemplo, utilizan ereg(), sin embargo parece que esa función ya está obsoleta en PHP5.

La solución fue simple. En el método llamado "fecha_mysql_a_espanol" hice un reemplazo de la función ereg por la nueva versión preg_match() quedando así:

preg_match("/([0-9]{2,4})-([0-9]{1,2})-([0-9]{1,2})/", $fecha, $mifecha);


En la función fecha_espanol_a_mysql hice lo mismo quedando la función preg_match así:

preg_match("/([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})/", $fecha, $mifecha);

Notar que para la expresión regular, el patrón debe estar entre barras de división.
Function ereg() is deprecated
Por: Hector Costa Guzman
06/6/2011
Hola, gracias por estos buenos tutoriales para ir aprendiendo Codeigniter.
Siguiendo la guía me he encontrado con el problema que la función ereg() ya no se utiliza, en su lugar usariamos preg_match() , la diferencia es que necesita limitadores / y en el caso del delimitador / en la fecha solo hay que ponerle la contra-barra:

////////////////////////////////////////////////////
//Convierte fecha de mysql a español
////////////////////////////////////////////////////
function fecha_mysql_a_espanol($fecha){
preg_match("/([0-9]{2,4})-([0-9]{1,2})-([0-9]{1,2})/", $fecha, $mifecha);
$lafecha=$mifecha[3]."/".$mifecha[2]."/".$mifecha[1];
return $lafecha;
}

////////////////////////////////////////////////////
//Convierte fecha de español a mysql
////////////////////////////////////////////////////
function fecha_espanol_a_mysql($fecha){
preg_match("/([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})/", $fecha, $mifecha);
$lafecha=$mifecha[3]."-".$mifecha[2]."-".$mifecha[1];
return $lafecha;
}

Saludos!

JOSECS
ereg esta obsoleto hay que utilizar preg_match
22/11/2011
podriais poner un ejemplo de cambio formato fecha de castellano a mysql con preg_match y si es posible explicar el funcionamiento de esta funcion preg_mach.

el que tenemos esta con ereg y a los que tenemos php 5.3. nos da un error.

JOSECS
utilizar preg_match para php 5 es obligatorio erge esta obsoleto
22/11/2011
function cambiarf_a_espanol($fecha){
preg_match( "/([0-9]{2,4})-([0-9]{1,2})-([0-9]{1,2})/", $fecha, $mifecha);
$lafecha=$mifecha[3]."-".$mifecha[2]."-".$mifecha[1];
return $lafecha;
}

Manuales relacionados
Categorias relacionadas
El autor
Últimas noticias
Donaciones
Si piensas que te hemos ayudado y merecemos tu apoyo económico...