Arxiu

Arxiu de la categoria ‘Programació’

Errores 404 con Ajax (y jQuery) en CakePHP

dissabte, 10 de juliol de 2010 Booletaire Sense comentaris

En este tutorial aprenderéis a gestionar los errores de CakePHP con y sin Ajax.

Lo primero de todo que tenéis que hacer es poner el debug a cero en vuestro fichero core.php, ya que con debug > 0 no funcionaría.

Ahora pasemos a crear (si no existe) el fichero /app/app_error.php con el siguiente contenido.

<?php // /app/app_error.php
class AppError extends ErrorHandler
{
	function error404($params)
	{
		// Importamos RequestHandler para verificar si la conexión es mediante Ajax
		App::import('Component', 'RequestHandler');
		$this->RequestHandler = new RequestHandlerComponent();
		if ($this->RequestHandler->isAjax())
		{
			// En caso de ser Ajax creamos la cabecera 404
			$this->controller->header("HTTP/1.0 404 Not Found");
			// y pasamos algunas variables a la vista que ahora crearemos
			$this->controller->set('params', $params);
			$this->controller->layout = 'ajax';
			// Renderizamos la vista
			$this->_outputMessage('ajax_error404');
		}
		// Aquí iría la gestión del error sin Ajax, en nuestro caso llamamos al método padre.
		else parent::error404($params);
	}
}

Pasemos a la creación de la vista… /app/views/errors/ajax_error404.ctp

<?php // /app/views/errors/ajax_error404.ctp
$error404 = array('message' => __("The requested address was not found on this server.",true), 'params' => $params);
echo $this->Javascript->object($error404);

Tan simple como eso : )

Finalmente, añadamos esto a nuestro template por defecto, o a nuestra hoja javascript común:

jQuery(document).ready(function($) {
	// Ajax not found
	$(this).ajaxError(function(event, request, opts){
		if ( request.status == 404 )
		{
			alert(eval("(" + request.responseText + ")").message);
		}
	});
});

Con esto mostraremos una alerta mostrando el texto que hayamos definido en nuestro app_error al usuario que intente adquirir una url no existente en nuestra aplicación CakePHP.

Evidentemente podéis gestionar más errores a parte del típico error 404, simplemente añadiendo algún if más al código javascript y el método correspondiente en el app_error para gestionarlo.

El parámetro $params lo he pasado por si queréis utilizar alguna de sus variables. Por ejemplo, podríamos mostrar al usuario un mensaje tipo “La página /requetefuck no existe”.

Nota: Si estáis utilizando Cake 1.2 tened en cuenta que tenéis que reemplazar en la vista ajax_error404 el $this->Javascript por $javascript, ya que ha variado de una versión a otra.

Watermark & Image Component for CakePHP

dimarts, 6 de abril de 2010 Booletaire Sense comentaris

Time ago I created a CakePHP component for applying watermarks to images. Slowly I extended it and now in addition to applying watermarks is used to rotate and resize images.

You can still improve it a lot, especially in terms of code, but as it works and I have little time, I can barely make improvements.

Tested from:

  • Linux php 5.2.10
  • Linux php 5.2.13
  • Windows php 5.3.1
  • Windows php 5.3.2

Well Known Bugs:

  • Uses the method mime_content_type that as they say in php.net: This function has been deprecated as the PECL extension Fileinfo provides the same functionality (and more) in a much cleaner way.
  • By rotating a transparent PNG image at an angle that is not a multiple of 90º the extra generated background is not transparent.

Download:

http://github.com/elboletaire/Watimage/archives/master

Llegir més…

Gigya: Todas las redes sociales optimizadas para el desarrollo

dijous, 1 de abril de 2010 Booletaire Sense comentaris

¿Cuántas veces has tenido que integrar una de tus aplicaciones web con Facebook? Y después de Facebook, tuviste que hacer la integración con Twitter, la de LinkedIn y otras tantas más.

