FancyUpload
- 31/07/2008
- 12:59 am
FancyUpload es una extensión de Mootools que permite hacer upload de archivos incluyendo barra de progreso. Esta basado en Swiff la clase de Mootools que permite incluir archivos SWF en HTML.
Si hacemos uso de la etiqueta input file no se puede hacer un seguimiento del progreso del upload y mucho menos aplicar estilos para integrarse correctamente con nuestro diseño. Esta librería utiliza un SWF que contiene las funciones necesarias para detectar el progreso de la carga, restringir a determinado tipo de archivos, entre otras opciones las cuales son características de flash.
Obteniendo los archivos
Lo primero es obtener los archivos necesarios: mootools.js desde Mootools, luego los archivos FancyUpload2.js, Swiff.Uploader.js, Fx.ProgressBar.js y Swiff.Uploader.swf desde FancyUpload.
Incluyendo los archivos
Lo siguiente es incluir los archivos recién descargados en nuestro HTML (En nuestro caso hemos colocado los Javascript en una carpeta llamada js), esto lo hacemos de la forma:
Creando el Formulario
Lo que necesitamos crear son dos elementos, uno llamado demo-status que mostrará el progreso de la carga y demo-list que contiene la lista de archivos a subir. Además de ello necesitamos dos botones o links uno para seleccionar el archivo y el otro para iniciar el upload.
-
<div id="demo-status" class="hide">
-
<a href="#" id="demo-browse-all">Browse Files</a> |
-
<a href="#" id="demo-upload">Upload</a>
-
<img src="img/bar.gif" class="progress overall-progress" />
-
</div>
-
<img src="img/bar.gif" class="progress current-progress" />
-
</div>
-
<div class="current-text"></div>
-
</div>
-
<ul id="demo-list"></ul>
Implementando el Upload
Creamos una instancia de la clase FancyUpload2 el cual recibe como parámetros el elemento html para el estado de la carga, el elemento para el listado de archivos y luego un array de opciones donde indicamos a donde enviar los archivos, cual será el nombre con el cual se enviaran los archivos y finalmente la ruta al swf que contiene las funciones necesarias para el funcionamiento de esta librería.
-
window.addEvent('load', function() {
-
var swiffy = new FancyUpload2(
-
$('demo-status'),
-
$('demo-list'),
-
{
-
'url': 'upload.php',
-
'fieldName': 'archivo',
-
'path': 'Swiff.Uploader.swf'
-
}
-
);
-
$('bt-browse').addEvent('click', function(){
-
swiffy.browse();
-
return false;
-
});
-
$('bt-upload').addEvent('click', function(){
-
swiffy.upload();
-
return false;
-
});
-
});
Hay que notar también que hemos agregado los eventos para los botones que abrirán el selector de archivos y el inicio del upload.
Guardando los archivos con PHP
PHP recibe los archivos de forma normal y procedemos a guardarlo, para ello accedemos al archivo subido con el nombre asignado en el parámetro fieldName, entonces obviando la validación por propósitos de facilitar la explicación tendríamos:
-
// file: upload.php
-
$file = $_FILES['archivo']['tmp_name'];
-
$name = $_FILES["archivo"]['name'];
-
$status = "Archivo subido: <b>".$name."</b>";
-
} else {
-
$status = "Error al subir el archivo";
-
}
-
} else {
-
$status = 'Archivo vacio intentelo nuevamente!';
-
}
-
echo $status;
Pueden ver el ejemplo funcionando en: http://samples.unijimpe.net/fancyupload/ en donde se puede observar lo intuitiva que resulta ser la pantalla para subir archivos. Esto es muy importante por que le permite a los usuarios saber si efectivamente se esta subiendo los archivos y sobre todo que nos hemos olvidado del típico formulario al cual no se le podía aplicar estilos de forma adecuada.
Posts Relacionados
Firebug Lite
- 29/07/2008
- 9:46 pm
Firebug es una de las mas populares herramientas para depurar websites, es muy completo y versátil pero solo esta disponible como complemento para Firefox. Entonces para los usuarios de Safari, Internet Explorer u Opera ahora esta disponible Firebug-Lite, el cual es un javascript que automáticamente analiza el html seleccionado y nos permite mediante utilizar la mayoría de las funcionalidades de Firebug.

