CARREGAR VARIÁVEIS EXTERNAS PARA O FLASH Introdução O Flash permite que envies variáveis externas para dentro do.swf usando vários métodos: A partir do HTML que chama o ficheiro.swf A partir de um ficheiro de texto A partir de um script Server Side A partir de outro.swf A partir de uma livraria de ficheiros A partir de um documento XML A partir do FS Commands Vamos neste tutorial abordar os três primeiros métodos. A primeira parte deste tutorial mostra o que estes três métodos são. A segunda mostra como determinar quando o Movie recebeu os dados. A terceira demostra como o Flash consegue enviar dados para um script server-side com uma simples alteração do comando loadvariables. Finalmente, a quarta aborda as características do Flash 5 que permitem manipular melhor os processos de envio e carregamento. Em baixo um exemplo de uma variável enviada e recebida através de um script php.
Parte I Este método passa as variáveis para dentro de um.swf via declaração da tag "OBJECT" no documento HTML: <OBJECT classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=5,0,30,0" ID=mymovie WIDTH=550 HEIGHT=400> <PARAM NAME=movie VALUE="meumovie.swf?email=nome@truquesedicas.com&user=nome"> <PARAM NAME=loop VALUE=false> <PARAM NAME=menu VALUE=false> <PARAM NAME=quality VALUE=best> <PARAM NAME=bgcolor VALUE=#FFFFFF> <EMBED src="mymovie.swf?email=nome@truquesedicas.com&user=nome " name="mymovie" loop=false menu=false quality=best bgcolor=#ffffff width=550 height=400 swliveconnect=true type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi? P1_Prod_Version=ShockwaveFlash"> </EMBED> </OBJECT> A partir de um ficheiro de texto Este método é muito parecido com o método anterior. Neste caso as variáveis estão colocadas num ficheiro de texto em vez de estar na declaração da tag "OBJECT". Aqui está o conteúdo de um ficheiro de texto que por exemplo se chama "minhas_variaveis.txt": &email=nome@truquesedicas.com&user=nome&done=y&eol=y done=y&eol=y & - este código é usado para marcar o fim da string Aqui o código no Flash que carrega os dados:
LoadVariables("minhas_variaveis.txt",""); Quando o.swf evoca o comando "loadvariables", este pede ao ficheiro de texto (neste caso minhas_variaveis.txt) que está no servidor. O pedido do ficheiro de texto devolve a linha das variáveis para o.swf. A partir de um script server-side Mais uma vez este método é muito similar aos métodos anteriores de carregamento. O script é usado para enviar a linha de variáveis no mesmo formato que enviado no ficheiro de texto. php - num ficheiro com o nome minhas_variaveis.php <? $returnurlstring = "&email=nome@truquesedicas.com&user=nome&done=y&eol=y"; echo $returnurlstring;?> código associado no Flash: loadvariables("minhas_variaveis.php",""); cgi - num ficheiro com o nome minhas_variaveis.cgi #!/usr/bin/perl $returnurlstring = "&email=nome@truquesedicas.com&user=nome&done=y&eol=y"; print $returnurlstring; código associado no Flash: loadvariables("minhas_variaveis.cgi",""); asp - num ficheiro com o nome minhas_variaveis.asp <% $returnurlstring ="&email=nome@truquesedicas.com&user=nome&done=y&eol=y"; response.write(returnurlstring) %> código associado no Flash:
loadvariables("myvariables.asp",""); cfm - num ficheiro com o nome minhas_variaveis.cfm <cfset returnurlstring = "&email=woof@cruddog.com&user=tim&done=y&eol=y"> <cfoutput>#returnurlstring#</cfoutput> código associado no Flash: loadvariables("myvariables.cfm",""); Quando o comando loadvariables é evocado no.swf, este inicia a execução do script que está no servidor. O script gera a linha das variáveis e envia-a para o.swf. Isto é válido para os quatro scripts anteriores
PARTE II Marca de dados carregados Adicionamos o código &done=y&eol=y no fim da string das variáveis porque precisamos de ter uma maneira do Flash conseguir detectar quando é que os dados acabaram de ser carregados. O Flash carrega os dados assincronamente, quer isto dizer que quando o comando loadvariables é evocado, começa a receber os dados, enquanto ao mesmo tempo o Movie continua a correr. O esquema para detecção de dados carregados no Flash é usar uma variável para identificar que os dados foram completamente carregados. No nosso caso usamos a variável "done". Detecção de variáveis carregadas O carregamento das variáveis e a sua detecção é feito ao longo de cinco frames, analisa os screenshots das actions das cinco frames. Frame #1 Frame #2
Frame #3 Frame #4
Frame #5 Isto demonstra o loop feito enquanto espera que a variável "done" seja carregada do ficheiro minhas_variaveis.txt. Portanto, isto acontece até que o código &done=y&eol=y seja carregado. A variavel eol=y não tem importância, é só com o propósito de prevenir qualquer retorno da variável done. Tenta tu próprio fazer isto Aqui tens um exemplo a funcionar.
No zip dos ficheiros do tutorial (carregar_var.zip) tens o ficheiro carregar_variaveis01.fla, abre-o, analisa o código e tenta fazer o mesmo por ti. Deverás ter em atenção alguns pontos quando trabalhas com a action loadvariables: Todas as variáveis devolvidas são strings Utiliza a action gettimer() para criar timeouts ao carregar os dados, no caso de interrupção de uma ligação ou do processo de carregamento Coloca as frames do carregamento (load) num symbol Movie Clip para que te seja permitido evocar este processo em qualquer altura
PARTE III Enviar variáveis a partir do Flash Nesta secção vamos modificar a action loadvariables de forma a que envie dados para um script alojado no servidor. Enviar dados usando o Flash é muito similar ao envio de dados a partir de forms HTML, utilizando os métodos GET ou POST: Aqui uma form HTML: Método GET <HTML> <HEAD><TITLE>Teste de Form</TITLE></HEAD> <BODY> <FORM ACTION="processform.php" METHOD="GET"> email address: <INPUT TYPE="TEXT" NAME="email" VALUE="nome@truquesedicas.com"> <INPUT TYPE="SUBMIT" VALUE="ENTER"> </FORM> </BODY> </HTML> Método POST <HTML> <HEAD><TITLE>Teste Form</TITLE></HEAD> <BODY> <FORM ACTION="processform.php" METHOD="POST"> email address: <INPUT TYPE="TEXT" NAME="email" VALUE="nome@truquesedicas.com"> <INPUT TYPE="SUBMIT" VALUE="ENTER"> </FORM> </BODY> </HTML> Código equivalente em Flash email="nome@truquesedicas.com"; loadvariables("processform.php","","post");
O que o Get envia O Flash usa a timeline onde a action loadvariables está localizada para definir que váriaveis manda para o script. Quer isto dizer o quê? Por exemplo, se a action loadvariables estiver na timeline principal do movie, então todas as variáveis definidas na timeline principal são enviadas pela action loadvariables para o script. A seguir as várias frames do processo de envio de dados para um script: Frame #1 Frame #2 Frame #3
Frame #4 Frame #5 Para ser selectivo nas variáveis a enviar para o script, este processo deve ser movido para dentro de um Movie Clip. Isto porque o Movie Clip tem a sua própria timeline, e por isso só as variáveis definidas no Movie Clip serão enviadas pela action loadvariables quando esta é chamada.
Envio selectivo com Movie Clips Supõe que a seguinte variável existe na timeline principal: nome="fagundes"; animal="cão"; cp="4150": Supõe também que queremos enviar só a variável nome e a cp através do método post para o script "processform.php". A timeline do Movie Clip terá este aspecto: Frame #1 Frame #2 Frame #3
Frame #4 Frame #5 Nota que isto é importante para determinar em antemão qual o método, GET ou POST, a ser usado pelo script. Pensa nisto como duas linguagens diferentes onde o sender (nós) e o script (eles) têm que concordar para que se entendam um ao outro.
Tenta tu próprio Abre a pasta "carregar_variaveis" que está no zip do turorial (carregar_var.zip). Dentro dela tens exemplos em quatro linguagens: ASP, PHP, Perl e Coldfusion. Para correres os exemplos precisas de ter disponível um servidor que corra scripts server-side de uma destas linguagens. No servidor os três ficheiros de cada linguagem precisam de estar na mesma pasta. Os ficheiros.fla de cada linguagem estão na pasta source, analisa-os e tenta fazer por ti. Algumas questões que te vão aparecer durante os testes: Alguns servidores exigem que os scripts estejam numa pasta especifica para correrem As permissões talvez tenham que ser ajustadas para permitir que os scripts corram - normalmente isto acontece com os scripts Perl e PHP. Contacta o teu fornecedor de servidor se encontrares alguns problemas ao correr os scripts no servidor
PARTE IV Auto detecção Até agora usámos a variável done=y para detectar se o ficheiro tinha sido completamente carregado, e este método resulta tanto no Flash 4 como no Flash 5. Especifico para o Flash 5 é o método que permite a detecção aconteça automaticamente. Quer isto dizer eliminar a variável done completamente do processo, e substituir isto com algo chamado onclipevent(data). Vê como fica agora o processo: Frame #1 Frame #2
O Painel das actions do Movie Clip deverá ter o seguinte código: Tenta tu próprio Abre a pasta "carregar_variaveis_flash5" que está no zip do tutorial (carregar_variaveis.zip). Dentro dela tens exemplos em quatro linguagens: ASP, PHP, Perl e Coldfusion. Para correres os exemplos precisas de ter disponível um servidor que corra scripts server-side de uma destas linguagens. No servidor os três ficheiros de cada linguagem precisam de estar na mesma pasta. Os ficheiros.fla de cada linguagem estão na pasta source, analisa-os e tenta fazer por ti. Algumas questões que te vão aparecer durante os testes: Alguns servidores exigem que os scripts estejam numa pasta especifica para correrem As permissões talvez tenham que ser ajustadas para permitir que os scripts corram - normalmente isto acontece com os scripts Perl e PHP. Contacta o teu fornecedor de servidor se encontrares alguns problemas ao correr os scripts no servidor E é tudo!!