Con Gigya tienes una API unificada para la mayor parte de las redes sociales. En apenas media hora habrás integrado el login de tu página con Facebook, Twitter, LinkedIn, OpenID, Yahoo, MySpace o cualquier otra de las redes sociales que puedes integrar con Gigya.

Para utilizarlo simplemente necesitas registrarte en su web y añadir aquellos servicios que quieras utilizar desde el panel de control:

Además de la integración que podáis hacer vosotros mismos junto con la documentación de Gigya podéis encontrar plugins e integraciones ya hechas para CMS como WordPress o Joomla.

Validar datos duplicados en CakePHP

dijous, 25 de febrer de 2010 Booletaire 5 comentaris

Hoy mismo he necesitado de una validación para verificar si un dato ya existe en la base de datos. Dado que CakePHP 1.1 (en versiones posteriores a la 1.2 podéis utilizar “isUnique”) no lleva una validación en su núcleo para estos menesteres he tenido que crearla y ahora la comparto con vosotros:

/**
 * Verifica si un campo existe en la base de datos
 * Si estamos editando se excluye el valor guardado en la validación
 * @param array $data
 * @param string $field Nom de la cel·la a verificar
 * @return
 */

public function checkUnique($data)
{
	$field = array_pop(array_keys($data));
	$data = array_pop(array_values($data));

	// Si estem editant...
	if(isset($this->data[$this->name]['id']))
	{
		if ($field == $this->field($field, array($this->name . '.id' => $this->data[$this->name]['id'])))
		{
			return true;
		}
	}
	// Si no estem editant...
	if($this->hasField($field)) {
		return $this->isUnique(array($field => $data));
	}
}

Para utilizarlo no tenéis más que añadir el trozo de código en el modelo deseado (normalmente en AppModel, para poder utilizarlo desde cualquier modelo) y añadir la validación en el modelo que queráis:

var $validate = array('NOMBRE DE LA CELDA A VALIDAR' => array(
	'rule'		=> 'checkUnique',
	'message' 	=> 'Blahblahblah'));

Un ejemplo muy común:

var $validate = array('username' => array(
	'rule'		=> 'checkUnique',
	'message' 	=> 'Ya existe un usuario registrado con este nombre!'));

Que lo disfrutéis :)

Edición: Se me olvidó comentar que, a diferencia del método de validación checkUnique que se utiliza en el post Inegrando CakePHP y PhpBB 3.x, este método sirve también a la hora de editar un ítem ya que, en ese caso, retorna true si el valor de la celda coincide con el ya guardado en la base de datos.

Categories: Programació, Web Etiquetes:, , , ,

MyJDB, un sistema de base de datos en JavaScript

dijous, 25 de febrer de 2010 Booletaire Sense comentaris

El próximo lunes 1 de marzo (de 2010) verá la luz la primera versión de MyJDB, un sistema de bases de datos inspirado en JavaScriptDB (muerto hacia el 2005..) resucitado por Luis García.

Lo mas destacado de esta versión (beta 1.1.0), que es más un puente hacia lo que se quiere llegar, es la optimización del código, aunque es la primera optimización los resultados han sido cuanto menos sorprendentes. Entre sus cambios destacan los siguientes:

  • Relicenciamiento a GPL 3.
  • Documentación interna completa y en Ingles, así como las variables que pasan del catalán al ingles para internacionalizar el proyecto.
  • Reestructuración completa del código.
  • Nuevo analizador sintactico del Select sobre un 40% más rápido.
  • Tipado de datos de los campos de las tablas, lo que nos ayuda a evaluar correctamente números, cadenas y sobre todo fechas.
  • El algoritmo para realizar JOIN entre dos tablas es alrededor de 640 veces más rápido.
  • Se ha añadido el uso de between, el uso de parentesis, reconocimiento de ‘<=>’.
  • Implementación de la clausula limit.
  • Reconocimiento de is, is not, is null, is not null y unknown.
  • Realización de un select con sólo contando el tiempo de la clausula where alrededor de un 40 veces más rápido.
  • Evaluación de la clausula where alrededor de un 94% más rápido.
  • La evaluación de una condición LIKE es alrededor de 8 veces más rápida.
  • La clausula Order by es alrededor de 2 veces más rápido.

