Un code long à charger en PHP et pas en HTML

Fermé
LightBen
Messages postés
49
Date d'inscription
lundi 28 avril 2008
Statut
Membre
Dernière intervention
15 janvier 2015
- 20 nov. 2011 à 17:17
LightBen
Messages postés
49
Date d'inscription
lundi 28 avril 2008
Statut
Membre
Dernière intervention
15 janvier 2015
- 23 nov. 2011 à 12:34
Bonjour,

Je tente d'afficher une liste de photos par un plugin JQuery. Si je le fais en HTML, ça marche, et la page s'affiche rapidement, et les interactions sont rapides ("photo suivante" etc).

Le code HTML...

<li>
	<a href="images/photos/big/1.jpg" title="">
		<img src="images/photos/small/1.jpg" width="100" height="100" alt="" />
	</a>
</li>
<li>
	<a href="images/photos/big/2.jpg" title="">
		<img src="images/photos/small/2.jpg" width="100" height="100" alt="" />
	</a>
</li>


Et ce pour le nombre de photos... je trouvais ça assez embêtant de rajouter à chaque fois une ligne si j'ai des photos supplémentaires à ajouter, et changer à chaque fois le numéro de l'image...

J'ai tenté ça en PHP à la place :

<?php /*
	for($i=1;$i<=26;$i++) {
		echo '
			<li>
				<a href="images/photos/big/'.$i.'.jpg" title="">
					<img src="images/photos/small/'.$i.'.jpg" width="100" height="100" alt="" />
				</a>
			</li>
	';}
*/?>


afin de n'avoir que la variable $i à changer dans la condition.

Et ça marche, sauf que... la page met une plombe à s'afficher avec ce code PHP, et surtout, quand je clique sur une photo pour l'agrandir, passer à l'image suivante, etc... c'est pire.

Page d'exemple : http://www.starlight-zappings.com/new/galerie-photo.php

C'est juste que vous observiez le fonctionnement du plugin. Le code est HTML et les photos sont bidons.

Après je viens de penser à une solution intermédiaire bien qu'un peu ballot encore :

<?php $i = 1; ?>
<li>
	<a href="images/photos/big/<?php echo $i ?>.jpg" title="">
		<img src="images/photos/small/<?php echo $i ?>.jpg" width="100" height="100" alt="" />
	</a>
</li>
<li>
	<a href="images/photos/big/<?php echo $i++ ?>.jpg" title="">
		<img src="images/photos/small/<?php echo $i ?>.jpg" width="100" height="100" alt="" />
	</a>
</li>


et répéter la seconde ligne le nombre de photos demandé... mais c'est un peu moyen comme solution.

Merci d'avance pour votre réponse les programmeurs ;)

6 réponses

mpmp93
Messages postés
6651
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2015
1 319
22 nov. 2011 à 11:25
Bonjour,

Au lieu d'un boucle for, faire ceci:

<?php
$listePhotos = array('moi.jpg', 'lui.jpg', 'eux.jpg', 'nous.jpg');
?>
<ul>
<?php  foreach($listePhotos AS $key => $val):
    <li><a href="images/photos/big/<?php echo $val; ?>" title="">
          <img src="images/photos/small/<?php echo $val; ?>" width="100" height="100" alt="" /></a></li>
<?php endforeach; ?>
</ul>



Ici, c'est la variable $listePhotos qui contient la liste des photos à traiter. La boucle foreach va traiter chaque item séquentiellement. Plus besoin de nommer les photos 1;jpg, 2.jpg, etc... Vous pouvez utiliser n'importe quel nom.

A+
3
mpmp93
Messages postés
6651
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2015
1 319
23 nov. 2011 à 10:10
Bonjour,

dans votre modèle de nommage des images en 1.jpg, 2.jpg, etc... vous obligez un nommage séquentiel. Si dans le futur vous êtes obligé d'enlever une image, avant:

1.jpg
2.jpg
3.jpg
4.jpg

après:

1.jpg
3.jpg
4.jpg

ou modifier l'ordre d'apparition des images:

1.jpg
4.jpg
2.jpg
3.jpg

vous êtes vite coincé par une boucle for utilisant l'index de boucle comme sélecteur d'image.

