Isern Palaus
PHP, CodeIgniter y jQuery
PHP, CodeIgniter y jQuery
10 Abr
Estoy planeando en publicar mi sistema de tienda virtual que he programado en CodeIgniter como open-source… de modo que quiero familiarizarme con las herramientas publicas tipo Git/bitbucket. He decidido crear un perfil y probar con un simple repositorio: codeigniter-googl-helper (con la convención de nombres propuesta por jamierumbelow).
El uso es muy sencillo: necesitas cargar el helper y usar la función googl_url():
Puedes pasar un segundo parámetro TRUE/FALSE para que devuelve la URL original si alguna cosa va mal. Por defecto será TRUE (por defecto devolverá la url original si algo falla):
6 Abr
Mucha gente se pregunta como alojar varios parámetros en la URI, quizá para poder hacer buscas personalizadas y almacenar esos datos en la URI de nuestra aplicación para poder ser reproducida.
Hay una forma muy sencilla con la clase URI de CodeIgniter que nos permite convertir los segmentos de la URI en un array asociativo de clave/valor: $this->uri->uri_to_assoc();.
Teniendo, por ejemplo, una ruta que sea:
dominio.tld/buscar/categoria/zapatos/medida/m/marca/converse/x/y
Podemos usar:
Y obtendremos un array:
Si quisiéramos convertir un array a una URI asociativa simplemente llamaríamos $this->uri->uri_to_assoc(array());.
22 Mar
TipTip es una manera sencilla de crear tips cross-browser que además destaca por no hacer uso ninguno de imágenes y perfectamente adaptado para ser personalizado vía CSS. Se ajusta automáticamente a las medidas de nuestro navegador mostrando siempre bien el Tip (en caso de que modifiquemos el tamaño de la ventana, no dejará de mostrase).
Su configuración es más bien sencilla, como la gran mayoría de estos plugins teniendo varias opciones de personalización y de callbacks:
20 Mar
js-columns es un plugin para jQuery que nos permite crear columnas al estilo de un periódico fácilmente. Mientras esperamos la total integración de CSS3 que nos permitirá hacerlo directamente desde nuestra hoja de estilos, esta es una buena opción.
Aún está un poco verde en su primera versión (31/01/2010) nos permite mostrar columnas dentro de un contenedor (es decir, div) y crea una paginación en caso de que el contenido sea más grande que el contenedor, y el mismo nos permite movernos en él sin tener que actualizar la página. También se adapta a la resolución de nuestro navegador en caso de que modifiquemos el tamaño de la ventana, creando el paginador de nuevo si hiciera falta. A parte, nos deja añadir imágenes fácilmente y nos cuadra la misma con las columnas creadas.
En el mismo rar nos viene una página de ejemplo, pero para crear un div con columnas lo haremos así:
Descargar | js-columns-0.1.zip
Página oficial | js-columns
1 Dic
Hola amigos,
Esta es la revisión del tutorial que escribí hace más de un año. Es prácticamente lo mismo pero con todos los archivos que necesitas en un zip, a parte de ciertas modificaciones necesarias en el procesado de los datos.
Para esa gente que esta buscando un sistema de usuarios funcional con registro, tengo que decir que no tengo tiempo para programarlo todo por mi mismo para este manual. De este modo, como he hecho desde que comencé en CodeIgniter, usaremos una aplicación de terceros: un sistema completo de usuarios. Lo he basado en el trabajo de Popcorn, llamado ‘Redux Authentication’ (v2 beta).
Lo primero que necesitamos es descargar la librería de Redux. Accedemos al proyecto en Google Code y lo descargamos aquí. Puedes ir a la entrada oficial en el foro de CodeIgniter para preguntar sobre la misma.
Cuando descargues la librería, verás que dentro existe una carpeta llamada ‘Example Application’. Usaremos esta aplicación pero necesitamos actualizarla a la ultima versión de CodeIgniter, sino no nos funcionará. Ten en cuenta, que en el pack final ya esta actualizado pero es mucho mejor si lo haces por tu propio pie, aprenderás más.
Es muy fácil actualizarlo: descargas CodeIgniter y lo descomprimes. Ve a ‘Example Application’, renombra la carpeta a ajaxlogin (usaré este nombre en los ejemplos). Entra en la misma y seguidamente a /system. Borra todas las carpetas excepto application, donde esta la aplicación. Accede a la versión descarga de CodeIgniter y copia todas las carpetas que has eliminado (todas menos application). Puedes encontrar la guía oficial de CodeIgniter para la actualización aquí.
Entonces, instala la base de datos y configurala. Lo primero que tienes que hacer es añadir un grupo llamado ‘members’ en la tabla de grupos:
21 Nov
Hola amigos,
Estoy provando la aplicación wpToGo para móviles con el sistema operativo Android. La verdad, me parece una gran aplicación y seguramente la usaré para un nuevo proyecto. Me gustaria poder modificarla o adaptar una aplicación en PHP que trabajara con la misma, pero seria necesario adaptarse a este sistema… ya que mi próximo proyecto lo escribiré integramente des del móvil.
Hasta pronto!
20 Jun
Hola,
Después de mucho tiempo sin escribir, y habiendo salido ya la versión 1.6.2 de CodeIgniter, escribo para presentar una mejora a un helper de CodeIgniter. Concretamente se trata del HTML Helper, el cual incluye funcione para la ayuda en el HTML.
¿Qué hace? ¿Por qué? La última versión del framework añadía la posibilidad de crear tags <link /> con lo que podíamos añadir facilmente archivos CSS, shorcuts.ico u otros similares. Esto se hace mediante:
Y… ¿porqué no para incluir archivos JavaScript? Así que me decidí a hacer mi primer aportación al core de CodeIgniter (y espero que la añadan, claro). Esto consiste en la función script_tag(); para añadir tags <script />.
Y… ¿Cómo se usa? Simplemente es una extensión del helper existente así que debemos colocar el archivo dentro de la carpeta helpers dentro de application con el nombre MY_html_helper.php teniendo en cuenta que el prefijo para las extensiones es “MY_” ($config['subclass_prefix'] = ‘MY_’; en config.php).
El código en cuestión es el siguiente:
En cuanto su uso es sencillo:
Pronto os presentaré también otra modificación del helper URL Helper. Hasta pronto.
30 Mar
Uno de los principales inconvenientes de CodeIgniter es, en parte, visual en la dirección URL. Solemos tener nuestros programas con http://localhost/index.php/controlador/funcion y seguramente quedaría mucho mejor algo tipo: http://localhost/controlador/funcion, ¿verdad? Pues bien, para hacer esto necesitaremos usar Apache y el modulo mod_rewrite.
Para empezar será necesario saber si estamos usando mod_rewrite en Apache. Lo más fácil es, directamente, ir al archivo de configuración (el archivo http.conf) y buscar: mod_rewrite.so. Deberíamos encontrar la siguiente línea:
[code]LoadModule rewrite_module modules/mod_rewrite.so[/code]
Sin embargo, si esta contiene un símbolo de almohadilla (#) es que no esta activado. Si lo contiene al principio, lo borramos, guardamos y reiniciamos el servidor. Así, mod_rewrite se iniciará cada vez al iniciar Apache.
Ahora es el momento de crear nuestro archivo de configuración especifico en el directorio donde este nuestro index.php. A este archivo le pondremos de nombre .htaccess y contendrá lo siguiente:
Bien, con esto ya nos ocupamos de cuando se acceda a nuestra web automáticamente, lo que hace el servidor web, es catalogar como si accediéramos a la misma pero con index.php/ al principio. Solo nos queda una cosa, que CodeIgniter nos construya los enlaces sin el index.php/. De este modo, accedemos al archivo config.php y cambiaremos la variable $config['index_page']:
De:
A:
30 Mar
Uno de los inconvenientes que nos encontramos, a veces, al programar en CodeIgniter es que no podemos pasar datos, por ejemplo, con QUERY_STRINGS, que es esa información que sigue después del símbolo ? en nuestra URL. Un ejemplo de este método sería una URL tipo: http://blog.ipalaus.es/?id=3.
Para solucionar este problema deberemos hacer solo dos cosas:
Con esto, debería funcionar perfectamente. Pronto, más trucos, programas y ejemplos sobre CodeIgniter.
17 Mar
Aunque pueda parecer difícil, hacer consultas en MySQL en CodeIgniter es la cosa más fácil del mundo. Y no solo con MySQL sino con todos los protocolos soportados por el framework. Es importante, sobretodo, que tengamos nuestro CodeIgniter correctamente configurado. Podéis echarle una ojeada al artículo de configuración y iniciación para ver como configuramos los datos de MySQL.
CodeIgniter, a parte, nos da la posibilidad de trabajar con más de una base de datos a la vez, configurando y conectando específicamente a una u otra dependiendo de las necesidades. Sin embargo, no es el objeto de esta explicación.
Supongamos que queremos hacer una consulta parecida a la siguiente:
SELECT * FROM entradas
Lo normal en PHP sería usar un mysql_query(“SELECT * FROM entradas”);, sin embargo en CodeIgniter (y usando librería específica) lo usaríamos de la siguiente forma:
[code lang="php"]
$this->db->query("SELECT * FROM entradas");
[/code]
Conclusión, podemos usarlo de la misma manera. Luego si quisiéramos estructurar los resultados podríamos usar la función foreach de PHP. Sin embargo, hay una manera mucho más fácil en CodeIgniter de tratar las consultas. Ellos lo llaman el Active Record Class y se emplearía, para el ejemplo de antes, así:
[code lang="php"]
$query = $this->db->get("entradas");
// Genera: SELECT * FROM entradas;
[/code]
También en $this->db->get(); es posible usar un segundo parámetro para especificar un LIMIT:
[code lang="php"]
$query = $this->db->get("entradas", 10, 20);
// Genera: SELECT * FROM entradas LIMIT 20,10
[/code]
También podemos especificar el SELECT con $this->db->select(); tipo:
[code lang="php"]
$query = $this->db->select("id,title,body");
$query = $this->db->get("entradas");
// Genera: SELECT id,title,body FROM entradas
[/code]
Existen algunas funciones de MySQL que tienen una propiedad de SELECT específica en CodeIgniter, sin embargo, solo los listaré ya que no los usaremos en aplicaciones básicas:
Esto nos permite unir dos tablas tal que así:
[code lang="php"]
$query = $this->db->join("comentarios", "comentarios.id = entradas.id");
$query = $this->db->get("entradas");
// Genera: SELECT * FROM entradas JOIN comentarios ON comentarios.id = entradas.id
[/code]
[code lang="php"]
$query = $this->db->where("id","38");
$query = $this->db->get("entradas");
// Genera: SELECT * FROM entradas WHERE id = '38'
[/code]
Si quisiéramos podríamos unir varios WHERE, simplemente añadiendo otras condiciones:
[code lang="php"]
$query = $this->db->where("id","38");
$query = $this->db->where("name","Isern");
$query = $this->db->where("surname","Palaus");
$query = $this->db->get("entradas");
// Genera: SELECT * FROM entradas WHERE id = '38' AND name = 'Isern' AND surname = 'Palaus'
[/code]
Pero claro, no todo son igualdades. Quizás queremos buscar una cosa que sea más pequeña que, o diferente, o mayor, etcétera. La forma es especificar en el primer campo, si no hay nada se tomará = por defecto:
[code lang="php"]
$query = $this->db->where("id >","38");
$query = $this->db->where("name !=","Isern");
$query = $this->db->where("surname","Palaus");
$query = $this->db->get("entradas");
// Genera: SELECT * FROM entradas WHERE id > '38' AND name != 'Isern' AND surname = 'Palaus'
[/code]
Al igual que SELECT, hay muchas más propiedades:
[code lang="php"]
$query = $this->db->like("body","sentencia");
$query = $this->db->get("entradas");
// Genera: SELECT * FROM entras LIKE body = '%sentencia%'
[/code]
Sin embargo, podría ser que no quisiéramos que las dos partes fueran aleatorias… De modo que podemos especificar en un tercer campo el % donde debe estar. Puede ser: before, both y after.
[code lang="php"]
$query = $this->db->like("body","sentencia1","before");
$query = $this->db->like("title","sentencia2","both");
$query = $this->db->like("slug","sentencia3","after");
$query = $this->db->get("entradas");
// Genera: SELECT * FROM entradas LIKE body = '%sentencia1' AND title = '%sentencia2%' AND slug = 'sentencia3%'
[/code]
Otros tipos de LIKE que podemos usar son:
En otras versiones se conocia como $this->db->groupby(); pero ha sido eliminado.
[code lang="php"]
$query = $this->db->group_by("title");
$query = $this->db->get("entradas");
// Genera: SELECT * FROM entradas GROUP BY title
[/code]
Para añadir DISTINCT a la consulta:
[code lang="php"]
$query = $this->db->distinct();
$query = $this->db->get("entradas");
// Genera: SELECT DISTINCT * FROM entradas
[/code]
[code lang="php"]
$query = $this->db->having("uid = 32");
$query = $this->db->get("entradas");
// Genera: SELECT * FROM entradas HAVING uid = 32
[/code]
También es posible usar $this->db->or_having();
$this->db->order_by(); permite ordenar un resultado en una dirección especifica. En el primer parámetro especificamos el nombre de la columna y en el segundo la dirección. Las posibilidades del segundo parámetro son: ASC, DESC y RANDOM.
[code lang="php"]
$query = $this->db->order_by("id","DESC");
$query = $this->db->get("entradas");
// Genera: SELECT * FROM entradas ORDER BYid DESC
[/code]
Permite especificar el limite de resultados que quieres que devuelva:
[code lang="php"]
$query = $this->db->limit(30);
$query = $this->db->get("entradas");
// Genera: SELECT * FROM entradas LIMIT 10
[/code]
Permite contar el numero de entradas que hay en una tabla:
[code lang="php"]
$num = $this->db->count_all("entradas");
// Genera: un numero que lo podemos tratar como una variable o escribirlo
[/code]
A diferencia de COUNT ALL, nos permite contar el numero de resultados en la actual consulta:
[code lang="php"]
$query = $this->db->where("name","Isern");
$query = $this->db->get("entradas");
$num = $this->db->count_all_results();
// Genera: un numero
[/code]
Para insertar datos usando el Active Record de CodeIgniter debemos usar un array luego insertar:
[code lang="php"]
$insert = array("title" => "Test",
"body" => "Test",
"name" => "Isern",
"surname" => "Palaus");
$this->db->insert("entradas",$insert);
// Genera: INSERT INTO entradas (title, body, name, surname) VALUES ('Test', 'Test', 'Isern', 'Palaus')
[/code]
Al igual que INSERT usaremos un array para insertar, sin embargo si queremos actualizar, por ejemplo, una entrada deberemos especificar un where:
[code lang="php"]
$update = array("title" => "Test",
"body" => "Test",
"name" => "Isern",
"surname" => "Palaus");
$this->db->where("id","3");
$this->db->update("entradas",$update);
// Genera: UPDATE entradas SET title = 'Test', body = 'Test', name = 'Isern', surname = 'Palaus' WHERE id = 3
[/code]
Al igual que UPDATE usaremos un ID para especificar cual es la que queremos borrar:
[code lang="php"]
$this->db->where("id","3");
$this->db->delete("entradas");
// Genera: DELETE FROM entradas WHERE id = 3
[/code]
Y esto es más o menos todo lo que nos ofrece CodeIgniter para tratar nuestras bases de datos. Espero que haya servido de ayuda a más de uno ya que muchas visitas recibidas buscaban como usar MySQL en CodeIgniter.