Juan Rabadan

21Jan/101

Colección de screencast sobre CodeIgniter

Navegando por Internet en busca de artículos sobre CodeIgniter, encontré el blog de David Rojas, un estudiante de la carrera de ingeniería en telecomunicación de la Universidad Miguel Hernández de Elche (España).

Estos cinco screencast son recomendables para aquellos que se están iniciando en el mundo de este framework. Como dicen los españoles: "Enhorabuena David, excelente material!".

Screencast 1: Introducción a CodeIgniter

Descargar código fuente

Screencast 2: Creación y validación de formularios con Codeigniter

Descargar código fuente

Screencast 3: Ajax con Jquery en Codeigniter

Descargar código fuente

Screencast 4: CRUD con scaffolding, rendimiento y unit testing en Codeigniter

Descargar código fuente

Screencast 5 : Hooks y creación de librerías

Descargar código fuente

Todos estos screencast han sido extraídos del Blog de David Rojas, a quien quiero agradecer por haberme permitido compartir estos videos con los usuarios de mi blog. Les recomiendo echen un vistazo al blog de David www.davidrojas.net en donde encontrarán los screencast originales como así también otros muy buenos para los desarrolladores web.

Espero que disfruten y aprendan con este material. Nos vemos en el próximo artículo.

20Jan/102

Sitio offline por mantenimiento

Algunas veces necesitamos hacer tareas de mantenimiento en alguno de nuestros sitios que están en producción y mientras estas tareas transcurren no queremos que los usuarios ingresen al sitio.

En el siguiente artículo intentaré explicarles como pueden hacer esto con CodeIgniter utilizando hooks.

Paso 1

Debemos habilitar los hooks en el archivo de configuración de la aplicación, situado en /application/config/config.php

$config['enable_hooks'] = TRUE;

Paso 2

Al final de nuestro archivo application.php incluimos el siguiente bloque

/*
|------------------------------------------------------------------
| Sitio en mantenimiento
|------------------------------------------------------------------
| Muchas veces necesitamos poner nuestro website offline.
| Asignando el valor TRUE a al parámetro de configuración
| $config['is_offline'] el sitio mostrará un cartel de
| mantenimiento a todos aquellos ips que no se encuentren
| definidos en el parametro $config['offline_allowed_ips']
|
| $config['is_offline'] = TRUE; // sitio offline
| $config['is_offline'] = FALSE; // sitio online
| $config['offline_allowed_ips'] = array('xxx.xxx.xxx.xxx') // ips permitidos
*/
 
$config['is_offline'] = FALSE;
$config['offline_allowed_ips'] = array('127.0.0.1');

Paso 3

Para configurar el hook en el sistema debemos editar el archivo hooks.php ubicado en la carpeta application/config. Allí insertamos el siguientes código:

$hook['pre_system'][] = array(
'class'   => 'site_offline_hook',
'function' => 'is_offline',
'filename' => 'site_offline_hook.php',
'filepath' => 'hooks'
);

Paso 4

Ahora solo nos resta crear el archivo para el hook. Creamos un nuevo archivo llamado site_offline_hook.php dentro de la carpeta /application/hooks/.

Si la carpeta no existe, entonces deberemos crearla.

Luego pegamos dentro del archivo recientemente creado, el siguiente bloque de código:

< ?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 
/**
 * Check whether the site is offline or not.
 *
 */
class site_offline_hook {
 
    public function __construct() {
        log_message('debug','Accessing site_offline hook!');
    }
 
    public function is_offline() {
        if(file_exists(APPPATH.'config/application.php')) {
            include(APPPATH.'config/application.php');
 
            if(isset($config['is_offline']) && $config['is_offline']===TRUE) {
                if(isset($config['offline_allowed_ips']) && in_array($_SERVER['REMOTE_ADDR'],$config['offline_allowed_ips'])===FALSE) {
                    $this->show_site_offline();
                    exit;
                }
            }
        }
    }
 