vous verrez que l'utilisation d'un tableau est beaucoup plus souple. D'une part:

vous utilisez des noms d'images plus complexes:

1.jpg => devient par exemple
photo.1.jpg
photo01.jpg
vuePontdeMillaulaNuit.jpg
bellePhoto.jpeg => notez que l'extension est jpeg

Vous pouvez mixer des illustrations de type différent: jpg, png, gif

extraitPhoto.png

On peut faire plus compliqué avec un tableau:

$listePhotos = array('moi.jpg', 'lui.jpg', 'eux.jpg', 'nous.jpg');

est notre tableau initial

$listePhotosAAfficher = $listePhotos;

Ensuite, on utilise une fonction aléatoire qui va extraire une image au hasard, par exemple la seconde image. On l'affiche puis on efface l'item 2. Notre tableau des photos à afficher contient maintenant:

$listePhotosAAfficher contient ('moi.jpg', 'eux.jpg', 'nous.jpg');

Il reste trois items. On sélectionne un autre item au hasard, fonction rand en php... On itère jusqu'à épuisement du tableau. Si tableau vide, on recharge la série initiale.

Intérêt: on peut à chaque visite personnaliser en affichant de manière aléatoire chaque photo d'une série en l'affichant une seule fois.

En effet, supposez que vous n'ayez pas 50 mais 1000 images à afficher... Je doute qu'il y ait un utilisateur qui va les regarder ces 1000 photos dans l'ordre imposé. Résultat: les 10 premières photos seront les plus consultées, les 5à suivantes déja beaucoup moins, et le 950 suivantes quasiment jamais!

Quand au problème du chargement de array, on peut utiliser une fonction qui va lire un répertoire (fonction dir en php), lire chaque nom de fichier et charger notre array. Si vous rajoutez une photo, elle sera automatiquement intégrée à array sans toucher au code php...

Voilà, je vous ai donné des pistes intéressantes pour votre projet.

mais surtout, oubliez le nommage séquentiel d'images qui est trop restrictif.

1
LightBen
Messages postés
49
Date d'inscription
lundi 28 avril 2008
Statut
Membre
Dernière intervention
15 janvier 2015
5
20 nov. 2011 à 17:21
En fait, cette dernière solution est aussi moyenne en chargement... mieux que ma boucle, mais toujours lente... J'upload le tout comme ça vous avez le visuel, d'ici 17:23
0
LightBen
Messages postés
49
Date d'inscription
lundi 28 avril 2008
Statut
Membre
Dernière intervention
15 janvier 2015
5
22 nov. 2011 à 10:53
Up =)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
LightBen
Messages postés
49
Date d'inscription
lundi 28 avril 2008
Statut
Membre
Dernière intervention
15 janvier 2015
5
22 nov. 2011 à 17:06
Mais pour ça je dois mettre le nom de toutes les photos dans le tableau de départ non ? Ou il y a moyen à l'intérieur même de ce tableau placer une boucle (vu que mes photos peuvent se nommer 1, 2, ... 50.jpg où je pourrais incrémenter une variable ?)

Merci de ta réponse c'est en tout cas déjà vachement mieux à vue de nez, je vais tester dans la semaine
0
LightBen
Messages postés
49
Date d'inscription
lundi 28 avril 2008
Statut
Membre
Dernière intervention
15 janvier 2015
5
23 nov. 2011 à 12:34
Merci pour cette réponse qui m'aide encore un peu plus dans l'amélioration de ma page photos.

Seulement, je ne suis pas assez avancé en PHP pour faire tout seul une "fonction aléatoire qui va extraire une image au hasard" ou... ah, je viens de relire le dernier paragraphe super intéressant :

"Quand au problème du chargement de array, on peut utiliser une fonction qui va lire un répertoire (fonction dir en php), lire chaque nom de fichier et charger notre array. Si vous rajoutez une photo, elle sera automatiquement intégrée à array sans toucher au code php"

Comment on fait ?? Je sais qu'il faut se débrouiller, mais là, je suis trop noob en PHP pour créer des fonctions comme ça, pour l'instant j'en suis au stade "petit malin qui peut lire et modifier des codes pré existants".

Merci encore =)
0