Ejemplo de librería en CodeIgniter: Calendar Library

  • Por
  • PHP
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.
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.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

leosuaar

17/8/2010
Aviso
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.

Hector Costa Guzman

06/6/2011
Function ereg() is deprecated
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

22/11/2011
ereg esta obsoleto hay que utilizar preg_match
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

22/11/2011
utilizar preg_match para php 5 es obligatorio erge esta obsoleto
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;
}

Omar Orrala Palacios

20/3/2014
Codigo funcional
class Conversor_fechas{

////////////////////////////////////////////////////
//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;
}

}

jorgeprado

03/7/2014
preg_match y la barra /
Cuando quise usar
preg_match( "/([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})/", $fecha, $mifecha);

me marcaba error con la barra /

entonces tuve que usarlo con el caracter de escape / , por lo que quedó así:
preg_match( "/([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})/", $fecha, $mifecha);

y sólo asi me funcionó, saludos.

jorgeprado

03/7/2014
Error en el anterior
Quedó así (sin los espacios en blanco claro):
preg_match( "/([0-9]{1,2}) / ([0-9]{1,2}) / ([0-9]{2,4})/", $fecha, $mifecha);

jorgeprado

03/7/2014
La barra \ no la pone
No pone la barra inversa \ en el comentario, la contraria a /

Saludos

JJS

24/10/2014
A mi tampoco me funcionaba
El problema viene aquí:
preg_match( "/([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})/", $fecha, $mifecha);
Y es debido a que la función preg_match no encuentra los delimitadores del primer valor entrado.
Cambiando estos delimitadores, todo funciona:
preg_match( "@([0-9]{1,2})/([0-9]{1,2})/([0-9]{2,4})@", $fecha, $mifecha);