septiembre 15, 2009 1

Extendiendo helpers en CodeIgniter

By in CodeIgniter, PHP

Añadir nuevas funciones a los helpers que vienen en CodeIgniter es realmente sencillo. Lo primero que tenemos que hacer es crearnos un archivo con el siguiente formato de nombre “prefijo_nombre_helper.php” en el directorio helpers de nuestra aplicación. El prefijo será usualmente MY, aunque esto es configurable. Vamos a ver un ejemplo y vamos a extender el helper html. Para ello creamos un archivo llamado MY_html_helper.php cuyo código es el siguiente:

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

if( ! function_exists('link_tag_multiple'))
{
  function link_tag_multiple($links)
  {
     $link_result = array();
     if(is_array($links))
     {
       if(count($links) > 0)
       {
         foreach($links as $link)
         {
           $link_result[] = link_tag($link);
         }
       }
       else
       {
         return FALSE;
       }
     }
     else
     {
       return FALSE;
     }

     return $link_result;
  }
}

if( ! function_exists('script'))
{
  function script($src = '', $language = "JavaScript")
  {
    $CI = & get_instance();

    $script = '<script ';
    if(is_array($src))
    {
      $script .= 'language="'.$src['language'].'" src="';
      if(strpos($src['src'],"://") == FALSE)
      {
        $script .= $CI->config->slash_item('base_url').$src['src'];
      }
      else
      {
        $script .= $src['src'];
      }
    }
    else
    {
      $script .= 'language="'.$language.'" src="';
      if(strpos($src,"://") == FALSE)
      {
        $script .= $CI->config->slash_item('base_url').$src;
      }
      else
      {
        $script .= $src;
      }
    }

    $script .= '"></script>';

    return $script;

  }
}

if( ! function_exists('script_multiple'))
{
  function script_multiple($scripts)
  {
    $scripts_result = array();

    if(is_array($scripts))
    {
      if(count($scripts) > 0)
      {
        foreach($scripts as $script)
        {
          $scripts_result[] = script($script['src'], $script['language']);
        }
      }
      else
      {
        return FALSE;
      }
    }
    else
    {
      return FALSE;
    }

    return $scripts_result;
  }
}

Bien como se puede ver con la primera linea evitamos el acceso directo a este archivo. Despues definimos tres nuevas funciones, siempre que no existieran antes. Acabamos de extender nuestro helper. Ahora al cargarlo disponemos de estas tres nuevas funciones.

Si a alguien le intereas esas tres funciones las uso para añadir multiples CSS en una vista y para añadir scripts de JavaScript.

Fe de erratas:

En el código original la función script_multiple hace una llamada a la función script y los parámetros estaban intercambiados. Es decir, antes de la corrección se pasaba $script[‘language’] y $script[‘src’] cuando debería ser $script[‘src’] y $script[‘language’]. Esto ya está corregido en esta edición.

Comparte esta entrada:
Delicious Digg Google Technorati Menéame Fresqui Reddit Facebook Twitter Yahoo! Buzz MySpace Email BarraPunto

Tags: ,

One Response to “Extendiendo helpers en CodeIgniter”

  1. fiko dice:

    Muy buen helper, han pasado los años y aún sirve. Sólo le hice un pequeño cambio y es usar la funcion implode de php para que con las funciones “multiple” también retorne un texto y asi usarlo directamente en las vistas.

Leave a Reply