Eléphanteau du PHP |
23 Messages
18 janv. 2011, 15:36
Bonjour,
Bon ! Je suis encore bloqué.
Jojolapine, j'ai suivi tes conseils et c'est OK, je peux passer de page en page et le script m'affiche bien mes images, je t'en remercie.
Cependant, malgré l'aide de AB, dès la deuxième page mes images ne respectent plus du tout le nombre de colonnes que j'ai définis. Elles s'affichent n'importe où dans le tableau. De plus, sur la dernière page, le script essaye de m'afficher des images qui n'existent pas. Il gère mal la division je pense et si je définis sept images par page et que la dernière page ne contient que deux images il essaye de m'afficher les cinq autres et du coup je me retrouve, dans mon exemple, avec cinq croix rouge à la place d'images.
Voilà ce que j'ai fait dans le code :
<?php
// on déclare un tableau qui contiendra le nom des fichiers de nos miniatures
$tableau = array();
// on ouvre notre dossier contenant les miniatures
$dossier = opendir ('images/Borris Vallejo/1991/tb/');
while ($fichier = readdir ($dossier)) {
if ($fichier != '.' && $fichier != '..' && $fichier != 'index.php') {
// on stocke le nom des fichiers des miniatures dans un tableau
$tableau[] = $fichier;
}
}
closedir ($dossier);
// on défini le nombre de colonne sur lesquelles vont s'afficher nos miniatures
$nbcol=5;
// on compte le nombre de miniatures
$nbpics = count($tableau);
$nb_pics_par_page = 7; /* Nombre de photos qui seront affichées sur chaque page */
/* Paramètres de pagination */
$url = "./exemple_calcul_nbr_pages%202.php?page=";
/* On détermine quelle est la page qui est actuellement affichée */
$page_en_cours = isset($_GET['page']) ? $_GET['page'] : 0;
$page_affichee = ($page_en_cours + 1);
// si on a au moins une miniature, on les affiche toutes
// calcul du rang de départ
$debut = $page_en_cours*$nb_pics_par_page;
// calcul du rang de fin
$fin = $debut+$nb_pics_par_page;
if ($nb_pics_par_page != 0) {
echo '<table>';
for ($i = $debut; $i < $fin; $i++){
if($i%$nbcol==0) echo '<tr>';
// pour chaque miniature, on affiche la miniature munie d'un lien vers la photo en taille réelle
echo '<td>';
echo '<a href="images/Borris Vallejo/1991/' , $tableau[$i] , '" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/' , $tableau[$i] , '" alt="Image" /></a>';
echo '</td>';
if($i%$nbcol==($nbcol-1)) echo '</tr>';
}
// Au cas où ...
if ($i!=0 && $i%$nbcol!=0) { // S'il n'y a pas eu assez de cellules dans la boucle pour finir la ligne ...
echo '<td colspan="'.($nbcol - ($i%$nbcol) ).'"> </td>'; // ... on complète avec une cellule vide de la bonne taille...
echo '</tr>'; // ... et on ferme la ligne
}
echo '</table>';
}
// si on a aucune miniature, on affiche un petit message :)
else echo 'Aucune image à afficher';
/* Calcul du nombre total de pages : on arrondit à l'entier supérieur (ceil() ) */
$nb_pages = ceil($nbpics / $nb_pics_par_page);
/**
Nous disposons maintenant de suffisament d'éléments pour créer notre barre de navigation.
Première chose à vérifier : avons-nous plusieurs pages, et au moins une ?
*/
if($nb_pages > 0)
{
/* On définit une variable qui contiendra les données de navigation */
$barre_nav = "";
/* Nous avons au moins une page : avons nous besoin d'une barre de navigation ? */
if($nb_pages > 1)
{
/**
Nous avons plusieurs pages: nous allons afficher successivement les liens vers
les pages précédentes s'il y en a, la page en cours et les liens vers les pages
suivantes. Nous aurons une barre sous la forme : 1 | 2 | 3 etc.. en liens clicables
sauf pour la page en cours dont nous mettrons le chiffre en gras
*/
if($page_en_cours > 0)
{
for($i = 0; $i < $page_en_cours; $i++)
{
$p = $i + 1;
$barre_nav .= "<a href=\"". $url . $i ."\" title=\"page ". $p ."\">". $p ."</a> | ";
}
}
/**
On affiche la page en cours : notez le (+ 1) : pour les calculs, nous partons d'une
page 0 mais pour l'internaute, il est préférable de commencer à la page 1, donc on incrémente
*/
$barre_nav .= "<strong>". $page_affichee ."</strong>";
/* Enfin on affiche (s'il y a lieu) les liens vers les pages suivantes */
if(($page_affichee) < $nb_pages)
{
/* Il reste encore d'autres pages à afficher */
$nb_suivantes = $nb_pages - ($page_affichee);
for($j = ($page_affichee); $j < $nb_pages; $j++)
{
$p = $j + 1;
$barre_nav .= " | <a href=\"". $url . $j ."\" title=\"page ". $p ."\">". $p ."</a>";
}
}
/* On peut définir en plus la situation dans une autre variable à afficher ailleurs */
$page_affichee = "Page ". $page_affichee ." sur un total de ". $nb_pages ." pages.";
}
else
{
/* Nous n'avons qu'une seule page, on peut se contenter d'afficher juste page 1/1 */
$barre_nav .= "page 1/1";
}
?>
<p class="navigation"><?php echo($barre_nav); ?></p>
<?php
}
else
{
/**
Nous n'avons aucune page, on peut alors afficher un message autre
sans devoir nous préoccuper de la navigation
*/
?>
<h3>Aucune nouvelle n'a encore été publiée à ce jour</h3>
<hr />
<?php
}
?>
Les modifications apportées se situent entre les lignes 43 et 70. Je sais que je ne suis pas loin, mais là je sèche complètement.
Micky