Archive for septiembre, 2009

septiembre 30, 2009 8

Probando CKEditor

By in JavaScript, Librerías

Hace no mucho hablamos en este blog de la nueva versión de FCKEditor, llamada ahora CKEditor. Hoy toca probar muy por encima, en otras entradas se verá con mayor profundidad, este editor WYSIWYG.

Lo primero que tenemos que hacer es incluir el script de CKEditor:

<script type="text/javascript" src="./ckeditor/ckeditor.js"></script>

Como se puede ver tenemos CKEditor dentro de una carpeta con el mismo nombre. Acto seguido, en alguna parte de la página, tendremos que tener un textarea de la siguiente forma:

<textarea name="editor">Esto es un ejemplo de CKEditor</textarea>

Ahora tenemos dos opciones, veamos la primera:

<script type="text/javascript">
CKEDITOR.replace('editor');
</script>

Si optamos por esta opción tendremos que poner el código en cualquier parte de la página, pero siempre después de la definición del textarea que será nuestro editor.
Si queremos colocar el código, que crea el editor, en el head de la página podemos optar por esta otra opción:

<script type="text/javascript">
window.onload = function()
{
    CKEDITOR.replace('editor');
}
</script>

Para que de esta forma se espere a que cargue la página para crear el editor. Podemos ver una demo en la siguiente página:

Demo de CKEditor.

Aquí termina este primer acercamiento a este, más que interesante, editor.

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

Tags: , , ,

septiembre 23, 2009 1

Consultas parametrizadas en PHP. Parte II.

By in PHP

Hoy vamos a hacer la parte que se encarga de parametrizar las consultas usando el cierre de interrogación (?) como indicador de parámetro. Lo primero que vamos a ver es el código y después una explicación del mismo.

<?php

function escapar($valor)
{
 // Retornamos la cadena escapada. Está solo como ejemplo.
 return mysql_escape_string($valor);
}

function prepararParametro($param)
{

 if(is_string($param))
 {
 // Si el parámetro es una cadena retornamos el valor
 // de la cadena escapado entre ' '.
 return "'".escapar($param)."'";
 }
 else if(is_array($param))
 {
 // Si es un array devolvemos una lista de los parametros
 // separados por comas. Cada elemento del array es procesado
 // por esta función para que tenga el formato correcto.
 $retorno = '';
 foreach($param as $p)
 {
 // Cuando retorno es vacio ('') quiere decir que no
 // Tenemos que añadir la coma.
 if($retorno == '')
 {
 $retorno .= prepararParametro($p);
 }
 else
 {
 $retorno .= ','.prepararParametro($p);
 }
 }

 return $retorno;
 }
 else if($param == NULL)
 {
 // Si es NULL devolvemos la cadena 'NULL'
 return 'NULL';
 }
 else
 {
 // Devolvemos el parametro.
 return $param;
 }
}
function prepararConsulta($consulta, $parametros = array())
{
 // Partimos la consulta por los simbolos de interrogacion
 $partes = explode("?", $consulta);

 $resultado = '';
 $num_parametros = count($parametros);

 // Recorremos los parametros
 for($i = 0; $i < $num_parametros; $i++)
 {
 // Juntamos cada parte con el parametro correspondiente preparado.
 $resultado .= $partes[$i].prepararParametro($parametros[$i]);
 }

 $num_partes = count($partes);
 // Si hay más partes que parametros quiere decir que hay una parte final que hay que concatenar
 if($num_partes > $num_parametros)
 {
 $resultado.= $partes[$num_partes -1];
 }

 // Devolvemos la consulta preparada
 return $resultado;
}
?>

En este código hemos definido tres funciones:

  • escapar: Simplemente llama a mysql_escape_string para escapar las cadenas.
  • prepararParametro: prepara los parámetros en función de su tipo de dato.
  • prepararConsulta: esta es la que se encarga de parametrizar la consulta.

La función prepararParametro va comprobando el tipo de dato del parámetro, si es cadena, array, null o ninguno de estos. Cuando es cadena devuelve el parámetro entre apóstrofos y después de haber llamado a escapar, para escapar caracteres especiales. Cuando es un array devuelve cada uno de los elementos de este, después de procesarlos, concatenados y separados por comas, algo útil para usar el operado IN. Si el valor del parámetro es NULL devuelve la cadena NULL. Si no es de ninguno de los tipos anteriores simplemente devuelve el parámetro tal cual, asumiendo que es un número.

La función prepararConsulta parte la consulta pasada por el caracter ?. Luego va concatenando una de estas partes con el correspondiente parámetro. Si al final hay más partes que parámetros concatena la última parte al final y devuelve la consulta con los parámetros sustituidos.

Hay que tener en cuenta que no se realizan comprobaciones como que el número de parámetros pasado sea igual al número de parámetros que aparecen en la consulta. También se podría mejorar de varias formas, pero esta es una buena primera aproximación al problema.

Al final el código, o al menos eso me parece a mí, es mucho más claro que la propia explicación de como funciona. Si hay algo que no entendéis lo podéis preguntar en los comentarios. Por su puesto cualquier mejora que se pueda hacer se agradece.

En el próximo artículo de la serie veremos como usar parámetros con la forma :nombre_parámetro.

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

Tags: , ,

septiembre 17, 2009 0

Votando las entradas del blog con WP-PostRating

By in WordPress

He añadido un plugin para WordPress llamado WP-PostRating. Mediante este plugin los usuarios del blog pueden votar las entradas de este, de modo que puedo hacerme una idea de que le gusta más a los lectores y que temas no son tan interesantes. Por supuesto los comentarios son una forma de recibir feedback, pero esta es también una muy buena forma de saber la opinión de los lectores, ya que nos evita tener que escribir algo.

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

Tags: , ,

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: ,

septiembre 14, 2009 0

Edición de imagenes en WordPress 2.9

By in WordPress

Aunque no hace mucho que salió la versión 2.8 de WordPress, la 2.9 ya está en desarrollo. Via anieto2K hay un par de enlaces muy interesantes:

Esta es una captura del nuevo editor:

Editor de Imágenes de WordPress 2.9
Editor de Imágenes de WordPress 2.9

Como se puede apreciar tendremos un mejor control sobre estas, y no dependeremos de ningún editor externo para hacer pequeños cambios (como rotar o escalar) en las imágenes. Estaría bien que apareciera una pequeña demo para poder ver que tal funciona.

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

Tags: , ,