Créer une galerie de photos (Etape 2)

Bonjour à tous,

Nous avions commencé il y a peu la fabuleuse aventure qu’est la création d’une galerie photo. En l’histoire de quelques lignes nous avions déjà une jolie page qui affichait les miniatures des photographies présentes aux côtés de notre script.

Aujourd’hui tentons d’aller un peu plus loin en proposant la navigation dans des sous-galeries créés par des répertoires dans mon répertoire principale et, au passage, tâchons de rendre cela plus joli!

Notre première tâche pour aujourd’hui n’est pas mince. Il nous faut proposer des sous-galeries.
Evidemment, je n’ai pas envie de dupliquer mon script autant de fois que j’ai de sous-répertoire. Or, je sais que par défaut chez certains hébergeurs (cela de la configuration par défaut d’apache), lorsque que je ne place pas d’index dans un dossier et que j’y accède, je sais y voir les fichiers et naviguer dans ses sous-dossiers.
Malheureusement, je ne peux pas (du moins, dans l’état actuel de mes compétences: je ne sais pas) modifier cet affichage par défaut. Je sais seulement le contrecarrer en indiquant qu’il n’y a pas d’index et customiser mon erreur 404.

Et c’est là que ce situe notre chance. En effet, nous pouvons pointer nos erreurs 404 vers un même fichier PHP ce qui rend notre affichage d’erreur dynamique.
Dans un fichier .htaccess à la racine de mon répertoire photo, j’aurai donc quelque chose comme ceci:

  1.  

Cependant, si je pointe les fichiers et dossier par rapport à mon script, ce seront toujours les mêmes affichés et ce, peu importe le sous-répertoire consulté.
C’est autour de la variable $_SERVER de venir à notre rescousse puisque lorsqu’on navigue et que l’on tombe sur une erreur 404, l’on n’est pas redirigé vers une autre page, seul est redirigé l’affichage provenant de notre fichier explore.php (pour reprendre ce que j’ai indiqué dans mon .htaccess).
Je peux donc récupérer l’URL appelé via: $_SERVER[‘REQUEST_URI’] et indiquer à mon script de scanner dans ce répertoire-là et non pas juste à proximiter de mon fichier explore.php

Après quelques modifications de notre script précédent, notamment en ce qui concerne l’encode des URLs, mais surtout en tenant compte de l’emplacement relatifs des fichiers et dossiers, nous arrivons à ceci:

  1. span class= »st0″>’image.class.php’; //On charge notre classe personnelle de traitement d’images
  2. ‘/photos/’, »‘REQUEST_URI’]));
  3.  
  4. /* On récupère la liste complète des images, et la réduite des miniature */‘*.{jpg, jpeg, png, gif, JPG, JPEG, PNG, GIF}’‘mini_*.{jpg, jpeg, png, gif, JPG, JPEG, PNG, GIF}’/* On trie afin de ne conserver QUE les originales *//* On liste les dossiers */‘*’‘<a href="’‘">’.$rep.‘</a><br>’;}
  5.  
  6. /* On passe en revue les photos pour créer les miniatures non existantes */ », $photo); //On récupère uniquement le nom du fichier
  7. ‘mini_’//charge l’image originale
  8. ‘tailles’)->recadrer(100,100); //recadre l’image en 100×100
  9. ‘effets’//ajoute un arrondi blanc de 20px de rayon
  10. ‘mini_’.$name); //sauve la miniature
  11. //vide le cache
  12.     }
  13.  
  14.     /* On affiche la miniature pour chaque photo avec un lien vers la grande */‘ <a href="’‘"><img src="mini_’‘"></a> ‘

Enregistré dans comme explore.php dans notre dossier photos et agrémenté de deux sous-répertoires et de mes 4 photos de windaubiens, on se retrouve avec ceci:

Sympa non?

Oui mais ce n’est pas tout! Nous avions une seconde tâche aujourd’hui: rendre cela un peu plus joli.
Vous l’aurez remarqué, j’ai déjà commencé puisque dans le code indiqué ci-dessus, s’est glissée une nouvelle ligne:

  1. span class= »st0″>’effets’//ajoute un arrondi blanc de 20px de rayon

Vous l’aurez compris, nous pouvons utiliser les effets et autres fonctions de ma classe image pour rendre cela plus agréable à l’oeil. Mais une chose est visuellement désagréable dans l’illustration ci-dessus: le bord ajouté/imposé par la navigateur sur les images mises en lien.
Pour l’enlever, rien de plus simple: Il suffit d’ajouter une règle CSS qui l’indique!
Pour ceux qui n’ont pas trop l’habitude de jouer avec les feuilles de style, il suffit d’imbriquer ce code HTML autour du code susmentionné pour régler l’affaire:

  1. <html>
  2.     <head>
  3.     <style type="text/css">
  4.     A IMG {border: 0;}
  5.     </style>
  6.     </head>
  7.  
  8.     <body>
  9. (Code PHP)
  10.     </body>
  11. </html>

Ce qui donne quelque chose comme ceci:

Vous remarquez que j’ai aussi ajouté 2 lignes de plus dans la création de mes miniatures, lesquelles?
Suite au prochain épisode!

Tags: , , , , , , , ,