developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Opened 12 years ago

Closed 12 years ago

#498 closed new feature (fixed)

plugin swf

Reported by: Lipki Owned by: Lipki
Priority: low Milestone: Jelix 1.1 beta 1
Component: jelix:plugins Version: 1.0.2
Severity: trivial Keywords:
Cc: Blocked By:
Blocking: Documentation needed: no
Hosting Provider: Php version:

Description

Voici l'ébauche d'un plugin pour intégrer facilement un swf dans un fichier .tpl

Des explications détaillées a cette adresse

Modifications avant une review?

  • Trouver une classe js indépendante de jquery et plus light. (la faire moi-même ?!)
Rendre l'utilisation de js optionnel (en option : satay
embed js)
  • Inclure les paramètres "param" et "flashvar" sous forme
    {param 'wmode', 'transparent'}
    {flashvar 'varname', 'varvalue'}

Attachments (7)

block.swf.zip (78.6 KB) - added by Lipki 12 years ago.
swf.zip (2.8 KB) - added by Lipki 12 years ago.
swf.2.zip (3.1 KB) - added by Lipki 12 years ago.
swf.3.zip (3.2 KB) - added by Lipki 12 years ago.
swf.4.zip (6.8 KB) - added by Lipki 12 years ago.
trois_plugin_flash.diff (29.6 KB) - added by Lipki 12 years ago.
trois_plugin_flash.2.diff (20.4 KB) - added by Lipki 12 years ago.

Download all attachments as: .zip

Change History (24)

Changed 12 years ago by Lipki

comment:1 Changed 12 years ago by laurentj

trouver une classe js indépendante de jquery et plus light

jquery sera livré par défaut dans la version 1.1, donc c'est pas nécessaire de refaire un script.

Rendre l'utilisation de js optionnel

Ça pourrait être bien. D'ailleurs y-t-il vraiment besoin de javascript. Parce qu'aprés tout, en theorie, y a juste besoin d'une balise object non ?

Inclure les paramètres "param" et "flashvar" sous forme

passer un tableau au plugin ne serait pas mieux ? À moins que ce soit super lourd ?

N'oublie pas que dans le trunk (donc 1.1), on peut mettre maintenant les paramètres de plugins sur plusieurs lignes.

comment:2 Changed 12 years ago by laurentj

  • review review- deleted

comment:3 Changed 12 years ago by Lipki

  • Owner set to Lipki
  • Status changed from new to assigned

je change donc en : trouver une classe de jquery plus light

D'ailleurs y-t-il vraiment besoin de javascript.

Je te renvoie a ces deux billets http://antoine.media-box.net/index.php?post/flash-satay-afficher-du-flash-tout-en-respectant-les-standards http://antoine.media-box.net/index.php?post/Flash-Satay-est-mort

d'où la possibilités de choisir l'intégration.

passer un tableau au plugin ne serait pas mieux ? À moins que ce soit super lourd ?

C'est ce qui existe dans la version actuel mais c'est effectivement lourd, et puis je trouve ça plus propre.

comment:4 follow-up: Changed 12 years ago by Lipki

première sous version : le mode-satay :

{swf 'promo/promo.swf', array('id'=>'promo1', 'width'=>150, 'height'=>150)}
        {param 'quality', 'hight'}
        {param 'wmode', 'transparent'}
        {param 'salign', 't'}
        {flashvar 'longeur', 150}
        {flashvar 'page', $j_basepath.'produits/A'}
        {flashvar 'promo', $j_basepath.'data/fichiers/promo/NOv-07.swf'}
        {image 'promo/promo_A.png'}
{/swf}
<object id="promo1" width="150" height="150" data="/site/www/data/fichiers/promo/promo.swf?&longeur=150&page=/site/www/produits/A&promo=/site/www/data/fichiers/promo/NOv-07.swf" type="application/x-shockwave-flash">
        <param value="/site/www/data/fichiers/promo/promo.swf?&longeur=150&page=/site/www/produits/A&promo=/site/www/data/fichiers/promo/NOv-07.swf" name="movie"/>
        <param value="hight" name="quality"/>
        <param value="transparent" name="wmode"/>
        <param value="t" name="salign"/>
        <img src="http://localhost/site/www/data/fichiers/promo/promo_A.png"/>
</object>

Changed 12 years ago by Lipki

comment:5 in reply to: ↑ 4 ; follow-up: Changed 12 years ago by Lipki

le mode-satay :
j'ai supprimer le première paramètre inutile.

avantage : valide, léger, contenu alternatif.
inconvénient : incompatible avec les navigateurs vétuste, pas de détection du flashplayer.


deuxième sous version : le mode-embed mode-biscuit :

