Usando SWF no Rails

. domingo, 23 de março de 2008
  • Agregar a Technorati
  • Agregar a Del.icio.us
  • Agregar a DiggIt!
  • Agregar a Yahoo!
  • Agregar a Google
  • Agregar a Meneame
  • Agregar a Furl
  • Agregar a Reddit
  • Agregar a Magnolia
  • Agregar a Blinklist
  • Agregar a Blogmarks


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


Chamando na View:


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!!!