Los tiempos han sido medidos con Firefox y el prerfilador de Firebug, con lo que aun queda probarlo en el resto de navegadores, y este es el objetivo de lanzar la beta, probarla y hacerla compatibles con el resto de navegadores (no van a incluir IE6, sólo versiones de IE7 hacia arriba).

Yo personalmente me pregunto cómo será todo el tema de la seguridad… ya que siendo una base de datos mediante JavaScript lo primero en lo que pienso es la manipulación que se puede hacer de código gracias a aplicaciones como firebug.

CSS hacks para Firefox, Internet Explorer, Chrome, Opera, Safari…

dilluns, 8 de febrer de 2010 Booletaire 5 comentaris

Todos sabemos lo divertido y emocionante que es hacer la compatibilidad crossbrowser de nuestras páginas web.

Por suerte para nosotros, existen un gran número de hacks CSS que podemos utilizar en cada una de las versiones de cada navegador para ayudarnos a poder mostrar por igual los contenidos de una web en todos los navegadores.

Partiré de este estilo:

.selector {
	color: #CCCCCC;
}

Empezaré por Internet Explorer, dado que es para el que usualmente se necesitan más hacks:

Internet Explorer 6
.selector {
	_color: #CCCCCC;
}

Llegir més…

Integrando CakePHP y phpBB 3.x

dissabte, 23 de gener de 2010 Booletaire 3 comentaris

Ocultar

Antes de empezar…

Más o menos al empezar con este blog expliqué cómo podíais hacer un registro de usuarios externo a phpBB3 con PHP. Hoy voy a contaros cómo hacer para implementar el registro y login de usuarios de phpBB3 en CakePHP.

Podéis ver, como ejemplo, la página de underave. Pero os pido por favor que no os registréis si no vais a utilizar la cuenta.

Antes de empezar con el tutorial, por favor, leeros el tutorial anterior sobre el registro de usuarios externo a phpBB3, ya que habrá ciertos aspectos que pasaré por alto por estar explicados en ese tutorial.

Además de miraros ese tutorial deberíais echar un vistazo a la documentación del componente Auth, ya que sin él el registro de usuarios sería otra cosa…

Como siempre, empiezo con lo que he utilizado para llevar a cabo el tutorial…

  • CakePHP (v. 1.2.4.8284 [1.2.5 stable])
  • phpBB 3.0.2
  • Componente de integración de phpBB3 (que ahora crearemos)

Aunque yo haya utilizado la versión 3.0.2 de phpBB, debéis saber que este sistema debe funcionar igual de bien en cualquier versión de phpBB 3 ;)

Parto de la base de que tenéis creado un modelo y un controlador encargados de gestionar los usuarios de vuestra aplicación Cake. En mi caso los he llamado “users“, aunque podéis llamarlos “usuarios”, “members“, o como os dé la gana.

Es decir, doy por supuesto que ya tenéis un sistema de usuarios funcionando en vuestra aplicación CakePHP. En este tutorial sólo os explicaré cómo integrar el registro y login de phpBB3, así que todo lo demás (validaciones de datos, creación de formularios, funcionamiento de la clase Auth…) quedará por supuesto (lo cual no quiere decir que no vaya a haber código al respecto ;) ).

Llegir més…

Adiós MultipleIE… Hola IETester!

divendres, 22 de gener de 2010 Booletaire 4 comentaris

Acabo de descubrir IETester, una aplicación para Windows (compatible con todas sus versiones) con la que podéis comprobar cómo se ven vuestras webs desde Internet Explorer (desde la versión 5.5 hasta la 8).

Si habéis probado ‘MultipleIE’ sabréis lo magníficamente bien que va y probablemente también sabréis que dejó de funcionar con Windows Vista.

No me enrollo más, os dejo aquí una imagen y el enlace para que lo probéis ya mismo:

IETester

Categories: Programació, Web, Windows Etiquetes:,