Fork me on GitHub

Rapport de message :*
 

[Astuce] Intégrer un player Flash MP3 automatique dans MyDownload

Titre du sujet : [Astuce] Intégrer un player Flash MP3 automatique dans MyDownload
par cyborgjeff sur 29/11/2007 12:09:44

Depuis longtemps j'avais rêvé dans mon site Xoops cyborgjeff.com pouvoir proposer un player MP3 en streaming... Il y a peu, j'avais trouvé la possibilité de pouvoir intégrer DewPlayer (un mini player flash) dans le contenu de chaque items "musique", mais il fallait faire cela de manière manuel en insérant le code HTML... Ce qui n'aide pas vraiment à faire avancer le chmilblick, ni a rendre autonome mon site.

Mais début de semaine, la question d'un autre utilisateur de Xoops qui tentait de faire pareil m'a incité à me lancer dans le projet de rendre automatique cet ajout,.. et avec toutes les "nouvelles connaissances" acquises sur le tripatouillage de code PHP Xoops... je me sentais en forme ;)

Objectif : Automatiser l'affichage d'un player MP3 flash dans la page de descriptions du module Mydownload de mon site.

1. Détecter si l'URL du lien est une extension .MP3 ou .mp3, si oui alors afficher le player cilbant vers cet URL

2. Si ce n'est pas le cas, détecter si l'URL du champs "Homepage" (que je renomerais streaming) est un fichier .MP3 ou .mp3, si oui alors afficher le player ciblant vers cet URL

3. si aucun des 2 cas n'est remplis, alors ne rien afficher

Tout d'abord, il faut bien sur copier le fichier .SWF du player dans le répertoire modules/mydownload, et vous pouvez le créer depuis le site Alsacreations.

Le premier point pose déjà un soucis important, en effet, Dewplayer doit absolument recevoir un paramètre cilbant une adresse .MP3, hors le module de Xoops ne renvoit hors de ses variables pré-définies (smarty) qu'une URL en fichier .PHP?argument=x&argument2=y qui traitera ensuite la requête. Par facilité donc, j'avais pensé à récupérer la valeur du champs "homepage", lui défini correctement, mais cela demandait quand même de ré-éditer mes 500 items ;(

Donc, il me fallait tout d'abord créer une nouvelle variable Smarty qui correspondrait à l'URL du téléchargement encodé dans la DB, pour ce faire, il m'a fallu éditer le fichier Singlefile.php

J'y trouve une ligne qui commence par :
$xoopsTpl->assign('file', array('id' => $lid, ...
Cela m'inspirerait donc bien l'instantiation de la variable smarty <{$files}>... de part le xoopsTpl qui pourrait faire référence au Template dans lequel ces variables seront utilisées... J'ai donc ajouté à la liste des élements du tableau de cette variable un :
'url' => $url


Bingo, le débuggeur m'affiche bien le contenu de cette variable correspondant à mon URL exacte !

Je peux donc appeler mon fichier MP3 en lui passant comme variable soit la variable <{$files.url}> soit <{$down.homepage}> en ajoutant le code d'appel du player Flash dans mon le fichier de template mydownloads_download.html.

<object type="application/x-shockwave-flash" data="dewplayer.swf?mp3=<{$down.homepage}>" width="200" height="20"> <param name="movie" value="dewplayer.swf?mp3=<{$down.homepage}>" /> <param name="wmode" value="transparent"> </object>


Voilà.. déjà comme cela, on peut avoir un player automatique qui jouera le fichier ciblé par la variable choisie,... et qui ne jouera rien du tout si l'URL ne renvoit pas de fichier MP3.

Mais bon,.. moi tant qu'à faire, j'aurais préféré pousser un peu plus et pouvoir prendre le "Homepage" si URL n'était pas intéressant (vu que je cible aussi des fichiers de type soundtracker .IT, .XM, .S3M,...) afin d'avoir une alternative pour un preview,.. et tant qu'à faire, qu'il n'affiche rien s'il n'y pas de raison de jouer qqch...

Là.. il va falloir jouer avec du code Javascript pour traiter les chaines de caractères, d'une part car je ne sais pas le faire en PHP et de toute manière, pas de PHP dans les templates... donc, je vais devoir préparer quelques lignes de codes en début de page (!! pas de déclaration de fonctions dans les templates !!)

<script language="JavaScript">
var 
chaineurl="<{$file.url}>";
long=chaineurl.length;
slong=parseInt(long);
slong=slong-3;
result=chaineurl.substring(slong,long);
var 
chainestream="<{$down.homepage}>";
long=chainestream.length;
slong=parseInt(long);
slong=slong-3;
result2=chainestream.substring(slong,long);
</script>


En gros je récupère la variable en Javascript, je calcule la longueur de celle-ci, je formate le résultat en valeur numérique, je fais une soustraction pour connaitre la longeur totale -3 et je récupère les 3 dernières lettres de mon URL (MP3 en théorie), je fais ensuite pareil pour la 2° variable à traiter.

Ensuite, il faut utiliser un petit script d'affichage conditionnel du player à insérer à l'endroit voulu dans le template,.. vu que l'on va utiliser la fonction document.write, il faut évidemment jouer avec les \ devant les ""

<script>
if (
result=="mp3"||result=="MP3"){
document.write('<object type="application/x-shockwave-flash" data="dewplayer.swf?mp3=<{$file.url}>" width="200" height="20"><param name="movie" value="dewplayer.swf?mp3=<{$file.url}>"/><param name="wmode" value="transparent"></object>');
}
else {
if (
result2=="mp3"||result=="MP3"){
document.write('<object type="application/x-shockwave-flash" data="dewplayer.swf?mp3=<{$down.homepage}>" width="200" height="20"><param name="movie" value="dewplayer.swf?mp3=<{$down.homepage}>"/><param name="wmode" value="transparent"></object>');
}
else {}
}
</script>

Eh voilà ;)Alors Pype,.. ca t'en bouche un coin que ton grand frangin face lui ausis de la programmation hein ;)
Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

9 Personne(s) en ligne (8 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 0 | Invité(s): 9 | Plus ...