Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera, em primeiro lugar devo dizer que o flash não é meu forte, sou mais da área de programação php, dotnet, sql server, mysql etc...
Bom faço alguma coisa em flash mas muito básica e só agora precisei entrar nessa de action scripts pra concluir um projeto pra um cliente e agora to num sufoco e preciso da ajuda dos amigos ai.
Eu tenho um mapa do brasil que está dividido por regiões, NN/CE/MG/SP/RJ/SUL.
1) Cada região é um buttom e se desloca no evento mouseover. - já concluído
2) No evento mouseclick, um retangulo branco de 10px sai do centro para a lateral esquerda aumentando até +/- 250px com altura variavel identificando a região selecionada, com um button close no lado direito e um pequeno texto abaixo. - ja concluído
O mapa todo então é deslocado para o topo da página e reduzido em 50%. - a conlcuir
No quadro branco que se abre na lateral esquerda, devo listar os estados que pertencem àquela região, sendo cada estado um link que deverá apontar para outra caixa no lado direito chamada conteudo que seria os distribuidores daquele estado, mostrando para o usuário, o nome, ender, fone, fax, email e site dos distribuidores do estado selecionado e caso nao haja, uma mensagem tipo 'Nenhum distribuidor na região selecionada, selecione outro estado por favor'.
Estou montando o arquivo xml com os estados de cada região, baseado num script de notiicias que achei na net. Que seria algo parecido com o que está abaixo.
>
<?xml version="1.0" encoding="UTF-8?>
<distribuidores>
<distribuidor regiao="NORTE / NORDESTE">
<![CDATA[<b>DISTRIBUIDOR TAL</b>
ender, cep, cidade, estado
Tel.: xxxxxxxxxx - Fax:xxxxxxxxxxxxxxx
E-mail: xxxx@xxxxx.xxx.xx Site:xxxxx ]]></distribuidor>
</distribuidores>
Acho que poderia melhorar essa estrutura criando tags para o distribuidor, outra pra ender outra, para fone e fax e outra pra email e site, já que estes dois ultimos teriam que ser links, um para o outlook outro para o site do distribuidor
Eu to enroscado exatamente nessa parte de abrir o xml e mostrar. O script nao mostra nada e também não informa qualquer erro.
No primeiro frame estao as regiões que são buttons:
>
stop ();
btNN.onRelease = function () {
gotoAndPlay("showNN");
};
btCE.onRelease = function () {
gotoAndPlay("showCE");
};
btSP.onRelease = function () {
gotoAndPlay("showSP");
};
btRJ.onRelease = function () {
gotoAndPlay("showRJ");
};
btSUL.onRelease = function () {
gotoAndPlay("showSUL");
};
btMG.onRelease = function () {
gotoAndPlay("showMG");
};
Como exemplo o showMG
Ao clicar, faz todos os movimetos descritos acima, abre o quadro conteudo na direita mas nao abre qualquer link é como se não carregasse o arquivo xml.
>
stop ();
btClose.onRelease = function () {
tfConteudo._visible=false;
gotoAndPlay(1);
};
/*
// esse evento funciona para a versão anterior que está publicada no site.
gotoMG.onRelease = function() {
getURL("[http://www.portalridgid.com.br/distribuidores/?pg=2&uf=mg"](http://www.portalridgid.com.br/distribuidores/?pg=2&uf=mg));
};
*/
// cria o objeto xml que vai carregar o arquivo noticias.xml
var noticias:XML = new XML();
// criamos os textfields para exibir as informações
_root.createTextField("tfLista", _root.getNextHighestDepth(), 15, 406, 120, 250);
_root.createTextField("tfConteudo", _root.getNextHighestDepth(), 260, 320, 350, 284);
// formatamos os TextFields
_root.tfLista.border = true
_root.tfLista.background = true;
_root.tfLista.color = 0x000000
_root.tfLista.html = true
_root.tfLista.multiline = true
_root.tfLista.selectable = false
//
_root.tfConteudo.border = true
_root.tfConteudo.background = true;
_root.tfConteudo.color = 0x000000
_root.tfConteudo.html = true
_root.tfConteudo.multiline = true
_root.tfConteudo.wordWrap = true
_root.tfConteudo.selectable = true
//
// configurando o Objto noticias
// dizemos para o objeto noticias ignorar os espacos em branco entre as tags
noticias.ignoreWhite = true;
// definimos o evento que sera disparado quando o objeto noticias terminar de carregar as noticias
noticias.onLoad = function(sucesso:Boolean) {
// se "sucesso" for verdadeiro segnifica que o arquivo foi carregado e podemos mostrar o conteudo dele
if (sucesso) {
listarNoticias();
} else {
// avisa que ocorreu algum erro durante o carregamento
trace("erro ao carregar o arquivo noticias.xml");
}
};
//
// FUNÇÔES
// funcao para mostra a lista de noticias carregadas
function listarNoticias() {
// variavis temporarias
var i:Number = 0;
var titulo:String;
var totalNoticias:Number = noticias.firstChild.childNodes.length;
// definimos como "" o "tfLista" para tirar algum texto que não deva estar ali
_root.tfLista.htmlText = "";
// aqui nos fazemos um looping para colocar os titulos de cada noticia no "tfLista" e definimos o link
while (i<totalNoticias) {
// achamos o titulo na noticia "i"
titulo = noticias.firstChild.childNodes*.attributes.titulo;*
// inserimos no tfNoticias o titulo da noticia "i" com um link para mostrar a noticia
_root.tfLista.htmlText += '<a href="asfunction:mostraNoticia,'+i+'">'+titulo+'</a>\n';
// vamos para a proxima noticia
i++;
}
}
// funcao para mostrar uma noticia selecionada
function mostraNoticia(i:Number) {
var titulo:String;
var conteudo:String;
* titulo = noticias.firstChild.childNodes**.attributes.titulo;*
* conteudo = noticias.firstChild.childNodes**.firstChild.nodeValue;*
// Mostramos a noticia
tfConteudo.htmlText = '<b>'+titulo+'</b><br><br>'+conteudo;
}
//
// carregamos o arquivo noticias.xml
noticias.load("noticias.xml");
Agora o mais estranho é que esse script ai funciona sozinho
Outras dúvidas:
Eu poderia carregar o xml logo no primeiro frame, tanto os dados carregados como os textfields criados estariam disponiveis nos demais frames?
Se sim, eu poderia colocar somente o metodo pra visualizar os dados em frame de controle de cada região.
Valeu amigo, to tentando resolver aqui
Eu não sei o que está acontecendo.
No primeiro frame ta assim:
>
stop ();
// cria o objeto xml que vai carregar o arquivo noticias.xml
var xmlDistribs:XML = new XML();
_root.createTextField("tfLista", _root.getNextHighestDepth(), 5, 5, 120, 390);
_root.tfLista.border = true
_root.tfLista.background = true;
_root.tfLista.color = 0x000000
_root.tfLista.html = true
_root.tfLista.multiline = true
_root.tfLista.selectable = false
_root.createTextField("ufConteudo", 10, 10, 315, 600, 284);
// formatamos os TextFields
ufConteudo.border = true
ufConteudo.background = true;
ufConteudo.color = 0x000000
ufConteudo.html = true
ufConteudo.multiline = true
ufConteudo.wordWrap = true
ufConteudo.selectable = true
ufConteudo._visible=false;
// configurando o Objeto e dizemos para ignorar os espacos em branco entre as tags
xmlDistribs.ignoreWhite = true;
// definimos o evento que sera disparado quando o objeto noticias terminar de carregar as noticias
xmlDistribs.onLoad = function(sucesso:Boolean) {
// se "sucesso" for verdadeiro segnifica que o arquivo foi carregado e podemos mostrar o conteudo dele
if (sucesso) {
//
} else {
// avisa que ocorreu algum erro durante o carregamento
trace("erro ao carregar o arquivo noticias.xml");
}
};
btNN.onRelease = function () {
gotoAndPlay("showNN");
};
btCE.onRelease = function () {
gotoAndPlay("showCE");
};
btSP.onRelease = function () {
gotoAndPlay("showSP");
};
btRJ.onRelease = function () {
gotoAndPlay("showRJ");
};
btSUL.onRelease = function () {
gotoAndPlay("showSUL");
};
btMG.onRelease = function () {
gotoAndPlay("showMG");
};
// carregamos o arquivo xml
xmlDistribs.load("distribuidores.xml");
var totalRegistros:Number = xmlDistribs.firstChild.childNodes.length;
_root.tfLista.text=totalRegistros // não tá mostrando nada
Nos keyframes de cada regiao tá assim:
>
stop ();
ufConteudo._visible=true;
btClose.onRelease = function () {
ufConteudo._visible=false;
gotoAndPlay(1);
};
gotoSP.onRelease = function () {
var estado:String;
var distribs:String;
estado = xmlDistribs.firstChild.childNodes*.attributes.estado;*
* distribs = xmlDistribs.firstChild.childNodes**.firstChild.nodeValue;*
// Mostramos a noticia
ufConteudo.htmlText = '<b>'+estado+'</b><br><br>'+distribs;
// getURL("http://www.portalridgid.com.br/distribuidores/?pg=2&uf=sp");
};
gotoMS.onRelease = function () {
var estado:String;
var distribs:String;
* estado = xmlDistribs.firstChild.childNodes**.attributes.estado;*
* distribs = xmlDistribs.firstChild.childNodes**.firstChild.nodeValue;*
// Mostramos a noticia
ufConteudo.htmlText = '<b>'+estado+'</b><br><br>'+distribs;
// getURL("http://www.portalridgid.com.br/distribuidores/?pg=2&uf=ms");
};
Ao clicar na região, a região é deslocada e ampliada no topo, mostra a lista dos estados no lado esquerdo sendo cada estado um link.
Abre o textbox abaixo do mapa para mostrar os distribuidores porém nãoo mostra nada, não dá qualquer mensagem de erro.
Coloquei um textbox no primeiro frame pra ver se carregava e também nao mostra nada.
abaixo uma parte do xml:
>
*<?xml version="1.0" encoding="UTF-8?>*
*<distribuidores>*
* <distribuidor estado="ACRE - AC"> *
<![CDATA[Nenhum Distribuidor localizado no estado selecionado!
* Procure em outro estado ou outra região mais próxima.]]></distribuidor>*
* <distribuidor estado="ALAGOAS - Al"> *
<![CDATA[Nenhum Distribuidor localizado no estado selecionado!
* Procure em outro estado ou outra região mais próxima.]]></distribuidor>*
* <distribuidor estado="AMAZONAS - AM"> *
<![CDATA[DIFAL - DISTR DE FERRAM ARGENTA LTDA
R COMENDADOR CLEMENTINO, 727 - CENTRO - CEP 69025-000 - MANAUS - AM
Tel.: 92 4009-3616 / 3015 / 3017 - Fax: 92 4009-3032
E-mail: vendas@difal.com.br Site: www.difal.com.br]]>
* </distribuidor>*
* <distribuidor estado="AMAPÁ - AP"> *
<![CDATA[Nenhum Distribuidor localizado no estado selecionado!
Procure em outro estado ou outra região mais próxima.]]>
</distribuidor>
Eu parti desse exemplo que funciona sem problemas:
>
// cria o objeto xml que vai carregar o arquivo noticias.xml
var noticias:XML = new XML();
// criamos os textfields para exibir as informações
_root.createTextField("tfLista", _root.getNextHighestDepth(), 5, 5, 120, 390);
_root.createTextField("tfConteudo", _root.getNextHighestDepth(), 130, 5, 360, 390);
// formatamos os TextFields
tfLista.border = true
tfLista.background = true;
tfLista.color = 0x000000
tfLista.html = true
tfLista.multiline = true
tfLista.selectable = false
//
tfConteudo.border = true
tfConteudo.background = true;
tfConteudo.color = 0x000000
tfConteudo.html = true
tfConteudo.multiline = true
tfConteudo.wordWrap = true
tfConteudo.selectable = true
//
// configurando o Objto noticias
// dizemos para o objeto noticias ignorar os espacos em branco entre as tags
noticias.ignoreWhite = true;
// definimos o evento que sera disparado quando o objeto noticias terminar de carregar as noticias
noticias.onLoad = function(sucesso:Boolean) {
// se "sucesso" for verdadeiro segnifica que o arquivo foi carregado e podemos mostrar o conteudo dele
if (sucesso) {
listarNoticias();
} else {
// avisa que ocorreu algum erro durante o carregamento
trace("erro ao carregar o arquivo noticias.xml");
}
};
//
// FUNÇÔES
// funcao para mostra a lista de noticias carregadas
function listarNoticias() {
// variavis temporarias
var i:Number = 0;
var titulo:String;
var totalNoticias:Number = noticias.firstChild.childNodes.length;
// definimos como "" o "tfLista" para tirar algum texto que não deva estar ali
tfLista.htmlText = "";
// aqui nos fazemos um looping para colocar os titulos de cada noticia no "tfLista" e definimos o link
while (i<totalNoticias) {
// achamos o titulo na noticia "i"
* titulo = noticias.firstChild.childNodes**.attributes.titulo;*
// inserimos no tfNoticias o titulo da noticia "i" com um link para mostrar a noticia
tfLista.htmlText += '<a href="asfunction:mostraNoticia,'+i+'">'+titulo+'</a>\n';
// vamos para a proxima noticia
i++;
}
}
// funcao para mostrar uma noticia selecionada
function mostraNoticia(i:Number) {
var titulo:String;
var conteudo:String;
* titulo = noticias.firstChild.childNodes**.attributes.titulo;*
* conteudo = noticias.firstChild.childNodes**.firstChild.nodeValue;*
// Mostramos a noticia
tfConteudo.htmlText = '<b>'+titulo+'</b><br><br>'+conteudo;
}
//
// carregamos o arquivo noticias.xml
noticias.load("noticias.xml");
o objeto XMl esta declarado no root, então para acessa-lo de dentro de um movieClip, testa assim:
estado = _root.xmlDistribs.firstChild.childNodes.attributes.estado;
*distribs = **_root.xmlDistribs.firstChild.childNodes.firstChild.nodeValue;*
outra coisa, aquele " i ", onde você esta definindo o valor dele? como ele vai saber qual nó vai pegar dentro de cada estado, talves se você fizer assim:
i = 2
estado = _root.xmlDistribs.firstChild.childNodes[i].attributes.estado;
distribs = _root.xmlDistribs.firstChild.childNodes[i].firstChild.nodeValue;
vai testando ai que você chaga lá
[]´s
Tá russo amigo:
Esse actions ta no uf MG, que abre o textbox mas quando clico pra abrir, nem o valor 18 chega la.
O trace mostra "i" como null.
Tá la o swf funcionando "quase perfeito"
>
stop ();
_root.ufConteudo._visible=true;
btClose.onRelease = function () {
_root.ufConteudo._visible=false;
gotoAndPlay(1);
};
gotoMG.htmlText += '<a href="asfunction:showDistrib,18">Minas Gerais</a>\n';
gotoMG.onRelease = function() {
showDistrib(18);
//getURL("[http://www.portalridgid.com.br/distribuidores/?pg=2&uf=mg"](http://www.portalridgid.com.br/distribuidores/?pg=2&uf=mg));
};
// funcao para mostrar uma noticia selecionada
function showDistrib(i:Number) {
trace('numero='+i);
var estado:String;
var distribs:String;
estado = _root.xmlDistribs.firstChild.childNodes*.attributes.estado;*
* distribs = _root.xmlDistribs.firstChild.childNodes**.firstChild.nodeValue;*
// Mostramos a noticia
_root.ufConteudo.htmlText = '<b>'+estado+'</b><br><br>'+distribs;
}
Resolvido em parte. Não sei o que tava acontecendo mas criei um novo arquivo e fui copiando e colando layer a layer no arquivo novo e começou a funcionar.
Agora o problema é mais maluco.
Eu tenho um arquivo XML com todos os estados que são os primeiros nós e varios distribuidores em cada estado que sao os segundos nós.
O flash carrega o xml num reclama de nada mas o que ocorre:
SP = 0
MS= 1
PR = 2
SC = 3
RS = 4
RJ = 5
ES = 6
MT = 7
GO = 9
TO = 9
AC=10
a assim sucessivamente até SE=24
Até o ES funciona normal, a partir dai, ele não acha mais os nós. Seria limite de linha no arquivo xml?
Estranho, antes começava no AC e SP estava na posição 20 parece ou seja começava pela região norte, neste caso, o mapa mostrava até a região do ES e a partir dai não mostrava mais nada, ficava como undefined.
O xml tá com 598 linhas.
Ninguém pra dar um help?
o ideal é você usar o trace() para saber onde não é executado, saber se a função 'listarNoticias' é chamada, etc
sobre a segunda pergunta, você pode carregar o XML no 1º frame sim, e guardar os valores em variaveis, mas se criar as caixas de texto elas já seriam exibidas, então o melhor é você carregar mesmo no 1ºframe, e só montar a tela depois
[]´s