{swf 'promo/promo.swf', array('id'=>'promo1', 'width'=>150, 'height'=>150)}
        {param 'quality', 'hight'}
        {param 'wmode', 'transparent'}
        {param 'salign', 't'}
        {flashvar 'longeur', 150}
        {flashvar 'page', $j_basepath.'produits/A'}
        {flashvar 'promo', $j_basepath.'data/fichiers/promo/NOv-07.swf'}
{/swf}
<object id="promo1" width="150" height="150" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000">
        <param value="/site/www/data/fichiers/promo/promo.swf?&longeur=150&page=/site/www/produits/A&promo=/site/www/data/fichiers/promo/NOv-07.swf" name="movie"/>
        <param value="hight" name="quality"/>
        <param value="transparent" name="wmode"/>
        <param value="t" name="salign"/>
        <embed width="150" height="150" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" src="/site/www/data/fichiers/promo/promo.swf?&longeur=150&page=/site/www/produits/A&promo=/site/www/data/fichiers/promo/NOv-07.swf" salign="t" wmode="transparent" quality="hight"></embed>
</object>

avantage : compatible avec les navigateurs vétuste.
inconvénient : invalide, code fouillis, pas de détection du flashplayer, pas de contenu alternatif.

Changed 12 years ago by Lipki

comment:6 in reply to: ↑ 5 Changed 12 years ago by Lipki

troisième sous version : le mode-js :

{swf 'promo/promo.swf', array('id'=>'promo1', 'width'=>150, 'height'=>150, detect=true)}
        {param 'quality', 'hight'}
        {param 'wmode', 'transparent'}
        {param 'salign', 't'}
        {flashvar 'longeur', 150}
        {flashvar 'page', $j_basepath.'produits/A'}
        {flashvar 'promo', $j_basepath.'data/fichiers/promo/NOv-07.swf'}
        {image 'promo/promo_A.png'}
{/swf}
<script type="text/javascript" src="/site/www/js/jquery-1.1.4.js" ></script>
<script type="text/javascript" src="/site/www/js/jquery.flash.js" ></script>
<script type="text/javascript">
// <![CDATA[

                $(function(){
                        $("#promo1").flash({
                                width:"150",
                                height:"150",
                                quality:"hight", 
                                wmode:"transparent", 
                                salign:"t", 
                                src: "/site/www/data/fichiers/promo/promo.swf",
                        }, {
                                expressInstall: 1
                        }, function(htmlOptions) {
                                $this = $(this);
                                htmlOptions.flashvars.longeur = "150";
                                htmlOptions.flashvars.page = "/site/www/produits/A";
                                htmlOptions.flashvars.promo = "/site/www/data/fichiers/promo/NOv-07.swf";
                                $this.children().remove();
                                $this.prepend($.fn.flash.transform(htmlOptions));
                        });
                });
                
// ]]>
</script>
<div id="ronde">
        <img src="http://localhost/site/www/data/fichiers/promo/promo_A.png"/>
</div>

avantage : compatible avec les navigateurs vétuste, valide, détection du flashplayer, contenu alternatif.
inconvénient : utilise le javascript.

Changed 12 years ago by Lipki

comment:7 Changed 12 years ago by Lipki

  • review set to review?

J'ai garder la classe jquery.flash, finalement, on vera si elle doit être retouchée.

Près pour une première review?

comment:8 Changed 12 years ago by Lipki

  • Severity changed from normal to trivial

comment:9 Changed 12 years ago by Lipki

  • Documentation needed set

comment:10 Changed 12 years ago by laurentj

  • Documentation needed unset
  • review changed from review? to review-
  • indentation non conforme au coding-style de jelix
  • commentaire en français
  • copyright 2007 : une erreur ou pas ?
  • dans les strings générées, il faut utiliser \n et non \r

block.swf.php

   $conf = @parse_ini_file(JELIX_APP_CONFIG_PATH.'swf.plugin.ini.php',true);

Apparement la conf ne contient qu'un paramètre. Je pense que ce serait mieux de le mettre dans la conf globale.

case 'biscuit' : 
        return jtpl_block_html_swf_biscuit($begin, $param);
        break;
case 'js' : 
	return jtpl_block_html_swf_js($begin, $param);
	break;

Les breaks sont inutiles, à cause des return. Vu que les fonctions appelées n'ont rien de commun, je pense que ce serait mieux de faire trois plugins plutôt qu'un. et du coup, cela rendrait le fichier ini totalement inutile. D'ailleurs, le fichier cache résultant de la compilation d'un template ne dépend pas d'une config quelconque, mais de la fraîcheur du fichier template d'origine. Ce qui veut dire qu'avec ton système, si on change la configuration (généré en mode biscuit plutôt qu'en mode satay), cela ne recompilera pas les templates, et donc les flashs ne seront pas générés selon le nouveau mode. Cela me conforte dans l'idée que ce fichier ini et ce paramètre de conf sont inutiles. À moins que tu ais d'autres idées derrière la tête ? :-)

        eval('$src = '.$param[0].';');
        eval('$options = '.$param[1].';');