    private function show_site_offline() {
        echo '<html><body>Sitio en mantenimiento.</body></html>';
    }
 
}
/* Location: ./system/application/hooks/site_offline_hook.php */

Con esto ya tenemos nuestro hook para poner nuestro sitio offline a todo el mundo cuando queramos. Solo debemos cambiar los parametros en el archivo application.php y listo.

Este fue mi cuarto artículo espero que les haya servido. Espero sus comentarios y sugerencias. Nos vemos en mi próximo artículo de la serie "Desarrollando aplicaciones web con CodeIgniter".

19Jan/109

El archivo application.php

El archivo application.php es un archivo de configuración personalizada propio de la aplicación web que estemos desarrollando.

Suelo almacenar en él parámetros de configuración que no vengan declarados en config.php.

La ubicación de este archivo es en la carpeta /application/config/

Por citar algunas de los parámetros que se setean en este archivo, podemos mencionar, el nombre de la aplicación, la versión de la aplicación, la versión del core de codeigniter, si habilitamos el modo profiling, y muchas otras.

Para que la aplicación cargar esta configuración debemos hacer referencia a la misma en el archivo autoload.php en la seccion de config, generalmente línea 82.

Debería quedar una línea como la que sigue

$autoload['config'] = array('application');

Cabe mencionar un detalle más sobre uno de los parámetros de este archivo respecto a parámetro config['debug'] que es el que activa o desactiva el modo depuración.

Si en el archivo autoload.php precargamos la librería profiler que viene con el core de CodeIgniter y dentro del constructor de cada uno de los controladores ponemos una línea como la que sigue:

$this->output->enable_profiler($this->config->item('debug'));

Estaríamos activando o desactivando con la variable debug el modo depuración que nos muestra información útil para depurar nuestro código.  La información que se muestra aparece dividida en las siguientes secciones:

  • URI STRING
  • CLASS/METHOD
  • MEMORY USAGE
  • BENCHMARKS
  • GET DATA
  • POST DATA
  • QUERIES

Bueno llegamos con esto al final de mi tercer artículo de la colección "Desarrollando aplicaciones web con CodeIgniter". Espero sus dudas y comentarios y nos vemos en el próximo artículo.

19Jan/100

Entornos de configuración dinámica

Cuando comenzamos a desarrollar un proyecto web por lo general lo hacemos en nuestros servidores de desarrollo, luego hacemos algunas pruebas en el servidor del cliente (estado conocido como staging) y por último ponemos la aplicación online en el servidor de producción.

La idea de este artículo es comentarles como podemos configurar de manera dinámica estos tres escenarios.

Suponiendo que el servidor de desarrollo será http://app1.servidoruno.com.ar, el servidor de staging será http://pruebas.app1.com y por último el servidor de producción será http://www.app1.com.

Lo primero que haremos será definir dos variables estáticas en el archivo de configuración config.php, el que se encuentra dentro de /{application}/config/

Allí pondremos el siguiente código

define('DEV_SERVER_NAME', 'http://app1.servidoruno.com.ar');
define('STA_SERVER_NAME', 'http://pruebas.app1.com');

Luego agregaremos un bloque switch para definir la variable base_url de cada uno de los escenarios.

switch ($_SERVER['SERVER_NAME']) {
case DEV_SERVER_NAME:
//servidor de desarrollo
$config['base_url'] = "http://app1.servidoruno.com.ar/";
break;
case STA_SERVER_NAME:
// servidor de staging
$config['base_url'] = "http://pruebas.app1.com";
break;
default:
// servidor de producción
$config['base_url']    = "http://www.app1.com";
break;
}

Ahora haremos algo similar pero relacionado con las diferentes configuraciones de las bases de datos de los 3 escenarios.

Dentro de la carpeta /{application}/config/ hay un archivo database.php en el que agregaremos un bloque switch para definir cual será el "active_group"

