Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

olliver

[Resolvido] Galeria flash + xml com erro

Recommended Posts

Iae pessoal, boa noite.

Preciso de uma ajuda pra identificar um erro numa leitura de xml através de AS2 no flash, já estou tentando isso há um tempo e não consegui ainda.

 

Bom, meu xml tá com essa estrutura:

 

<?xml version="1.0" encoding="utf-8" ?>

<photography>
	<galleries name="1st gallery">
		<pic>
			<image>1b.jpg</image>
			<title>galeria 1, foto 1</title>
			<descriptions>Lorem ipsum dolor sit amet</descriptions>
			<thumbnail>1s.jpg</thumbnail>
			<link>http://www.1.com</link>
		</pic>
		<pic>
			<image>2b.jpg</image>
			<title>galeria 1, foto 2</title>
			<descriptions>consectetuer adipiscing elit</descriptions>
			<thumbnail>2s.jpg</thumbnail>
			<link>http://www.2.com</link>
		</pic>
	</galleries>

	<galleries name="2nd gallery">
		<pic>
			<image>3b.jpg</image>
			<title>galeria 2, foto 3</title>
			<descriptions>Nunc quis sem nec tellus blandit</descriptions>
			<thumbnail>3s.jpg</thumbnail>
			<link>http://www.3.com</link>
		</pic>
		<pic>
			<image>4b.jpg</image>
			<title>galeria 2, foto 4 - Rússia</title>
			<descriptions>Duis vitae velit sed dui malesuada</descriptions>
			<thumbnail>4s.jpg</thumbnail>
			<link>http://www.4.com</link>
		</pic>
	</galleries>
</photography>

Minha AS no flash:

 

function loadXML(loaded) {
	if (loaded) {
		xmlNode = this.firstChild;
		image = [];
		dynamic_title = [];
		dynamic_descriptions = [];
		thumbnails = [];
		dynamic_url = [];

		total = xmlNode.childNodes.length;
		for (i=0; i<total; i++) {
			image[i] = xmlNode.firstChild.childNodes[0].childNodes[0].firstChild.nodeValue;
			title[i] = xmlNode.firstChild.childNodes[0].childNodes[1].firstChild.nodeValue;
			descriptions[i] = xmlNode.firstChild.childNodes[0].childNodes[2].firstChild.nodeValue;
			thumbnails[i] = xmlNode.firstChild.childNodes[0].childNodes[3].firstChild.nodeValue;
			thumbnails_fn(i);
			url[i] = xmlNode.firstChild.childNodes[0].childNodes[4].firstChild.nodeValue;
		}
				
		firstImage();
	} else {
		content = "Imagem não carregada!";
	}
}
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load("gallery.xml");

 

Ele carrega apenas a primeira imagem de cada galeria, não lista nem o thumbs nem a 2a imagem.

 

Alguém tem uma idéia?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você esta usando um valor fixo, o zero, teria que usar o "I":

 

image = xmlNode.firstChild.childNodes[0].childNodes[0].firstChild.nodeValue;

 

esta zero em todas, tenta coloca a variável do FOR:

 

 

image = xmlNode.firstChild.childNodes[i].childNodes[0].firstChild.nodeValue;

 

 

 

[]´s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom...

 

O problema basico ai ta na sua chamada de XML mesmo:

image[i] = xmlNode.firstChild.childNodes[0].childNodes[0].firstChild.nodeValue;
			title[i] = xmlNode.firstChild.childNodes[0].childNodes[1].firstChild.nodeValue;
			descriptions[i] = xmlNode.firstChild.childNodes[0].childNodes[2].firstChild.nodeValue;
			thumbnails[i] = xmlNode.firstChild.childNodes[0].childNodes[3].firstChild.nodeValue;
			thumbnails_fn(i);
			url[i] = xmlNode.firstChild.childNodes[0].childNodes[4].firstChild.nodeValue;

Ai ele só vai pegar a primeira galeria... pois você ta dizendo childNodes[0]... e não acrescenta nenhuma variavel ai... logo ele não vai ler a segunda galeria.

 

Tem de criar uma array bi dimensional e teria que fazer um for dentro de um for para poder pegar tudo assim:

var image:Array = new Array();
var dynamic_title:Array = new Array();
var dynamic_descriptions:Array = new Array();
var thumbnails:Array = new Array();
var dynamic_url:Array = new Array();

function loadXML(loaded) {
	if (loaded) {
		total = xmlData.firstChild.childNodes.length;
		for (i=0; i<total; i++) {
			image[i] = new Array();
			dynamic_title[i] = new Array();
			dynamic_descriptions[i] = new Array();
			thumbnails[i] = new Array();
			dynamic_url[i] = new Array();
			var cn = xmlData.firstChild.childNodes[i].childNodes;
			for(j=0;j<cn.length; j++){
				image[i][j] = cn[j].childNodes[0].firstChild.nodeValue;
				title[i][j] = cn[j].childNodes[1].firstChild.nodeValue;
				descriptions[i][j] = cn[j].childNodes[2].firstChild.nodeValue;
				thumbnails[i][j] = cn[j].childNodes[3].firstChild.nodeValue;
				url[i][j] = cn[j].childNodes[4].firstChild.nodeValue;
				
			}
		}
	} else {
		content = "Imagem não carregada!";
	}
}
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load("gallery.xml");

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

