diciembre 10, 2013

Usar la instancia de Codeigniter desde nuestras propias clases automáticamente

Un inconveniente que tiene CodeIgniter es que no se puede acceder de manera tradicional a los recursos del framework desde nuestras propias clases, tal como lo haríamos desde un controlador o bien un modelo.

Generalmente tenemos que hacer algo como: $CI = &get_instance(); para después usar ese objeto en la forma: $CI->db->get(); lo cual pues no se ve tan bien, como cuando hacemos las llamadas al puro estilo de CodeIgniter.

Para resolver esto (si es que contamos con la versión de PHP 5.0 o superior),  podemos utilizar el método mágico __get() para poder incluir las funcionalidades de la instancia de CodeIgniter en nuestra propia clase de manera transparente, del siguiente modo:

Solo hay que agregar este método en nuestra clase y ya podremos hacer llamadas a las diferentes funciones de CodeIgniter de manera tradicional, como $this->load->view() ó $this->db->get()

Los métodos mágicos en PHP son una gran herramienta y te invito a que los descubras y te enteres de la clase de cosas que pueden hacer por ti... por algo son "mágicos" =:-)

septiembre 18, 2012

Redirigir por JQuery usando el método POST

Me hice esta función de Javascript que usa JQuery para resolverme yo mismo un problema y espero que le sea de utilidad a alguien mas.

Es muy común necesitar redirigir al usuario por javascript desde nuestro sitio web a otra página, lo cual es muy simple de hacer simplemente cambiando la propiedad window.location.href o bien abriendo una nueva pestaña en el navegador con la función window.open()

El problema está en si lo que se desea es redirigir el navegador a otra dirección web y además incluir en esa solicitud variables que viajen por el método POST, esto suele ser necesario cuando se consume alguna API, se desea autenticar automáticamente al usuario en algún sitio enviando sus credenciales, se desea consumir un servicio REST "especial", o simplemente enviar a una nueva página información que no sea visible en la dirección URL. Esta al parecer es una duda muy común en el sitio de stackoverflow y a menudo se confunde el problema con una solicitud AJAX (lo cual es muy simple de resolver usando JQuery),  pero en este caso se requiere redirigir al usuario a otra página, no cargar contenido en segundo plano.

La función redirect_by_post(purl, pparameters, in_new_tab)  recibe 3 parámetros muy sencillos, el primero es una cadena con la dirección url de la página a abrir, el segundo es un objeto javascript con las variables a enviar, y el tercero es un valor booleano que de ser verdadero indica que se desea abrir la página en una nueva pestaña del navegador y en caso de ser un valor falso se abre en la misma pestaña activa.

 Se puede ver un ejemplo de su uso aquí:
 

La función simplemente crea un formulario dentro del cuerpo de la página; lo inicializa para que trabaje tal como se le ha indicado a la función que debe comportarse, y una vez enviado el formulario lo elimina del DOM, esto permite trabajar dinámicamente el número de variables a enviar y funciona bien con los principales navegadores.

Si le hacen alguna mejora a esta función pueden postearla en el repositorio de GitHub donde está alojada.

Un saludo y espero les sirva  =:-)