
Caso queira colocar um arquivo SWF na view de seu projeto rails, irá se deparar com um pequeno dilema: Qual tag devo usar?
Isto se deve ao fato no Mozilla(firefox, etc) a tag correta é <embed> já no Internet Explorer é <object>.
Para resolver este entre outros existe uma biblioteca javascript chamada de SWFObject
Vamos colocar nos trilhos
Nivel de Dificuldade: Babinha
Utilidade: Inserção de banners, videos e uma infinidade de recursos que um SWF pode oferecer.
Primeiro baixe o SWFObject ( http://code.google.com/p/swfobject/ )
descompacte o conteúdo do arquivo na pasta /public/javascript do seu projeto
Inclua a chamada ao arquivo js no layout
<%= javascript_include_tag 'swfobject' %>
Crie uma pasta chamada swf em /public e adicione os seus arquivos swf.
Agora para a chamada do swf na view vamos criar um helper, adicione no arquivo /app/helper/application_helper.rb o seguinte código:
1
2 module ApplicationHelper
3 # swfobject Helper
4 def swf_object(swf, id, width, height, flash_version, background_color)
5
6 output = "<script type=’text/javascript’>"
7 output << "var so = new SWFObject(’#{swf}‘, ‘#{id}‘, ‘#{width}‘, ‘#{height}‘,
8 ‘#{flash_version}‘, ‘#{background_color}‘);"
9 output << "so.write(’#{id}‘);"
10 output << "</script>"
11 end
12 end
Para utilizar é simples, na view chame o método swf_object do helper passando os parâmetros apropriados:
1 <%= swf_object("/swfs/apresentacao.swf", "flash_id", "550", "400"
, "9", "#000000") %>
Vamos incrementar o nosso helper um pouco mais, adicionando uma mensagem dizendo qual a versão do flash necessária. Podemos também passar parâmetros via swfobject.
; 1
2 module ApplicationHelper
3 # swfobject Helper
4 def swf_object(swf, id, width, height, flash_version,
5 background_color, params = {}, vars = {}, create_div = false)
6
7 create_div ? output = "<div id=’#{id}‘>Este site requer
8 <a href=’http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash&promoid=BIOW’
9 target=’_blank’>Flash player</a> #{flash_version} or higher.</div><script type=’text/javascript’>":
10 output = "<script type=’text/javascript’>"
11
12 output << "var so = new SWFObject(’#{swf}‘, ‘#{id}‘, ‘#{width}‘, ‘#{height}‘,
13 ‘#{flash_version}‘, ‘#{background_color}‘);"
14
15 params.each {|key, value| output << "so.addParam(’#{key}‘, ‘#{value}‘);"}
16 vars.each {|key, value| output << "so.addVariable(’#{key}‘, ‘#{value}‘);"}
17 output << "so.write(’#{id}‘);"
18 output << "</script>"
19 end
20 end
1 <%= swf_object("/swfs/apresentacao.swf", "flash_id", "550", "400", "9", "#000000",
2 {:quality => "high"},
3 {:var_nome => "Henry", :var_sobrenome => "Hamon"}) %>
Dentro do swf as variáveis alimentadas estariam estariam na raiz, '_level0.var_nome' para o AS2 e 'Application.application.parameters.var_nome' no Flex.
Referências:
http://blog.eleventyten.com/2007/06/08/embedding-swf-content-with-ror/
http://www.nomedojogo.com/2008/01/24/screencast-5-dry-evitando-repeticoes-no-html/
Gostaria de agradeçer ao Julio, Jair, Millnitz, Felipe Santiago e a Nelci pelo apoio e ao Paulo Cassiano pelo conselho e apoio também.
Até a próxima semana!!!