Utilizar Firebug-Lite Online
El primer método y el mas sencillo es utilizar Firebug-Lite de forma Online, el cual no requiere ninguna instalación o código adicional y el cual se puede aplicar a cualquier web. Lo que tienes que hacer es agregar el siguiente enlace a barra de favoritos, este enlace contiene un Javascript que ejecutará de forma remota el script necesario para el funcionamiento de Firebug.
- Agregar a Favoritos: Firebug Lite
Utilizar Firebug-Lite Offline
La segunda forma servirá para el caso que estemos desarrollando la aplicación sin conexión a Internet. Para ello es necesario descargar los archivos fuente de esta librería: firebug-lite.js y pi.js. Además de ello es necesario un archivo firebug-lite.css que contiene la hoja de estilos para la consola de Firebug y finalmente una imagen firebug.gif.
Luego para ejecutar Firebug-Lite, es necesario agregar las librerías pi.js y firebug-lite.js al header el HTML que deseas analizar, en mi caso he puesto los archivos en la carpeta firebug con lo cual se tendría::
Listo, abres el HTML en un Browser y automáticamente se abrirá Firebug no importando el navegador que estes utilizando. Hay que notar que para que funcione adecuadamente la versión Offline es necesario editar el archivo firebug-lite.js en la línea 18 en colocamos la ruta correcta al archivo firebug-lite.css.
-
new pi.element("link").attribute.set("rel","stylesheet").attribute.set("href","firebug/firebug-lite.css").environment.getElement()
Como pueden ver el utilizar esta librería esta aun click de distancia y ahora ya no estamos limitados a utilizar Firefox para realizar la depuración de nuestras aplicaciones. Finalmente les dejo los archivo fuente de como implementar la versión Offline de Firebug-Lite.
Posts Relacionados
- Box.net/lite
- YSlow plugin para Firebug
- Plugins Firefox para Desarrollo
- XRAY: Inspector HTML Online
- Adobe Flash Professional CS3
JSON con Mootools
- 20/07/2008
- 7:21 pm
JSON (JavaScript Object Notation) es un formato basado en Javascript para intercambio de datos. JSON es una alternativa a XML pues brinda sencillez al momento de leer los datos, en Javascript puede ser analizado utilizando eval(), además provee sencillez para manipular los datos. Para mas información acerca de las diferencias con XML además de sus virtudes en: JSON.
Obteniendo los datos
Para nuestro ejemplo vamos a utilizar Google AJAX Search API, el cual es un servicio que nos utilizar los resultados de búsqueda de Google. No utilizaremos la funciones que provee Google si no que lo haremos utilizando JSON, para ello encontramos documentación en Flash and other Non-Javascript Environments.
Si deseamos obtener los resultado de la búsqueda de la palabra Google, lo podemos hacer accediendo al siguiente URL:
http://ajax.googleapis.com/ajax/services/search/web?v=1.0&q=Google
Este URL devolverá un objeto conteniendo los resultados de la búsqueda en un array ademas de estadísticas de resultados:
-
{ "results": [
-
{
-
"GsearchResultClass": "GwebSearch",
-
"unescapedUrl": "http://en.wikipedia.org/wiki/Paris_Hilton",
-
"url": "http://en.wikipedia.org/wiki/Paris_Hilton",
-
"visibleUrl": "en.wikipedia.org",
-
"cacheUrl": "http://www.google.com/search?...",
-
"title": "\u003cb\u003eParis Hilton\u003c/b\u003e",
-
"titleNoFormatting": "Paris Hilton",
-
"content": "In 2006, she released her debut..."
-
},
-
{
-
"GsearchResultClass": "GwebSearch",
-
"unescapedUrl": "http://www.imdb.com/name/nm0385296/",
-
"url": "http://www.imdb.com/name/nm0385296/",
-
"visibleUrl": "www.imdb.com",
-
"cacheUrl": "http://www.google.com/search?...",
-
"title": "\u003cb\u003eParis Hilton\u003c/b\u003e",
-
"titleNoFormatting": "Paris Hilton",
-
"content": "Self: Zoolander. Socialite..."
-
},
-
...
-
],
-
"cursor": {
-
"pages": [
-
{ "start": "0", "label": 1 },
-
{ "start": "4", "label": 2 },
-
{ "start": "8", "label": 3 },
-
{ "start": "12","label": 4 }
-
],
-
"estimatedResultCount": "59600000",
-
"currentPageIndex": 0,
-
"moreResultsUrl": "http://www.google.com/search?..."
-
}
-
}, 200, null)
Creando un Proxy
Normalmente cuando se accede a datos JSON se hacen sobre el mismo dominio, pero como nosotros deseamos acceder a los datos de Google necesitamos crear un proxy para cambiar de dominio los datos recibidos. Esto por que nos browsers no permites acceder a datos de otros dominios. Entonces creamos el archivo proxy.php.
Cargando los datos con Mootools
La nueva versión de Mootools trae el método Request.JSON que permite cargar y parsear automáticamente datos JSON, para nuestro caso cargaremos los datos del proxy recién creado y lo mostraremos utilizando la función alert. Primero incluimos la librería Mootools en el header de nuestro html y luego obtenemos los datos JSON.
-
<script type="text/javascript" src="mootools.js"></script>
-
window.addEvent('domready', function() {
-
var path = "proxy.php?query=unijimpe";
-
var json = new Request.JSON({url: path, onComplete: onLoad});
-
json.get();
-
function onLoad(obj){
-
var results = obj.responseData.results;
-
for (i=0; i<results.length; i++) {
-
var tmp = results[i];
-
alert(i + " --> " + tmp.title + "\n" + tmp.url)
-
}
-
}
-
});
Pueden ver el resultado en: /json/index.html.
Como pueden observar, la función onLoad se ejecuta cuando se ha completado la carga de los datos, dentro de esta función podemos acceder a los datos recién cargados como si fueran objetos es decir podemos acceder a todas sus propiedades utilizando el operador punto (.).
Entonces si deseamos mostrar la cantidad total de resultados podríamos hacer mediante obj.estimatedResultCount, entonces para acceder a los resultados de la búsqueda accedemos a obj.responseData.results el cual contiene un array con los resultados de la búsqueda por lo cual utilizamos un FOR para acceder a cada elemento.
Ahora si deseamos mostrar estos resultados como HTML y no como alerts, lo primero es crear un div en donde escribiremos los resultados y modificar brevemente nuestro script.
-
window.addEvent('domready', function() {
-
var path = "proxy.php?query=unijimpe";
-
var json = new Request.JSON({url: path, onComplete: onLoad});
-
json.get();
-
function onLoad(obj){
-
var tmpHTML = "";
-
var results = obj.responseData.results;
-
for (i=0; i<results.length; i++) {
-
var tmp = results[i];
-
tmpHTML+= "<a href='"+tmp.url+"'>"+tmp.title+"</a>";
-
tmpHTML+= "<br />"+tmp.content+"<br/>";
-
tmpHTML+= "<i>"+tmp.url+"</i><br /><br />";
-
}
-
$("results").set("html", tmpHTML);
-
}
-
});
-
<div id="results">Loading...</div>
Pueden ver el resultado en: /json/json.html.
Finalmente, agregamos un campo te texto y un botón para crear un formulario de búsqueda para mostrar la potencia de JSON. Esto lo hacemos con el siguiente código.
-
window.addEvent('domready', function() {
-
var path = "proxy.php?query=unijimpe";
-
var json = new Request.JSON({url: path, onComplete: onLoad});
-
json.get();
-
function onLoad(obj){
-
var tmpHTML = "";
-
var results = obj.responseData.results;
-
for (i=0; i<results.length; i++) {
-
var tmp = results[i];
-
tmpHTML+= "<a href='"+tmp.url+"'>"+tmp.title+"</a>";
-
tmpHTML+= "<br />"+tmp.content+"<br/>";
-
tmpHTML+= "<i>"+tmp.url+"</i><br /><br />";
-
}
-
$("results").set("html", tmpHTML);
-
}
-
-
function sendSearch() {
-
$("results").set("html", "Loading...");
-
path = "proxy.php?query=" + $("q").value;
-
json = new Request.JSON({url:path, onComplete: onLoad});
-
json.get();
-
}
-
-
$("bt").addEvent("click", sendSearch);
-
});
Pueden ver el resultado en: /json/search.html.
Como pueden ver utilizando Mootools para manejar JSON es muy fácil el implementar aplicaciones con acceso remoto a datos o también llamado AJAX solo que no estamos utilizando XML y además tenemos la posibilidad de formatear a nuestro antojo los resultados obtenidos.
Mas Información
Posts Relacionados