berseck, valeu pela tentativa.

 

Éder, é exatamente isso q tava faltando.

tinha colocado o childNodes, mas tava sem o firstChild... hehehe agora funcionou essa parte, porém apareceu outro probleminha:

 

Só é puxada a quantidade de fotos (dentro de uma galeria) de acordo com a quantidade de galerias.... por exemplo, se eu criar 3 galerias, só serão puxadas as 3 primeiras fotos de cada galeria.

 

Pra entenderem melhor, veja que no exemplo abaixo eu tenho 2 galerias (1st e 2nd) e na "1st gallery" eu tenho 3 nós filhos, ou seja, 3 fotografias...

Como eu só tenho 2 galerias criadas, o flash só interpreta como se eu tivesse apenas 2 nós filhos na "1st gallery", mesmo que eu tenha 3 ou 1000 nós filhos dentro dela... isso se repete pra todas as outras galerias que eu criar.

 

XML:

<photography>
	<galleries name="1st gallery">
		<pic>
			<image></image>
			<title></title>
			<descriptions></descriptions>
			<thumbnail></thumbnail>
			<link></link>
		</pic>
		<pic>
			<image></image>
			<title></title>
			<descriptions></descriptions>
			<thumbnail></thumbnail>
			<link></link>
		</pic>
		<pic>
			<image></image>
			<title></title>
			<descriptions></descriptions>
			<thumbnail></thumbnail>
			<link></link>
		</pic>
	</galleries>
	<galleries name="2nd gallery">
		<pic>
			<image></image>
			<title></title>
			<descriptions></descriptions>
			<thumbnail></thumbnail>
			<link></link>
		</pic>
	</galleries>
</photography>

 

Obrigado pela ajuda de vcs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom então vamos lá

 

O código que eu usei:

var image:Array = new Array();
var dynamic_title:Array = new Array();
var dynamic_descriptions:Array = new Array();
var thumbnails:Array = new Array();
var dynamic_url:Array = new Array();

function loadXML(loaded) {
	if (loaded) {
		total = xmlData.firstChild.childNodes.length;
		for (i=0; i<total; i++) {
			image[i] = new Array();
			dynamic_title[i] = new Array();
			dynamic_descriptions[i] = new Array();
			thumbnails[i] = new Array();
			dynamic_url[i] = new Array();
			var cn = xmlData.firstChild.childNodes[i].childNodes;
			for(j=0;j<cn.length; j++){
				image[i][j] = cn[j].childNodes[0].childNodes;
				trace(image[i][j]);
				dynamic_title[i][j] = cn[j].childNodes[1].childNodes;
				trace(dynamic_title[i][j]);
				dynamic_descriptions[i][j] = cn[j].childNodes[2].childNodes;
				trace(dynamic_descriptions[i][j]);
				thumbnails[i][j] = cn[j].childNodes[3].childNodes;
				trace(thumbnails[i][j]);
				dynamic_url[i][j] = cn[j].childNodes[4].childNodes;
				trace(dynamic_url[i][j]);
			}
		}
	} else {
		content = "Imagem não carregada!";
	}
}
xmlData = new XML();
xmlData.ignoreWhite = true;
xmlData.onLoad = loadXML;
xmlData.load("gallery.xml");

Resultado do output:

1b.jpg

galeria 1 foto 1

Lorem ipsum dolor sit amet

1s.jpg

http://www.1.com

2b.jpg

galeria 1 foto 2

consectetuer adipiscing elit

2s.jpg

http://www.2.com

3b.jpg

galeria 2 foto 3

Nunc quis sem nec tellus blandit

3s.jpg

http://www.3.com

4b.jpg

galeria 2 foto 4 - Russia

Duis vitae velit sed dui malesuada

4s.jpg

http://www.4.com

 

 

Acho que meu caminho tava certo heim ;)

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, ele até tem o output certinho...

da mesma forma que você mostrou, mas não exibe informação nenhuma no flash (imagem, titulo, link, descrição), só carrega o layout do stage.

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

resolvi aqui...

 

troquei o total = xmlNode.childNodes.length; por:

 

total = xmlNode.firstChild.childNodes.length;

 

 

valeu pela atenção e ajuda.

abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom no caso ai...

 

Você tem que chamar assim

 

images[0][0] = 1.jpg

images[0][1] = 2.jpg

images[1][0] = 3.jpg

images[1][1] = 4.jpg

 

Ela virou uma array bi dimensional...

 

Assim você pode colocar quantas galerias quiser

 

galeria 1 vai ser o 0 a 2 vai ser o 1... se tiver a terceira vai ser o 2... e assim por diante.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.