1

Bon, c'est même pas un projet en tant que tel, c'est juste que j'ai eu besoin, pour partager des photos et vidéos d'un mariage sans les poser sur un service tiers type Picasa ou autre, d'avoir une galerie de base.
C'est archi simple, ça ne respecte aucun standard, c'est écrit en 10 minutes sur un coin de table et ça n'a pas vocation à faire plus, mais je me dis que ça peut éventuellement dépanner les gens.
Comme c'est fait pour un cas très particulier, ça gère les fichier .JPG (ouais, en majuscule, parce que l'APN sortait des fichiers comme ça) et .webm (en minuscule, parce qu'une fois converties, les vidéos avaient cette extension). Ca gère les vignettes pour les images (les gérer pour les vidéos est assez simple, mais en fait j'ai juste eu la flemme d'en faire grin) si elles ont le même nom que le fichier, précédé de la lettre "m", et si elles sont dans ./thumbs.
Ca permet de générer une liste des fichiers si on veut utiliser un plug-in de téléchargement de masse.

J'ai trouvé plein de trucs qui faisaient ça en mieux, mais qui étaient des extensions WordPress, ou demandaient 15000 extensions jQuery. Là, ça tient en quelques lignes et c'est tout (et ouais, quand je suis en vacances, j'utilise la balise <center>, je suis comme ça, moi embarrassed et je fais même des target vers _blank, et je ne mets pas de doctype).

Voilà le code, vous pouvez vomir (j'ai moi-même un peu vomi en l'écrivant cheeky ), faites-en bon usage (ou pas ^^).
<html> <?php $dir = './'; $files = scandir($dir); ?> <script language='javascript'> function setContent(content, type) { if (type == "movie") { content = "<center><video width='800' height='500' controls src='" + content + "'></video><br /><a href='" + content + " target='_blank'>T&eacute;l&eacute;charger</a></center>"; } if (type == "picture") { content = "<center><img style='max-height:650px;image-orientation: from-image;' src='" + content + "'/><br /><a href='" + content + "' target='_blank'>T&eacute;l&eacute;charger</a></center>"; } document.getElementById('maincontainer').innerHTML = content; } </script> <body style="background-color: black;"> <?php if ($_GET["fileList"] == 1) { echo "<center><a href='./index.php?fileList=0'>Cacher la liste</a><br /><br/></center>"; foreach ($files as $myfile) { $ext = explode(".", $myfile); $myext = end($ext); $thumb = null; if ($myext == "webm" || $myext == "JPG") { echo "<a href ='http://mysite.free.fr/MariageTS/$myfile'>http://mysite.free.fr/Mariage/$myfile</a><br /> "; } } } else { echo "<div id='mainthumbs' style='width:auto;overflow-y: scroll;height: 180px;position:absolute;top:0px;margin-bottom:20px;background-color: white;'>"; foreach ($files as $myfile) { $ext = explode(".", $myfile); $myext = end($ext); $thumb = null; if ($myext == "webm") { $thumb = "./thumbs/movie.png"; $contentType = "movie"; } elseif ($myext == "JPG") { $thumb = "./thumbs/m" . $myfile; $contentType = "picture"; } if ($thumb != null) { echo "<img src='$thumb' onclick='setContent(\"$myfile\", \"$contentType\")' style='border:1px solid black;max-height:150px;' alt='$myext'> "; } } echo "</div>"; echo "<center><div id='maincontainer' style='width:1000px;height:670px;border:1px solid black;background-color: black;margin-top:200px;'></div></center>"; echo "<center><a href='./index.php?fileList=1'>Afficher la liste des fichiers</a></center>"; } ?> </body> </html>
avatar

2

Merci !
(tiens, target blank est interdit ? grin)

3

C'est très fortement déconseillé pour plein de raisons, dont deux principales :
- c'est à l'utilisateur de choisir ce qu'il va faire de son clic (nouvel onglet, nouvelle fenêtre, même fenêtre)
- ça pose plein de problèmes pour la gestion de l'accessibilité sur les terminaux des usagers handicapés
avatar

4

- annéfé
- ah, 0K.

5

Est-ce que ça gère aussi les images où il n'y a pas d'ours ?
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

6

Vu le mariage en question, oui, mais j'ai mis du mal à comprendre pourquoi au début rien n'apparaissait sad
avatar

7

Je propose une version retravaillée smile pas que ce soit une "bonne" version, mais j'avais 5 minutes pour me distraire.
Nouvelle version
<?php $dir = './'; // Dossier contenant les fichiers $files = scandir($dir); if (empty($files)) { exit("Le dossier de la galerie est vide ou inaccessible."); } ?> <!DOCTYPE html> <html lang="fr"> <head> <title>Galerie</title> <meta charset="utf-8"> </head> <style> body { background-color: black; width: 100%; } #mainthumbs { width: auto; overflow-y: scroll; height: 180px; position: absolute; top: 0px; margin-bottom: 20px; background-color: white; } #mainthumbs img { border: 1px solid black; max-height: 150px; } .middle { text-align: center; } img.content { max-height: 650px; image-orientation: from-image; } #hide-list { margin-bottom: 2em; } #maincontainer { width: 1000px; height: 670px; border: 1px solid black; background-color: black; margin: auto; margin-top: 200px; } </style> <body> <?php if ($_GET["fileList"] == 1): ?> <div id="hide-list" class="middle"> <a href="./index.php?fileList=0">Cacher la liste</a> </div> <div id="files-list"> <?php foreach ($files as $myfile) { $ext = strtolower(end(explode(".", $myfile))); $thumb = null; if (in_array($ext, ['webm', 'jpg', 'jpeg', 'png', 'gif'])) { $path = $dir . $myfile; echo '<a href="' . $path . '">' . $path . '</a><br>'; } } ?> </div> <?php else: ?> <div id="mainthumbs"> <?php foreach ($files as $myfile) { $ext = strtolower(end(explode(".", $myfile))); $thumb = null; if ($ext === "webm") { $thumb = "./thumbs/movie.png"; $contentType = "movie"; } elseif (in_array($ext, ['jpg', 'jpeg', 'png', 'gif'])) { $thumb = "./thumbs/m" . $myfile; $contentType = "picture"; } if ($thumb !== null) { echo '<img src="' . $thumb . '" onclick="setContent(\"' . $myfile . '\", \"' . $contentType . '\") alt="' . $ext . '">'; } } ?> </div> <div id="maincontainer"></div> <div class="middle"> <a href="./index.php?fileList=1">Afficher la liste des fichiers</a> </div> <?php endif; ?> </body> <script> function setContent(content, type) { switch (type) { case "movie": content = '<div class="middle"><video width="800px" height="500px" controls src="' + content + '"></video><br><a href="' + content + '" target="_blank">Télécharger</a></div>'; break; case "picture": content = '<div class="middle"><img class="content" src="' + content + '"/><br><a href="' + content + '" target="_blank">Télécharger</a></div>'; break; default: return; } document.getElementById('maincontainer').innerHTML = content; } </script> </html>

Dommage qu'il n'y ait pas une coloration syntaxique PHP/HTML/CSS/JS combinés selon qu'on soit dans du <?php ?>, du <script></script>, du <style></style> ou rien de cela.

En résumé :
  • J'ai mis un doctype, un header. Le HTML5 est minimaliste sur les déclarations, autant en profiter. Et un charset pour ne pas s'emmerder avec les accents à recoder.
  • Le CSS a été séparé des balises HTML. C'est plus pratique pour modifier le design si besoin.
  • Les balises <center> ont été retirées et brûlées au lance-flamme, en échange de blocs enveloppants centrant le texte.
  • Le JS a été poussé en bas de la page comme il est généralement recommandé.
  • L'extension est maintenant case-free et j'ai ajouté les formats d'images basiques pour plus de souplesse.
  • Les blocs PHP ont été resserrés pour laisser le HTML libre aussi souvent que possible, c'est mieux pour la coloration syntaxique.
  • HTML5 oblige, <br /> est devenu <br>
Les modifications différentes de ci-dessus sont des préférences personnelles.

Je ne connaissais pas image-orientation. Dommage que ce soit encore peu utilisé.
avatar
« Nous avons propagé sur Extranet une histoire fabriquée de toutes pièces selon laquelle une certaine disposition d'étoiles, vue depuis la planète d'origine des butariens, formaient le visage d'une déesse galarienne.
Sans chercher à vérifier ces informations, certains ont décrété que c'était la preuve de l'existence de la déesse. Ceux qui notaient le manque de preuves se faisaient attaquer. »

Legion, geth trolleur à portée galactique

8

Ca me fait penser qu'il faudrait vraiment que je généralise la chose que j'avais fait en 2009 aussi pour un marriage, je m'était plutot fait chier parce qu'il fallait que les convives puissent uploader leur propre photos pour les partager avec tout le monde, et aussi la possibilité de telecharger les galleries en entier, et bien sur une charte graphique imposé par les clientmariés \o/

M'était fait chier pour l'upload et le site est capable de générer (et mettre en cache) des thumbs a la taille voulue, de mémoires certaines tailles par défaut été généré après l'upload pour accélérer le tout, mais oué j'avais a peu pret bien fait les choses, le plus chiant a l'époque était le manque du HTML5 pour uploader plusieurs fichiers, ou un .zip volumineux, j'avais du passer par un machin flash pour ca, et le téléchargement d'une gallerie générer un fichier .zip a la volée \o/
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

9

Meowcate > oh, merci love
avatar

10

Le logiciel digiKam peut générer automatiquement du HTML statique pour une galerie d'images.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

11

Oui, il y a plein de logiciels qui permettent de générer du HTML statique, mais ce n'est pas pratique du tout...
avatar

12

Je n'ai pas encore eu le temps d'essayer avec assez d'image, mais juste pour signaler : la version de Meowcate génère un petit warning à cause de l'appel strtolower(end(explode(".", $myfile))) car la fonction "end" demande une référence vers un tableau (et modifie son itérateur interne). On doit pouvoir arranger ça en utilisant strtolower(preg_replace('/.*\./', '', $myfile)) ou encore mieux : strtolower(pathinfo($myfile, PATHINFO_EXTENSION)).
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)