Error al cargar galerías dinámicas AS3 con XML
2 seguidores
Hola, ante todo, juro y perjuro que en cuanto tenga algo de dinero pagaré a un profesional de esto... dios como odio programar.
Después de mi declaración de intenciones os pido ayuda para resolver una cuestión, estoy haciendo mi portfolio de fotografía. El cual tiene como 12 galería diferentes, he conseguido hacer una galería dinámica con xml, y esperaba poder cargarlas en otro swf que es el home.
El problema es que cuando el home está en otra carpeta no me detecta el xml, y no encuentro ni en google ni aquí ninguna solución para el tema.
Como puedo afrontar el tema?
GRacias de antemano.
tpmmds
...with a little help from my friends, que cantaban los Beatles ;-)
Me alegro de que al final lo hayas conseguido. Y nada, como se dice, pásate cuando quieras. Estás en tu... foro.
Un saludo.
selu
tpmmds
gracias, gracias, gracias... diste en el clavo!!! había probado a ponerlo varias veces así... y el caso es que como soy un baturro no había pillado que el getUrl había que ponerlo en los dos atrubutos...
funciona perfecto...
ya sabes... cuando quieras unos dias de buen rollo con tu familia o como sea quedas oficialmente invitado... y por supuesto como te comenté trabajo que necesite flash puedo contar con tus servicios profesionales?.
saludos y mil gracias de nuevo.
tpmmds
Hola:
Creo que la clave está en la línea:
var thumb:Thumbnail=new Thumbnail (picsList[i].attribute("thumb"),picsList[i].attribute("source"),i);
Mira el xml, a ver si las etiquetas tienen los atributos "thumb" y "source". Si en el xml, dichos atributos son rutas a imágenes, ahí es donde hay que colocar la funcioncilla getUrl, en la forma:
var thumb:Thumbnail=new Thumbnail (getUrl(picsList[i].attribute("thumb")), getUrl (picsList[i].attribute("source")),i);
Y otra cosa, en esos atributos del xml debes poner LAS RUTAS EXACTAS de tus imágenes con sus respectivos nombres; porque imagino que si es un ejemplo que has conseguido, el xml hará referencia a las imágenes/carpetas que el que lo hizo utilizó :-)
Un saludo, y ánimo, que casi está.
selu
estoy casi seguro de que tengo la fórmula pero no como finalizarla...
es en la clase, donde tengo un URLRequest... porque en el CreateThumbs, llama a la clase Thumbnail uqe es de donde saca las fotos...
ahi veo que puede ser:
public function Thumbnail(thumbLink:String, picLink:String, description:Number):void
{
this.picAddress=picLink;
this.thumbAddress=thumbLink;
this.descriptionIndex=description;
this.loader.load(new URLRequest (getUrl(this.thumbAddress)));
this.loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, preLoad);
this.loader.contentLoaderInfo.addEventListener(Event.COMPLETE, displayThumb);
}
le he añadido el getUrl, y la función... pero sigue igual... esta es la createThumb
[code]function createThumbs():void {
for (var i:int = 0; i
tpmmds
Hola de nuevo:
Mira la función
createThumbs();
que tiene pinta de ser la que cree las miniaturas de las que hablas. Posiblemente tenga también un URLRequest con las rutas de las miniaturas. Haz lo mismo, y ánimo :-)
Un saludo.
selu
tpmmds
si si todo va en el mismo folder.y en el mismo domino.. si es una web muy básica que a los inexpertos y no profesionales se nos hace un mundol... prometo colgarla en cuanto esté...
selu
Gracias por tu ayuda estas a punto a punto de conesguirlo porque con lo baturro que yo soy, jejejej
En el swf de referencia me lo carga perfecto, pero en el home, me carga el preloader y el la foto de inicio, lo único que no me carga son las pequeñas..
te dejo el código tal y como lo he transformado de la función loaded... al que le añadí el getUrl en el URLREQuest...
el caso es que pienso que lo hice mas o menos bien poruqe cuando está completa debe cargar el pic one... y me lo carga... solo que no me carga los thumbnails... también he probado a añadir la función a la clase thumbnail... pero el picloader lo carga sin añadirselo...
gracias de veras por el apoyo.
function xmlLoaded(e:Event):void
{
picsXML= XML(e.target.data);
picsList=picsXML.children();
createThumbs();
picLoader.pictureLoader = new Loader();
picLoader.pictureLoader.load(new URLRequest(getUrl (picsList[0].attribute("source"))));
picLoader.description.text=picsList[0].attribute("text");
picLoader.pictureLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, displayPicOne);
}
tpmmds
Hola:
Pero todo esto es pensando que estás cargando TODO del mismo dominio; que, por ejemplo, todos los swf's, xml's e imágenes están dentro de la carpeta site.
Si haces referencia a algo que esté fuera, por temas de seguridad de FP tienes que hacer un crossdomain.xml para autorizar las nuevas localizaciones. Y esto es más lío, por lo que es preferible que lo tengas todo junto (en distintas carpetas, pero todas dentro de un mismo padre).
Un saludo.
selu
te estas ganando una cena opulenta y cama en la paradisiaca isla de la palma donde vivo...
gracias... estoy viendo en la xmlLoaded para cambiarlo... en cuanto tenga éxito o fracaso lo posteo.
tpmmds
Ah, no me había dado cuenta, la línea:
var url:String=getUrl(xmlLoader);
no es necesaria.
getUrl lo que hace es añadir a una determinada ruta relativa, la ruta donde está el swf, para que se cargue de la carpeta correcta la imagen o el xml
tpmmds
Hola:
Habría que cambiar la línea:
xmlLoader.load(new URLRequest(getUrl("data/picsXML.xml")));
He añadido dentro de URLRequest una llamada a la anterior función getUrl.
Posiblemente en la función de controlador xmlLoaded tengas más URLRequest, y también habría que hacer lo mismo. El código que has puesto sirve para cargar el xml, pero después hay que leer dicho xml y cargar las imágenes.
Un saludo.
selu
Primero gracias, no sabes cuanto valoro la ayuda, porque a pesar de no tener ni idea de as3 ni programar, me lo estoy currando un poco mucho para hacer algo que a simple vista parece sencillo pero que no entiendo. Y la verdad no quiero ir andando haciendo preguntas sin antesinvestigar lo más profundamente sobre el tema. Pero este me ha superado.
perdona mi torpeza... y sobre todo mi ignorancia.
Esto es como he integrado el código que me has dado... ya que no lo entiendo mucho... y no lo entiendo por que las condicionales siempre fueron un problema para mi. Así que lo posteo, y si fueras tan amable de echarle un vistazo lo agradecería mucho... poruqe me da error en el string.
Saludos
var picsXML:XML;
var picsList:XMLList;
var xmlLoader:URLLoader = new URLLoader();
var url:String=getUrl(xmlLoader);
xmlLoader.load(new URLRequest("data/picsXML.xml"));
xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded);
function getUrl(url:String):String
{
if (!(url.indexOf(":") > -1 || url.indexOf("/") == 0 || url.indexOf("\\") == 0))
{
var rootURL:String;
if (root)
{
rootURL = root.loaderInfo.url;
if (rootURL)
{
var lastIndex:int=Math.max(rootURL.lastIndexOf("\\"),rootURL.lastIndexOf("/"));
if (lastIndex!=-1)
{
url=rootURL.substr(0,lastIndex+1)+url;
}
}
}
}
return url;
}
tpmmds
Hola:
Da la sensación de que puede ser un problema del "dueño del stage". Cuando un swf carga a otro, que a su vez carga algo de un tercer lugar, el segundo se "cree" que está en la carpeta donde está el primer swf. Me explico: si tienes una estructura de carpetas:
site/swf/imagenes
El swf principal está en "site", el swf de la galería está en "swf" y las imágenes en la carpeta "imagenes", el swf de la galería va a buscar las imágenes en:
site/imagenes
y NO en:
site/swf/imagenes
Yo utilizo esta función cuando doy una ruta a algún archivo:
private function getUrl(url:String):String {
if (!(url.indexOf(":") > -1 || url.indexOf("/") == 0 || url.indexOf("\\") == 0)) {
var rootURL:String;
if (root) {
rootURL = root.loaderInfo.url;
if (rootURL) {
var lastIndex: int= Math.max(rootURL.lastIndexOf("\\"), rootURL.lastIndexOf("/"));
if (lastIndex != -1) {
url = rootURL.substr(0, lastIndex + 1) + url;
}
}
}
}
return url;
}
Por ejemplo si das una ruta en la forma
var url:String = xml.imagen[0];
utiliza la anterior funcion:
var url:String = getUrl(xml.imagen[0]);
Esto hace que busque la imagen en la posición relativa donde esté el swf de la galeria.
Me he enrollado un poco pero básicamente es "filtrar" la ruta de las imágenes con esta función.
Un saludo.