switch ($_SERVER['SERVER_NAME']) {
case DEV_SERVER_NAME:
// servidor de desarrollo
$active_group = "dev";
break;
case STAG_SERVER_NAME:
// servidor de staging
$active_group = "sta";
break;
default:
// servidor de producción
$active_group = "pro";
break;
}

Luego crearemos los tres bloques para cada escenario con cada uno de los parámetros necesarios.
$db['dev']['hostname'] = "localhost";
$db['dev']['username'] = "DEV_USERNAME";
$db['dev']['password'] = "DEV_PASSWORD";
$db['dev']['database'] = "DEV_DATABASENAME";
$db['dev']['dbdriver'] = "mysql";
$db['dev']['dbprefix'] = "";
$db['dev']['pconnect'] = FALSE;
$db['dev']['db_debug'] = TRUE;
$db['dev']['cache_on'] = FALSE;
$db['dev']['cachedir'] = "";
$db['dev']['char_set'] = "utf8";
$db['dev']['dbcollat'] = "utf8_general_ci";
$db['sta']['hostname'] = "localhost";
$db['sta']['username'] = "STG_USERNAME";
$db['sta']['password'] = "STG_PASSWORD";
$db['sta']['database'] = "STG_DATABASENAME";
$db['sta']['dbdriver'] = "mysql";
$db['sta']['dbprefix'] = "";
$db['sta']['pconnect'] = FALSE;
$db['sta']['db_debug'] = TRUE;
$db['sta']['cache_on'] = FALSE;
$db['sta']['cachedir'] = "";
$db['sta']['char_set'] = "utf8";
$db['sta']['dbcollat'] = "utf8_general_ci";
$db['pro']['hostname'] = "localhost";
$db['pro']['username'] = "LIVE_USERNAME";
$db['pro']['password'] = "LIVE_PASSWORD";
$db['pro']['database'] = "LIVE_DATABASENAME";
$db['pro']['dbdriver'] = "mysql";
$db['pro']['dbprefix'] = "";
$db['pro']['pconnect'] = FALSE;
$db['pro']['db_debug'] = TRUE;
$db['pro']['cache_on'] = FALSE;
$db['pro']['cachedir'] = "";
$db['pro']['char_set'] = "utf8";
$db['pro']['dbcollat'] = "utf8_general_ci";
19Jan/100

Personalizando la estructura de carpetas

Luego de haber descargo y descomprimido la última versión del framework CodeIgniter, me gusta personalizar la estructura de carpetas como sigue.

--ci_1.7.2
--application
--assets
----css
----js
----img

La carpeta "application"

La carpeta application es donde estarán aquellos archivos que vayamos creando y codificando, sean estos vistas, controladores, modelos, etc.  A mi entender, resulta mucho más  práctico move esta carpeta a la raíz del proyecto, al mismo nivel que la carpeta system. De esta forma estamos aislando el proyecto de lo que es el corazón o core de CodeIgniter.

Luego de hacer este cambio, debemos informárselo a CodeIgniter de la siguiente manera. En el archivo index.php que se encuentra en el raíz de la aplicación deberemos actualizar el valor de la variable $application_folder.

$application_folder = "application";  //versión original

$application_folder = "../application"; //mi versión

La carpeta "system"

La carpeta system suelo renombrarla siguiendo el patrón "ci_{numero de versión}". La versión que estoy utilizando de CodeIgniter es la 1.7.2, por lo que la carpeta quedaría con el nombre ci_1.7.2.

Para informar este cambio, debemos editar editar la línea 26 de archivo index.php situado en el directorio raíz del proyecto.

$system_folder = "system"; // versión original

$system_folder = "ci_1.7.2"; // mi versión

Este cambio me permitirá actualizar fácilmente el framework, ni bien vayan apareciendo nuevas versiones del mismo.

La carpeta "assets"

