martes, 4 de junio de 2013

CodeIgniter y los archivos de ayuda/ayudantes.

ci_logo_flame

En este artículo comentaremos sobre otra de las facilidades del CodeIgniter para un desarrollo organizado de nuestros sitios web.

Suponga que, utilizando las facilidades del modelo vista controlador comentadas en el anterior artículo (CodeIgniter y el Modelo Vista Controlador), has logrado un sitio donde separas bien las funcionalidades visuales del control y del acceso a la base de datos.

Pero en tu sitio tienes muchos usuarios, y se quiere que en cualquier lugar que salga el nombre de un usuario, se pueda saber más sobre esa persona, por ejemplo, acceder a su página personal. Pues sólo tendrías que revisar en cada lugar de tu sitio y poner algo así como:

<?php
echo '<a href="'.site_url().'users/page/'.$user_id.' ">'.$user_name.'</a>';
?>

Lo que mostraría el nombre del usuario con un link a la página http://.../users/page/2, suponiendo por ejemplo que su id sea el 2.

Hasta ahí no es muy complicado, en dependencia del tamaño del sitio. Pero supón que más adelante decidas poner más información, por ejemplo, una pequeña foto del usuario al lado de su nombre, o que en lugar del primer nombre salga todo el nombre incluyendo apellidos. Pues habría que revisar todo el sitio cambiando esto.

En cambio, si desde un inicio se busca un único lugar donde se ponga una función que pueda ser llamada desde varios lugares, dará mayor limpieza al código y ahorrará trabajo.

¿Dónde colocar esta función, en un controlador, en un modelo, en una vista?

Aquí entra a jugar un buen papel los archivos de ayuda (helpers, o ayudantes) de CodeIgniter.

Los ayudantes, como su nombre lo indica, ayudan con tareas que pueden ser de nivel de modelo, de vista o de controlador. Un archivo de ayuda es una colección de funciones de procedimientos, no en formato orientado a objeto, a diferencia de las bibliotecas o libraries, donde se implementa en forma de clases. Pueden contener varias funciones, a diferencia de los plugins de CodeIgniter que solamente contienen una, y buscan más el objetivo de ser instalables y compartidos en la comunidad.

CodeIgniter brinda varios ayudantes, típicamente guardados en su directorio system/helpers, pero se pueden crear ayudantes propios o redefinir los existentes, y a su vez almacenarlos en este directorio o crear una carpeta llamada helpers dentro de nuestra carpeta application.

Pues bien, supongamos que tienes un modelo con una función get_user que retorna un objeto con los datos del usuario (o un arreglo de objetos), donde cada usuario tiene ID y NAME. Tienes también un controlador que llama a este método, y normalmente pasaba el objeto $user a la vista para ser mostrado a través de $data['user'].

Como paso intermedio vamos a adicionar un helper, que en este caso nos ayudará con la vista. Le pondremos users_helper.php y lo cargaremos en el controlador con el siguiente código (sin la extensión “.php”):

$this->load->helper('users_helper');

Puedes cargarlo en el constructor si lo usas mucho en las funciones de dicho controlador. Si lo vas a usar en todo el sitio, como planteamos en la necesidad al principio del artículo, entonces cárgalo en la sección de helpers del autoload (application/config/autoload.php).

Ahora en el helper adicionaremos una función que se llame show_user y que recibe como parámetro $user. La función solamente haría lo siguiente:

if ( ! function_exists('show_user'))
{
function show_user($user)
{
echo '<a href="'.site_url().'users/page/'.$user->ID.' ">'.$user->NAME. '</a>';
}
}

Puedes poner “echo” como en el ejemplo (le llamaremos variante echo), o puedes retornar la cadena con return (la llamaremos variante return).

Si usaste la variante return, solo resta que en tu controlador, antes de pasar los datos a la vista, adiciones otro:

$data['$user_linked_name'] = show_user($user);            //en el controlador

Se pone sin el $this->, recuerda que es un procedimiento, no una función de una clase.

En la vista entonces lo usas así:

echo $user_linked_name;                        //en la vista, variante return

Si usaste la variante echo descrita más arriba, no lo llamas en el controlador si no directamente en la vista:

echo show_user($user);                           //en la vista, variante echo

Todo lo que debes asegurar es que en todo momento donde uses la función show_user, le pases un objeto válido con los campos que necesitas usar dentro de la función. Si has programado todo correctamente siguiente el modelo vista controlador, y ahora quieres mostrar también el apellido, solamente debes modificar el modelo donde adicionas el SURNAME en el select de la consulta a la base de datos, y en el helper pondrías

… $user->NAME.''.$user->SURNAME …

De esta manera te será muy fácil modificar la forma en que muestras el nombre del usuario, y garantizas que desde cualquier lugar se llegue a su página personal. Es solo un ejemplo de los múltiples usos que le puedes dar a los helpers.


¿Te ha gustado este Post? Compártelo con tus amigos.

No hay comentarios:

Publicar un comentario

IconIconIcon