Ah oui, je suis sûr... PHP ne PEUT PAS afficher quoi que ce soit sans être appelé explicitement. C'est à dire qu'une fois ta page chargée, PHP N'en a plus rien à faire, puisqu'il est exécuté sur le serveur, et pas chez le client (navigateur). Il n'y a que des scripts côté client qui peuvent être exécutés, dont javascript... C'est lui qui, dans ce cas, appelle PHP pour savoir ce qu'il en dit...
Mais vraiment, jette un oeil à jQuery, tu seras surpris de la simplicité avec laquelle ton problème se résoud...
Je vais essayer de te convaincre, parce que ce serait dommage d'abandonner si près du but (surtout avec une lib comme jQuery qui facilite grandement la vie pour les gens qui, comme moi, ne supportent pas javascript).
Une première ligne pour inclure le script jQuery.
Dans ton code HTML, il te suffit d'avoir un élément
dans lequel tu affichera tes images : c'est dans cet élément
que tu inclus le script PHP qui va chercher les images dans ta base de données. Ce script PHP doit afficher (avec echo()) du HTML, mais uniquement ce qui va dans le
.
Ensuite, un petit script js qui va appeler le script PHP (jquery se charge tout seul de l'appeler et de mettre où tu lui dis le résultat) et remplir l'élément
avec ce que le script PHP a produit.
Mettons que ton élément
à remplir porte l'id galerie:
Lors du premier chargement de ta page, ton script galerie.php va effectuer deux requêtes :
- SELECT SQL_CALC_FOUND_ROWS * FROM photo LIMIT $offset,3;
Ca, ça te donne d'abord les 3 photos que tu veux afficher sur ta page la première fois. Il faut penser à calculer $offset en fonction du numéro de la page demandée, comme je te l'ai indiqué dans un message précédent. Oui, il faut utiliser la variable $_GET : mais ce sera transparent pour l'utilisateur qui ne rechargera pas la page et ne verra donc jamais de truc du genre : ?page=2
- SELECT FOUND_ROWS();
Là, tu récupères le nombre total de photos présentes qui satisfont les critères (si tu mettais une clause WHERE par exemple, ça ne compterait que les photos qui satisfont la clause WHERE, mais sans tenir compte de la limite imposée par LIMIT $offset,3). Mettons que tu stockes cette donnée dans $nb_photos.
Ton script galerie.php va ensuite générer du code HTML pour les 3 photos. Qu'il s'agisse d'un tableau HTML, d'une liste avec un bon CSS ou de quelques
flottants, peu importe. Ca affiche les 3 photos. Il doit aussi afficher les liens pour les différentes pages. Admettons, pour faire simple, que tu affiches les liens pour toutes les pages (sinon, tu pourrais regénérer la barre de pagination, c'est pas plus compliqué, juste un peu plus long et pas indispensable pour que tu comprennes le principe).
Les liens seront du genre : ton_script_principal.php?page=2
Pas de panique, la page ne sera pas rechargée... C'est juste qu'il faut (enfin c'est un choix perso, mais honnêtement, c'est mieux de le prévoir comme ça) que les navigateurs qui n'ont pas javascript activé puissent suivre les liens (c'est notamment le cas des moteurs de recherche !). Concrètement, si le lien est suivi tel quel, ça recharge la page complètement avec la variable $_GET['page'] valant 2. Le script inclus, que j'appelle galerie.php, le sera avec cette fois $offset valant 3 et non plus 0, du fait qu'on affiche la page 2...
bref. Ensuite, jQuery va réécrire A LA VOLEE les liens sur ces éléments lorsque l'on cliquera dessus, le lien ne sera pas suivi... Pour cela, il suffit dans le script js de faire return false;
Ton script PHP, jusqu'à présent, écrit les numéros de page dans le lien... Tu reprends ce numéro pour l'afficher dans le script sur le lien :
[mon_script.php?page=<?php echo $page; ?> )" >Page <?php echo $page; ?>]
Ce qui produira un code HTML pour le lien de ce genre, pour le lien vers la page 2 :
[mon_script.php?page=2 Page 2]
Il reste à écrire la fonction js qui va charger le nouveau contenu dans le
dont on parlait plus haut :
Ca ressemblerait à ça :
<script type="text/javascript">
function charge_page(num_page) {
$('#galerie').load('/galerie.php', num_page);
}
</script>
C'est tout... Explications :
$('#galerie') : indique à jQuery quel élément du document on souhaite manipuler
.load : charge un document HTML distant et l'injecte dans le document, plus précisément, dans la balise indiquée (entre
et
pour notre cas)
('/galerie.php', num_page) : l'appel au script PHP qui va générer le HTML à insérer, 2 étant le numéro de la page.
Franchement, même si les explications sont un peu longues, c'est pas bien difficile, non ? ^^
Lien utile : doc jQuery sur la fonction load()
--
Neige
N'hésitez pas à lire la doc