En todas las aplicaciones web siempre precisamos hojas de estilos, librerías jscript, y archivos de imágenes. En lugar de tener varias carpetas distribuidas en el directorio raíz del proyecto, me gusta centralizar todas estas en una carpeta assets que sitúo en el directorio raíz. Dentro de esta podré tener otras carpetas para diferenciar los recursos por tipos, por ejemplo la carpeta css para las hojas de estilo, la carpeta js para los ficheros javascript, y la carpeta img para las imágenes, solo por citar algunos ejemplos.

Bueno espero poder haber contribuido de alguna manera. Espero sus comentarios y nos vemos en el próximo artículo sobre CodeIgniter.

18Jan/101

Desarrollando aplicaciones web con CodeIgniter

Durante los últimos meses estuve investigando y analizando diferentes alternativas para agilizar los desarrollos dentro de nuestra empresa, la consultora Arzion Srl nuestros desarrollos. En este mismo tiempo, uno de mis clientes me solicitó llevar adelante un proyecto utilizando para el desarrollo del mismo el framework open source CodeIgniter. Gran sorpresa me llevé al descubrir la potencia de este conjunto de librerías y como las mismas facilitan el día a día de los programadores web.

Motivado entonces por transmitir todo lo que voy aprendiendo sobre este framework día a día comenzaré con una serie de artículos en la que iré compartiendo con los lectorla experiencia adquirida con CodeIgniter.

Les recomiendo sigan la siguiente documentación PHP Style Guide a la hora de programar con CodeIgniter.

Índice de artículos sobre CodeIgniter

  1. Artículo 1 "Personalizando la estructura de carpetas"
  2. Artículo 2 "Entornos de configuración dinámica"
  3. Artículo 3 "El archivo application.php"
  4. Artículo 4 "5 excelentes screencasts sobre codeigniter"
==$system_folder = "lib/1.7.2";
12Jan/100

Contenido aleatorio

A que desarrollador no le ha pasado que durante la fase de testeo de una aplicacion que usa una base de datos, nos da fiaca completar las tablas con registros de prueba.

Motivado por esta necesidad, desarrollé un plugin para CodeIgniter, el framework con el que actualmente estamos desarrollando, que nos permite generar registros de datos aleatorios de diferentes tipos. Entre ellos strings, enteros, decimales, contraseñas, emails, parrafos de texto varchar, y muchos otros.

Aquellos que quieran ver el funcionamiento del plugin, pueden hacer click aquí

Espero que sea de utilidad para toda la comunidad de desarrolladores.

12Jan/101

Configurar una cuenta de email de Google Apps en cualquier cliente de correo

Hoy en día  la mayoría de los usuarios utiliza el webmail, por un tema de practicidad y además por el espacio que brinda google para sus cuentas de correo de google apps. Sin embargo a muchos otros usuarios les resulta muy cómodo configurar su cuenta de correo en los cliente de correo estándar.

La siguiente información será de mucha ayuda si quieres configurar  una cuenta de google apps ó gmail en Outlook, Outlool Express, Thunderbird, Mac Mail, Evolution, etc.

Correo entrante (POP3)
  • Servidor: pop.gmail.com
  • Usar SSL:
  • Puerto: 995
Correo saliente (SMTP)
  • Servidor: smtp.gmail.com
  • Usar autenticación:
  • Usar STARTTLS: Sí (en algunos clientes se denomina SSL)
  • Puerto: 465 o 587

Nombre de cuenta: correo@tudominio.com o correo@gmail.com (el correo electrónico completo)

Dirección de correo electrónico: correo@tudominio.com o correo@gmail.com

Contraseña: la misma de acceso al webmail. Algunos programas la piden en la configuración y otros en el primer envio o primer recepción.

Es importante tener habilitado el servicio POP en nuestra cuenta de Gmail o de Google Apps para que esto funcione. Para hacerlo hay que seguir los siguientes pasos:

