Creación de Menu con Flash y XML
Prácticas y Ejemplos de XML y Adobe Flash
Tutorial por Jorge Oyhenard (elQuique)
Este tutorial, que pertenece a la serie de Introducción al XML con Adobe Flash, nos muestra como desarrollar un Menú Dinámico con opciones configurables.
Luego de nuestra Introducción al XML, y nuestra Segunda parte Practica, comenzamos a ver la Creacion de un menú con Botones Reutilizables que toman la informacion desde un archivo XML, pueden ver el comienzo de este tutorial acá. Recomendamos la lectura de las dos partes anteriores de nuestro Tutorial de XML para una mejor comprensión.
Comenzaremos creando un archivo XML, yo utilizo Dreamweaver, pero pueden usar cualquier editor de texto, el contenido debe ser asi:
Defino un conjunto general
Luego de esto debemos definir el lector de XML en flash, lo cual es muy sencillo, explico parte de esto en:
Introducción al XML, PHP, Flash y Base de Datos MySQL
La carga desde flash se hace sencilla con la función load, que permite cargar un archivo (xml, html, etc), en mi ejemplo usare esta linea:
La función load, la podemos personalizar, y a la variable opcionesXML deberíamos declararla antes de usarla, la forma básica es:
opcionesXML.ignoreWhite = true; // Con esto prevemos si hay saltos de lineas en blanco, le decimos que lo ignore
opcionesXML.onLoad = function (sucess:Boolean) { // Acá comienza la función de carga definida por nosotros
if (sucess) { // Si todo va bien, hará lo que queremos al cargar ...
/// ACÁ VA LA FUNCIÓN DE CARGA ///
} else { // Si hay algún error ...
trace("Error al Leer archivo XML"); // mostramos un mensaje de error
}
} // acá termina la función de carga definida por nosotros
Donde dice, /// ACÁ VA LA FUNCIÓN DE CARGA /// <<< es la parte fundamental del cargador, por eso la deje separada para explicarla mejor, tal como ustedes merecen :)
Para guiarnos, recordemos como era el código para mostrar 1 solo botón que vimos en la parte anterior del tutorial:
_root["boton1"]._x = 50;
_root["boton1"]._y = 30;
_root["boton1"].texto = "Foro Creativo";
_root["boton1"].linkurl = "http://www.forocreativo.net/";
Una de las cosas que debemos cambiar es boton1, ya que debe ser automático, boton0, boton1, boton2, es se soluciona fácil haciendo así:
siendo i, una variable que cuenta del 0 al 2 (recuerden que los array y xml se cuentan del cero en adelante 0, 1, 2 y no 1, 2, 3 :)).
Lo otro que debe cambiar es la posición _y, ya que el botón debe quedar uno debajo de otro, eso es fácil haciéndolo así:
en el primer caso que i vale 0, 0 x 50 = 0 + 30 = 30 (queda en la misma posición del primer botón), en el segundo caso, cuando i vale 1, 1 x 50 = 50 + 30 = 80, esa sera la posición del segundo, y el tercero 2 x 50 = 100 + 30 = 130, y así sucesivamente si tuviéramos más botones.
y obviamente, la variable texto y linkurl, cambiaran con los valores del XML que estamos leyendo con load, para cada botón y link.
Explicamos ahora la parte de carga tomando en cuenta lo que comentamos en las lineas anteriores sobre esta función:
for(i = 0; i < opciones.length; i++) { // Comienza a repetirse esta parte del código, tantas veces como elementos hay en el XML
_root.attachMovie("mcBoton", "boton"+i, _root.getNextHighestDepth()); // Creamos un MC copiado del original, tal como explicamos anteriormente
_root["boton"+i]._x = 50; // Su posición horizontal sera a 50 px
_root["boton"+i]._y = 30 + (i * 50); // Su posición vertical va cambiando como explicamos hace un momento
_root["boton"+i].texto = opciones[i].childNodes[0].firstChild; // Le asignamos el correspondiente texto al botón
_root["boton"+i].linkurl = opciones[i].childNodes[1].firstChild; // Le asignamos el correspondiente Link a botón
_root["boton"+i].onRelease = function () { // Como todo botón, debemos definir también lo que sucede al presionarlo, ...
getURL(this.linkurl, "_blank"); // ... en este caso le decimos que llame a la url, en una nueva ventana
} // fin de la función de click en el boton
} // termina la repetición del for
explicare este código para que se entienda la relación con el XML, veamos esta línea:
y esta otra línea:
opciones[i] es cada uno de los grupos de (recuerden que son 3 que van de 0, 1, 2, marcado esto por i)
donde...
se refiere al primer elmento del grupo , o sea
se refiere al segundo elmento, o sea
El resultado visual es el mismo, pero claro, tenemos un archivo XML que podemos modificar sin necesidad de reprogramar todo nuestro menú, modificando, eliminando o agregando links, incluso si toman mi SWF y le cambian el archivo XML con el block de notas cambiaran mi menú.
Les dejo el adjunto con el archivo FLA:
Descargar Archivo FLA con los Fuentes de este Tutorial menuXML-3.zip
Acá pueden ver el resultado, y si dan click en cada botón visitaran nuestros sitios:
Nota: en la próxima entrega, veremos una variante, donde agregaremos imágenes y swf cargados externamente.
Comentarios de Creación de Menu con Flash y XML
↑ Tutorial
gelbermoran
2008-06-12 13:59
skylee
2008-06-15 23:38
de hecho el ejemplo aca publicado tampoco lo hace.
alguien puede decirme que anda mal??
skylee
2008-06-16 15:15
simplemente borre la linea que define la accion del botón:
_root["boton"+i].onRelease = function () {
getURL(this.linkurl, "_blank");}
y le puse el siguiente codigo al boton que se encuentra dentro del MC mcBoton:
on (release) {getURL(linkurl, "_blank");}
Ojala y les ayude
guineo
2008-06-22 23:07
MartinZan
2008-09-05 15:47
ferchorc24
2009-03-23 21:52
var opcionesXML:XML = new XML(); // Declaramos la variable opcionesXML, que sera del tipo XML y contendra un nuevo grupo de datos XML
opcionesXML.ignoreWhite = true; // Con esto prevemos si hay saltos de lineas en blanco, le decimos que lo ignore
opcionesXML.onLoad = function (sucess:Boolean) { // Acá comienza la función de carga definida por nosotros
if (sucess) { // Si todo va bien, hará lo que queremos al cargar ...
/// ACÁ VA LA FUNCIÓN DE CARGA ///
opcionesXML.load("menu.xml");
} else { // Si hay algún error ...
trace("Error al Leer archivo XML"); // mostramos un mensaje de error
}
} // acá termina la función de carga definida por nosotros
var opciones:Array = this.firstChild.childNodes; // Creamos una variable del tipo Array y le asignamos los datos que vienen del XML
for(i = 0; i < opciones.length; i++) { // Comienza a repetirse esta parte del código, tantas veces como elementos hay en el XML
_root.attachMovie("mcBoton", "boton"+i, _root.getNextHighestDepth()); // Creamos un MC copiado del original, tal como explicamos anteriormente
_root["boton"+i]._x = 50; // Su posición horizontal sera a 50 px
_root["boton"+i]._y = 30 + (i * 50); // Su posición vertical va cambiando como explicamos hace un momento
_root["boton"+i].texto = opciones[i].childNodes[0].firstChild; // Le asignamos el correspondiente texto al botón
_root["boton"+i].linkurl = opciones[i].childNodes[1].firstChild; // Le asignamos el correspondiente Link a botón
{ // Como todo botón, debemos definir también lo que sucede al presionarlo, ...
getURL(this.linkurl, "_blank"); // ... en este caso le decimos que llame a la url, en una nueva ventana
} // fin de la función de click en el boton
} // termina la repetición del for
gracias
ferchorc24
2009-03-23 22:06
seria bueno que lo pusieras de nuevo para tener una mejor base.
gracias y espero puedas resolver mi duda
alcivar_karina
2009-03-24 17:20
De antemano gracias
ferchorc24
2009-03-24 20:35
se los agradeseria por siempre.
fercho-rc@hotmail.com
espero que me lo puedan mandar me salvarian la vida jejeje
gracias
guillercore
2009-03-28 13:49
Si por favor pueden ayudarme al menos con la variante de cargar swf externos dentro de la misma pelicula en vez de cargar el contenido por URL. desde ya muchas gracias.
niwo
2009-04-23 15:26
niwo
2009-04-23 15:32
en vez de usar getUrl, yo creo un clip de pelicula vacia y le doy el nombre de Holder y la funcion que hace el boton seria
Holder.loadMovie("Nombre_del_swf.swf");
y eso es todo lo que hago. Si quieres el ejemplo (archivo.fla) me mandas un correo a mniwo@hotmail.com