[Résolu] Comment afficher la durée d'un fichier mp3 joint

Salut :wave:
Dans l’espace privé, la durée d’un fichier mp3 joint est affichée, je souhaite l’afficher dans le site public, quelle est la balise à utiliser dans la boucle ‹ Document › pour cela?.
Merci.

Salut,

avec Soundmanager, tu as la durée affichée dans le lecteur : Soundmanager - SPIP-Contrib

1 « J'aime »

Bonjour @jeanmarie
J’utilise déjà JavaScript pour charger le lecteur mp3 mais la seule chose dont j’ai besoin est d’afficher la durée du fichier mp3 joint comme dans l’éspace privé.
Merci

Tu es obligé d’afficher le mp3 en javascript ?

La durée affichée dans le privé vient du champ duree de la table spip_documents, donc il faut faire une boucle documents et utiliser la balise #DUREE, ce que fait le le lecteur de Soundmanager.

1 « J'aime »

Merci beaucoup @jeanmarie :pray:
#DUREE fonctionne bien, existe-t-il un filtre pour cette balise pour afficher la durée comme ceci MIN:SEC (01:02) ? J’ai recherché sur la documentation Spip ce tag #DUREE La boucle DOCUMENTS mais Il n’y a rien là-dedans.

[(#DUREE|duree_en_secondes{precis})]

Le 6 mars 2024 à 15:15, Hacen via Discuter de SPIP noreply@discuter.spip.net a écrit :



Hacen
Mars 6

Merci beaucoup @jeanmarie

<:pray:>

#DUREE fonctionne bien, existe-t-il un filtre pour cette balise pour afficher la durée comme ceci MIN:SEC (01:02) ? J’ai recherché sur la documentation Spip ce tag #DUREE La boucle DOCUMENTS mais Il n’y a rien là-dedans.


Voir le sujet ou répondre à ce courriel pour répondre.

Pour vous désabonner de ces courriels, cliquez ici.

1 « J'aime »

Merci @William_Fourche pour le filtre :heart: il ajoute un ‹ s › après le nombre de secondes comme ça 25s mais je veux quelque chose comme 00:25

la fonction function duree_en_secondes($duree, $precis = false)
se trouve dans le fichier medias_fonctions.php du dossier plugins-dist/medias
peut être pourras-tu le modifier pour tes besoins spécifiques

Le 6 mars 2024 à 16:35, Hacen via Discuter de SPIP noreply@discuter.spip.net a écrit :

Hacen
Mars 6

Merci @William_Fourche pour le filtre :heart:il ajoute un ‹ s › après le nombre de secondes comme ça 25s mais je veux quelque chose comme 00:25


Voir le sujet ou répondre à ce courriel pour répondre.

Pour vous désabonner de ces courriels, cliquez ici.

1 « J'aime »

En regardant, duree est un champ INT de spip_documents, je suppose qu’il se remplit avec le nombre de secondes. Du coup il te faut une fonction avec une base de calcul par 60.
par exemple, à adapter …

/**
* @param int nb_seconde
* calcule le nombre de minutes et de secondes à partir d'un entier
* retourne la durée au format 00:00
*/
function filtre_min_sec($nb_seconde){ 
   $nb_minute = floor($nb_seconde / 60);

   if( $nb_minute < 1 ){
   	return '00:'.$nb_seconde;
   }

   elseif( $nb_minute >= 1 ){
   	$nb_seconde = ( $nb_seconde - ( $nb_minute * 60 ) );
   	return $nb_minute.':'.$nb_seconde;
   }
}

et tu l’utilises ainsi

[(#DUREE|min_sec)]

CF PHP: floor - Manual

1 « J'aime »

plus compact:

function filtre_min_sec($nb_seconde)
{
    return (new DateTime('0000-00-00'))
        ->add(new DateInterval('PT' . strval($nb_seconde) . 'S'))
        ->format(('i:s'));
}

:wink:

1 « J'aime »

Super, j’ai fait ça au plus rapide et je pensais chercher la solution avec DateTime ce soir, et je vois que tu l’as trouvé, cool merci @james ! D’autant que si tes films durent plus d’une heure, il te suffira de mettre H:i:s

1 « J'aime »

Vous! @touti @JamesRezo :two_hearts: Les héros de Spip !
Vous nous facilitez la vie comme toujours. Merci de tout coeur :heart:
Le problème a été complètement résolu :white_check_mark:

Un peu plus solide et « données-proof » si vous voulez:

/**
 * Calcule le nombre de minutes-secondes à partir d'un entier
 * retourne la durée au format 00:00.
 */
function filtre_min_sec(int $nb_seconde): string
{
    if ($nb_seconde >= 86400 || $nb_seconde < 0) {
        // Pas dans mon scope !
        return '';
    }

    return (new DateTime('0000-00-00'))
        ->add(new DateInterval('PT' . $nb_seconde . 'S'))
        ->format($nb_seconde >= 3600 ? 'H:i:s' : 'i:s');
}
2 « J'aime »