Surtout pas ! Tu evalue des paramètres qui n'existent pas encore, étant donné que les plugins de type bloc sont évalués pendant la compilation, et pas pendant l'execution du template. Aussi, si par exemple je donne $truc en paramètre, ça fera un eval ('$src=$truc'). Mais helas, ici la variable $truc n'existe pas.

Bref cela remet en question tout le reste du code. En particulier le traitement de $options doit être fait dans le code source que tu génères.

        $sortie .= "\t\t".'$GLOBALS[\'gJCoord\']->response->addJSLink($gJConfig->urlengine[\'basePath\'].\'js/jquery-1.1.4.js\');'."\r";
        $sortie .= "\t\t".'$GLOBALS[\'gJCoord\']->response->addJSLink($gJConfig->urlengine[\'basePath\'].\'js/jquery.flash.js\');'."\r";

Dans certains circonstance, ces liens ne seront pas ajoutés à la page. C'est pourquoi il faut que cette portion de code doit être généré pour la partie meta du template, un truc dans le genre :

$compiler->addMetaContent('$GLOBALS[\'gJCoord\']->response->addJSLink($gJConfig->urlengine[\'basePath\'].\'js/jquery-1.1.4.js\');'."\r";
.'$GLOBALS[\'gJCoord\']->response->addJSLink($gJConfig->urlengine[\'basePath\'].\'js/jquery.flash.js\');'."\r";

ce code sera ainsi executée avant execution du template, avant même que le body de la page html est générée.

        $sortie .= "\t\t".'$GLOBALS[\'gJCoord\']->response->addJSCode($script1.$param.$script2.$var.$script3);'."\r";

Vu que ce script ne peut être générée que pendant l'execution du template, on ne peux pas faire un $compiler->addMetaContent. Aussi ici on ne peut que générer une balise "<script>" classique.

function jtpl_cfunction_html_param($tpl, $params) {
	
	global $gJConfig;
	$t = $GLOBALS['gJCoord']->response->body;
	
	eval('$name = '.$params[0].';');
	eval('$value = '.$params[1].';');
    return '$params[\''.$name.'\'] = \''.$value.'\';';
 
}

Ici aussi, pas d'eval. Il s'agit d'un fonction compilée (cfunction).

Je ne suis pas très fan des plugins param et flashvar. Si on peut tout passer aux plugins swf_*, ils n'ont pas trop d'intérêt je pense.

comment:11 Changed 12 years ago by Lipki

Je vais revoir ça a tête reposé, c'est assez froid dans ma tête.

comment:12 Changed 12 years ago by Lipki

  • review changed from review- to review?

Voila une nouvelle version avec trois plugins différent : swf, swfbiscuit, swfjs.

De manière général j'ai fait disparaitre le fichier de config, et les deux plugin param et flashvar.

Pour le plugin swf, j'ai supprimer le ob_start() qui n'était pas utile et tous les traitements ce font au moment de la balise d'ouverture.

Le plugin swfbiscuit devient un plugin cfunction, il n'a pas besoin d'être de type bloc puisqu'il n'accepte pas de contenu alternatif.

Dans le plugin swf, j'ai utiliser addMetaContent.
Comme pour le plugin swf, j'ai supprimer le ob_start() et tous les traitements ce font au moment de la balise d'ouverture.

Je suis très content de cette nouvelle version :)

Changed 12 years ago by Lipki

comment:13 Changed 12 years ago by laurentj

  • Milestone set to Jelix 1.1
  • review changed from review? to review-

C'est beaucoup mieux en effet. Cependant:

  • dans le code généré, il ajouter un test sur la presence de $gJCoord->response
  • y a un peu trop de \t et cie, ça rend le code trés peu lisible. utiliser des espaces
  • il ne devrait pas y avoir de chemins "data/fichiers/" en dur. Le supprimer. Je ne vois pas de raison d'imposer un chemin.
  • dans le commentaire de documentation, mieux documenter les paramètres, en particulier expliquer ce que chacun veulent dire
  • chemins des scripts js : utiliser ceux fournie par jelix 1.1, et mettre le jquery.flash.js dans lib/jelix-www/jquery/flash/

Et livrer le patch sous forme de diff. Plus de zip dans tes tickets s'il te plait :-) c'est pas intégrable facilement dans les sources de jelix.

Changed 12 years ago by Lipki

Changed 12 years ago by Lipki

comment:14 Changed 12 years ago by Lipki

  • review changed from review- to review+

comment:15 Changed 12 years ago by Lipki

  • review changed from review+ to review?

comment:16 Changed 12 years ago by laurentj

  • review changed from review? to review+

c'est ok.

Ne pas oublier de mettre à jour les manifests pour le build et le CREDITS.

comment:17 Changed 12 years ago by Lipki

  • Resolution set to fixed
  • Status changed from assigned to closed

commited !

Note: See TracTickets for help on using tickets.