Fix del módulo Flash Node de Drupal

Hoy día son muchas las webs que usan contenidos flash. La gran mayoría de ellas que están montadas con Drupal, suelen usar un módulo llamado Flash Node. Este módulo nos permite integrar fácilmente contenidos flash en nuestras webs, pero tiene un problema. No pasa el test de validación de la W3C.

Dado que considero que un buen trabajo es el que cumple unas ciertas normativas como las de la W3C, me dispuse a validar los archivos flash de mi sitio.

Inicialmente hice un trabajo de investigación en la red, a ver si algún usuario había encontrado algún método más claro y eficaz que el famoso método Flash Satay de "A List Apart" que propone el mismo W3C. Y efectivamente, encontré un artículo (y en español !!!), basado a su vez en el artículo de un usuario checo que proponía un método mejor que el mencionado Satay. Así que las mejoras del código para la validación las basé en este artículo, Flash válido (mejor que Flash Satay).

Una vez hallada una solución, sólo bastaba modificar el código del propio módulo de Flash node. Las modificaciones fueron pocas y me llevo poco tiempo encontrar qué líneas había que modificar.

Inicialmente, el código de la version 6.x-2.2 mostraba éstas líneas (1066-1075), y que aparecen más desglosadas para una mayor legibilidad:

// Use t() to substitute parameters in to basic Flash markup

$output = t('
<div class="flashnode">
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0"
width="!width" height="!height" id="myMovieName">
<param name="allowScriptAccess" value="sameDomain" />
<param name="allowFullScreen" value="true" />
<param name="movie" value="!filepath" />
<param name="quality" value="high" />
<param name="flashvars" value="!flashvars" />
<param name="base" value="!base" />
<embed src="!filepath" allowScriptAccess="sameDomain" allowFullScreen="true" quality="high"
width="!width" height="!height" flashvars="!flashvars" name="myMovieName" align=""
type="application/x-shockwave-flash" base="!base" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
</div>',
    array(
      '!height' => $flashnode['height'],
      '!width' => $flashnode['width'],
      '!filepath' => file_create_url($flashnode['filepath']),
      '!flashvars' => $flashnode['flashvars'],
      '!base' => $flashnode['base'],
    )
  );

 

Y las sustituí por éstas otras:

 

// Use t() to substitute parameters in to basic Flash markup

$output = t('
<div class="flashnode">
<!--[if !IE]> -->
<object type="application/x-shockwave-flash"
data="!filepath" width="!width" height="!height">
<!-- <![endif]-->

<!--[if IE]>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0"
width="!width" height="!height">
<param name="movie" value="!filepath" />
<!--><!---->
<param name="allowScriptAccess" value="sameDomain" />
<param name="allowFullScreen" value="true" />
<param name="quality" value="high" />
<param name="flashvars" value="!flashvars" />
<param name="base" value="!base" />
<param name="loop" value="true" />
<param name="menu" value="false" />
</object>
<!-- <![endif]-->
</div>',
    array(
      '!height' => $flashnode['height'],
      '!width' => $flashnode['width'],
      '!filepath' => file_create_url($flashnode['filepath']),
      '!flashvars' => $flashnode['flashvars'],
      '!base' => $flashnode['base'],
    )
  );

 

Resultado:

El código pasa perfectamente el test de validación de la W3C y funciona tanto en IE (Explorer is different) como en el resto de navegadores.

Espero que os haya resultado útil este primer artículo de mi blog.