Para habilitar el acceso POP en tu cuenta de Gmail:

  1. Accede a tu cuenta de Google Apps o Gmail.
  2. Haz clic en Configuración, en la parte superior de cualquier página del webmail.
  3. Haz clic en Reenvío y correo POP, situado en el cuadro naranja Configuración.
  4. Selecciona Habilitar POP para todos los mensajes o Habilitar POP para los mensajes que se reciban a partir de ahora.
  5. Elige la acción que deseas que realicen tus mensajes de Gmail una vez que hayas accedido a ellos a través del protocolo POP.
  6. Haz clic en Guardar cambios.
8Jan/102

Mensajes de aviso a usuarios

Al fin pude terminar mi primer plugin para CodeIgniter. Es bastante sencillo pero lo considero muy útil para todos los desarrolladores web.

El plugin fue desarrollado a partir de otro creado por Daniel Fone. Mi agregado puede resumirse en lo siguientes puntos:

  1. Cambio de librería jscript. En lugar de utilizar scriptaculous como estaba en el código original, utilicé la  librería jquery
  2. El programador puede elegir entre 4 tipos de mensajes/alertas posibles. Los mismos son: mensajes de éxito, mensajes de error, mensaje de alerta, mensajes de información.

Pueden chequear  la misma en funcionamiento haciendo click aqui

Espero sus comentarios.

7Jan/100

Url en CodeIgniter

Las urls, bajo el framework CodeIgniter, fueron creadas de tal modo que por defecto sean amigables tanto para el ojo humano como para el estómago de los motores de búsqueda (search engines). En reemplazo del esquema comumente utilizado por websites dinámicos, como lo es el de parámetros por querystring, CodeIgniter se apoya en uno de partes / segmentos. Por ejemplo: www.juanrabadan.com.ar/notas/leer/1

Nota: Si precisamos utilizar los querystring, podemos habilitarlo en el archivo de configuración.

Composición de la URI

Las partes o segmentos en las URL, siguiendo con el paradigma del modelo MVC (modelo - vista - controlador), podemos representarlas con el siguiente ejemplo.

www.juanrabadan.com.ar/class/function/ID

1. El primer segmento representa la clase del controlador que debería ser invocado.
2. El segundo segmento representa la función de esta clase, o el método que debería ser llamado.
3. El tercer segmento y cualquier segmento adicional, representa el ID y cualquier otra variable que será pasada al controlador.

La clase URI y el helper URL contienen diferentes funciones que hacen muy fácil  trabajar con la información contenida en las URI. En adición, cualquier URL puede ser remapeada utilizando la característica de URI Routing para obtener mayor flexibilidad.

Como remover "index.php" en las URL de  CodeIgniter

Por defecto, el archivo index.php  será incluido en todas las URLs:

www.juanrabadan.com.ar/index.php/notas/leer/1

Podemos remover fácilmente el segmento index.php de todas las URLs de nuestra aplicación. Para eso debemos incluir las siguientes linesas en nuestro archivo .htaccess situado en la raíz de la aplicación.

 RewriteEngine on
 RewriteCond $1 !^(index\.php|images|robots\.txt)
 RewriteRule ^(.*)$ /index.php/$1 [L]

En el ejemplo anterior, cualquier petición HTTP que no sea explicitamente index.php, images ó robots.txt es tratado como una petición para index.php.

Agregando sufijos a las URL

En el archivo config.php de nuestra aplicación (/system/application/config/config.php) podemos especificar un sufijo que será agregado por defecto a todas las URLs generadas por CodeIgniter. Por ejemplo si la URL es esta:

www.juanrabadan.com.ar/servicios/ver/consultoria

Podemos agregar de manera opcional, el sufijo .html, haciendo que la URL se parezca más a una página de un cierto tipo. De esta forma la URL nos quedaría
www.juanrabadan.com.ar/servicios/ver/consultoria.html

La información fue extraída del manual online de CodeIgniter