Amélioration script galerie photo

ViPHP
ViPHP | 3607 Messages

17 janv. 2011, 16:16

Alors pour répondre au problème de la pagination pendant que tu corriges les erreurs relevées par AB ;)

Il faut agir sur le même principe qu'une requête SQL sur sa partie

Code : Tout sélectionner

LIMIT __debut__,__nb_elmts__
Donc ton code:
        for ($i=0; $i<$nb_pics_par_page; $i++){
doit être changé car actuellement cette partie veut dire:
je prend les images à partir de Zéro et ce jusqu'à $nb_pics_par_page...
Il faut le changer en:
// 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;

for ($i = $debut; $i < $fin; $i++){
Voilà il y à surement des ajustements à faire au niveau du calcul mais l'idée est là!

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) ).'">&nbsp;</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

Eléphanteau du PHP | 23 Messages

24 janv. 2011, 19:33

Je reviens faire un petit tour par ici est que vois-je ?!! Pas de réponse à mon dernier post ! Snif... :cry:

Est-ce que par hasard on m'aurait oublié ?

J'espère que j'aurais de nouveau un peu d'aide d'ici peu.

Alors @+

Micky

ViPHP
AB
ViPHP | 5818 Messages

24 janv. 2011, 21:17

Tu implémente mal le code de ce tuto.

Reprends le code initial du tuto puis construis ta page autour et ça ira mieux.

Invité
Invité n'ayant pas de compte PHPfrance

26 janv. 2011, 12:54

Bon ! J'ai repris le code du tuto est j'ai brodé le mien autour... bah ça ne change rien :|

Par contre dans le tuto c'est une boucle "While" que est utilisée. Moi j'utilise une boucle "For". Du coup je me perds un peu avec mon index "$i" et la notion de compteur "$cpt" du tuto.

J'ai également remarqué que lorsque le nombre d'images par page est un multiple du nombre de colonnes, les images s'organisent très bien dans chaque page. Par contre, dès que ce n'est plus un multiple, dès la 2ème page, c'est l'anarchie et les images se mettent n'importe où. Et surtout il y a toujours des cellules vides sur la dernière page quand il y a un reste d'images.

Est-ce qu'il ne faudrait pas tout d'abord créer le tableau et ensuite le remplir avec les images ? Parce que qu'à présent, si j'ai bien compris, on créé une cellule puis on met directement l'image dedans et ainsi de suite jusqu'à la dernière image.

Voilà 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);

// Nombre de photos qui seront affichées sur chaque page.
$nb_pics_par_page = 7;

// Paramètres de pagination
$url = "./exemple_calcul_nbr_pages4.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);

// 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;

//Calcul du nombre total de pages. On arrondit à l'entier supérieur (ceil().
$nb_pages = ceil($nbpics / $nb_pics_par_page);

// Si on a au moins une miniature dans le répertoire on l'affiche.
if ($nbpics != 0) {

// Initialisation d'un compteur d'éléments (ici nos images).
$cpt = 0;

?>

<table>

<?php

for ($i = $debut; $i < $fin; $i++){ // On parcourt les images pour la page appelée.

    // Début d'une ligne du tableau
    if ($i%$nbcol==0) // On divise le nb d'élément par le nb de colonnes. Si le reste est de 0 ...
        echo '<tr>'; // ... alors on est sur le premier élément d'une ligne et on ouvre la ligne.

    	// On place chaque élément dans une cellule du tableau.
		// 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>';

    // Fin d'une ligne du tableau.
    if ($cpt%$nbcol==($nbcol-1)) // On divise le nb d'élément par le nb de colonnes. Si le reste est de ($nbCols-1) ...
        echo '</tr>'; // ... on est sur le dernier élément d'une ligne et on ferme la ligne.
        
	$cpt++; // On incrémente le compteur pour savoir où on en est.

}
	// Au cas où ...
	if ($cpt!=0 && $cpt%$nbcol!=0) { // S'il n'y a pas eu assez de cellules dans la boucle pour finir la ligne ...
   		echo '<td colspan="'.($nbcol - ($cpt%$nbcol) ).'">&nbsp;</td>'; // ... on complète avec une cellule vide de la bonne taille...
    	echo '</tr>'; // ... et on ferme la ligne.
}

?>

</table>

<?php

// Création de la barre de navigation :

    // On définit une variable qui contiendra les données de navigation.
    $barre_nav = "Page ";
    // 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 1/1.
        $barre_nav .= "1/1";
    }

?>	

<p class="navigation"><?php echo($barre_nav); ?></p>

<?php

} // fin condition si miniature dans le répertoire.

else echo 'Aucune image à afficher';// S'i n'y a aucune miniature on affiche un petit message :)

?>
Merci de me faire part de vos idées... encore... :wink:

Micky

ViPHP
ViPHP | 3607 Messages

26 janv. 2011, 12:57

Bonjour,

Que donne la source générée?
(ctrl+u sous firefox)
Donnes nous uniquement le tableau contenant les images ;)

ViPHP
ViPHP | 3607 Messages

26 janv. 2011, 13:02

Petite idée supplémentaire...
Pour d'une part ne pas s’embêter avec des cases vides, et d'autres part pour avoir une sémantique plus juste (même si c'est discutable)...
Tu pourrais tout gérer en css...
Tu mets tes images dans une liste :
<ul>
<li><img ... /></li>
<li><img ... /></li>
<li><img ... /></li>
...
</ul>
Et sur le css tu fait ceci :

Code : Tout sélectionner

ul li { list-style-type: none; float: left; }
Ensuite tu n'as plus qu'a régler tes margin/padding au besoin...
Attention à ne pas oublier de rajouter un élément en clear : left à la suite de la liste ;)

Invité
Invité n'ayant pas de compte PHPfrance

26 janv. 2011, 15:34

Voilà pour les codes sources. Mon script est paramétré pour afficher 7 images par page dans des tableaux de 5 colonnes. Dans mon exemple j'ai 4 pages :

Page 1 :
	     <div id="contenu" align="center">
	
	     		<h2>Exemple calcul du nombre de pages à afficher</h2><br>
	

<table>

<tr>
<td><a href="images/Borris Vallejo/1991/1991 Arachne.jpg" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/1991 Arachne.jpg" alt="Image" /></a></td>
<td><a href="images/Borris Vallejo/1991/1991 Ariadne.jpg" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/1991 Ariadne.jpg" alt="Image" /></a></td>
<td><a href="images/Borris Vallejo/1991/1991 Centaurs.jpg" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/1991 Centaurs.jpg" alt="Image" /></a></td>
<td><a href="images/Borris Vallejo/1991/1991 Circe.jpg" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/1991 Circe.jpg" alt="Image" /></a></td>
<td><a href="images/Borris Vallejo/1991/1991 Deathstalker 2.jpg" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/1991 Deathstalker 2.jpg" alt="Image" /></a></td>
</tr>
<tr>
<td><a href="images/Borris Vallejo/1991/1991 Dryads.jpg" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/1991 Dryads.jpg" alt="Image" /></a></td>
<td><a href="images/Borris Vallejo/1991/1991 Eurydice.jpg" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/1991 Eurydice.jpg" alt="Image" /></a></td>
<td colspan="3">&nbsp;</td>
</tr>
</table>

	

<p class="navigation">Page <strong>1</strong> | <a href="./exemple_calcul_nbr_pages4.php?page=1" title="page 2">2</a> | <a href="./exemple_calcul_nbr_pages4.php?page=2" title="page 3">3</a> | <a href="./exemple_calcul_nbr_pages4.php?page=3" title="page 4">4</a></p>


		</div><!-- #contenu -->

Page 2 :
	     <div id="contenu" align="center">
	
	     		<h2>Exemple calcul du nombre de pages à afficher</h2><br>
	

<table>

<td><a href="images/Borris Vallejo/1991/1991 Persephone.jpg" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/1991 Persephone.jpg" alt="Image" /></a></td>
<tr>
<td><a href="images/Borris Vallejo/1991/1991 Pillar Of The Cave.jpg" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/1991 Pillar Of The Cave.jpg" alt="Image" /></a></td>
<td><a href="images/Borris Vallejo/1991/1991 Pythoness.jpg" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/1991 Pythoness.jpg" alt="Image" /></a></td>
<td><a href="images/Borris Vallejo/1991/1991 Sachmet.jpg" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/1991 Sachmet.jpg" alt="Image" /></a></td>
<td><a href="images/Borris Vallejo/1991/1991 Satyr.jpg" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/1991 Satyr.jpg" alt="Image" /></a></td>
</tr>
<td><a href="images/Borris Vallejo/1991/1991 Space Manta.jpg" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/1991 Space Manta.jpg" alt="Image" /></a></td>
<tr>
<td><a href="images/Borris Vallejo/1991/1991 The Elvenband.jpg" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/1991 The Elvenband.jpg" alt="Image" /></a></td>
<td colspan="3">&nbsp;</td>
</tr>
</table>

	

<p class="navigation">Page <a href="./exemple_calcul_nbr_pages4.php?page=0" title="page 1">1</a> | <a href="./exemple_calcul_nbr_pages4.php?page=1" title="page 2">2</a> | <strong>3</strong> | <a href="./exemple_calcul_nbr_pages4.php?page=3" title="page 4">4</a></p>


		</div><!-- #contenu -->
Page 3 :
	     <div id="contenu" align="center">
	
	     		<h2>Exemple calcul du nombre de pages à afficher</h2><br>
	

<table>

<td><a href="images/Borris Vallejo/1991/1991 Persephone.jpg" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/1991 Persephone.jpg" alt="Image" /></a></td>
<tr>
<td><a href="images/Borris Vallejo/1991/1991 Pillar Of The Cave.jpg" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/1991 Pillar Of The Cave.jpg" alt="Image" /></a></td>
<td><a href="images/Borris Vallejo/1991/1991 Pythoness.jpg" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/1991 Pythoness.jpg" alt="Image" /></a></td>
<td><a href="images/Borris Vallejo/1991/1991 Sachmet.jpg" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/1991 Sachmet.jpg" alt="Image" /></a></td>
<td><a href="images/Borris Vallejo/1991/1991 Satyr.jpg" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/1991 Satyr.jpg" alt="Image" /></a></td>
</tr>
<td><a href="images/Borris Vallejo/1991/1991 Space Manta.jpg" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/1991 Space Manta.jpg" alt="Image" /></a></td>
<tr>
<td><a href="images/Borris Vallejo/1991/1991 The Elvenband.jpg" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/1991 The Elvenband.jpg" alt="Image" /></a></td>
<td colspan="3">&nbsp;</td>
</tr>
</table>

	

<p class="navigation">Page <a href="./exemple_calcul_nbr_pages4.php?page=0" title="page 1">1</a> | <a href="./exemple_calcul_nbr_pages4.php?page=1" title="page 2">2</a> | <strong>3</strong> | <a href="./exemple_calcul_nbr_pages4.php?page=3" title="page 4">4</a></p>


		</div><!-- #contenu -->
Page 4 (et dernière) :
	     <div id="contenu" align="center">
	
	     		<h2>Exemple calcul du nombre de pages à afficher</h2><br>
	

<table>

<td><a href="images/Borris Vallejo/1991/1991 The Furies.jpg" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/1991 The Furies.jpg" alt="Image" /></a></td>
<td><a href="images/Borris Vallejo/1991/1991 Unicorn.jpg" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/1991 Unicorn.jpg" alt="Image" /></a></td>
<td><a href="images/Borris Vallejo/1991/" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/" alt="Image" /></a></td>
<td><a href="images/Borris Vallejo/1991/" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/" alt="Image" /></a></td>
<tr>
<td><a href="images/Borris Vallejo/1991/" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/" alt="Image" /></a></td>
</tr>
<td><a href="images/Borris Vallejo/1991/" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/" alt="Image" /></a></td>
<td><a href="images/Borris Vallejo/1991/" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/1991/tb/" alt="Image" /></a></td>
<td colspan="3">&nbsp;</td>
</tr>
</table>

	

<p class="navigation">Page <a href="./exemple_calcul_nbr_pages4.php?page=0" title="page 1">1</a> | <a href="./exemple_calcul_nbr_pages4.php?page=1" title="page 2">2</a> | <a href="./exemple_calcul_nbr_pages4.php?page=2" title="page 3">3</a> | <strong>4</strong></p>


		</div><!-- #contenu -->
Pour ce qui est de passer en CSS je vais attendre un peu. Je voudrais déjà faire en sorte que ce script fonctionne correctement avant d'optimiser d'avantage. Chaque chose en son temps...

Micky

ViPHP
ViPHP | 3607 Messages

26 janv. 2011, 15:39

Alors la première chose qui me frappe, c'est que dans toutes les pages sauf la première:
Tu n'as pas de balise <tr> ouvrante en début de ligne...
ça veut dire que ton test est mauvais...

Tu peux essayer ceci pour voir:
for ($compteur = 0,$i = $debut; $i < $fin; $i++, $compteur++){ // On parcourt les images pour la page appelée.

    // Début d'une ligne du tableau
    if ($compteur%$nbcol==0){
....

ViPHP
AB
ViPHP | 5818 Messages

27 janv. 2011, 00:36

Bon ! J'ai repris le code du tuto est j'ai brodé le mien autour... bah ça ne change rien
oui parce que
... je me perds un peu avec mon index "$i" et la notion de compteur "$cpt" du tuto.
C'est exactement ce que je voulais dire dans mon précédent message et il y a encore des erreurs à ce niveau là.

Eléphanteau du PHP | 23 Messages

15 févr. 2011, 12:50

Bonjour,

Désolé d'avoir été si long à revenir sur ce post.

J'ai modifié mon script et franchement il y a du mieux. A savoir que les images se rangent parfaitement. Par contre, sur la dernière page, si jamais le nombre d'images qui restent n'est pas égal au nombre d'image par page, le script affiche les images restantes mais il essaye d'afficher également des images n'existant pas, histoire de faire un compte rond.

Voici ici ce que ça donne lorsque je définis 4 colonnes et 10 images par page pour un nombre total de 23 images à afficher :
http://zemickyunivers.free.fr/exemple_c ... pages4.php
Faites un tour sur la 3ème page et vous verrez le souci.

Voici mon code :

// 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=4;

// on compte le nombre de miniatures.
$nbpics = count($tableau);

// Nombre de photos qui seront affichées sur chaque page.
$nb_pics_par_page = 10;

// Paramètres de pagination
$url = "./exemple_calcul_nbr_pages4.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);

// 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;

//Calcul du nombre total de pages. On arrondit à l'entier supérieur (ceil().
$nb_pages = ceil($nbpics / $nb_pics_par_page);

// Si on a au moins une miniature dans le répertoire on l'affiche.
if ($nbpics != 0) {

// Initialisation d'un compteur d'éléments (ici nos images).
// $cpt = 0;

?>

<table>

<?php

for ($compteur = 0,$i = $debut; $i < $fin; $i++, $compteur++){ // On parcourt les images pour la page appelée.

    // Début d'une ligne du tableau
    if ($compteur%$nbcol==0) // On divise le nb d'élément par le nb de colonnes. Si le reste est de 0 ...
        echo '<tr>'; // ... alors on est sur le premier élément d'une ligne et on ouvre la ligne.

    	// On place chaque élément dans une cellule du tableau.
		// 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>';

    // Fin d'une ligne du tableau.
    if ($compteur%$nbcol==($nbcol-1)) // On divise le nb d'élément par le nb de colonnes. Si le reste est de ($nbCols-1) ...
        echo '</tr>'; // ... on est sur le dernier élément d'une ligne et on ferme la ligne.
        
//	$cpt++; // On incrémente le compteur pour savoir où on en est.

}
	// Au cas où ...
	if ($compteur!=0 && $compteur%$nbcol!=0) { // S'il n'y a pas eu assez de cellules dans la boucle pour finir la ligne ...
   		echo '<td colspan="'.($nbcol - ($compteur%$nbcol) ).'">&nbsp;</td>'; // ... on complète avec une cellule vide de la bonne taille...
    	echo '</tr>'; // ... et on ferme la ligne.
}

?>

</table>

Je n'arrive absolument pas à trouver la modification à apporter pour que le code n'afficher pas d'images inexistantes sur la dernière page s'il y a un reste.

Pouvez-vous m'apporter encore un peu d'aide s'il vous plait ?

Merci.

Micky

Mammouth du PHP | 672 Messages

15 févr. 2011, 13:36

J'ai survolé le code, il y a peut-être un truc qui m'a échappé, mais :
$fin = $debut+$nb_pics_par_page;
//...
for ($compteur = 0,$i = $debut; $i < $fin; $i++, $compteur++){ // On parcourt les images pour la page appelée.
Le problème vient d'ici, puisque tu vas boucler n fois (avec n = $fin - $debut = $nb_pics_par_page).
Une solution, ce serait de donner à $fin la valeur la plus petite entre $debut+$nb_pics_par_page OU $nbpics.
=>
$fin = min ($debut+$nb_pics_par_page, $nbpics);

Eléphanteau du PHP | 23 Messages

15 févr. 2011, 15:12

C'est tout simplement magnifique. Ça fonctionne à merveille. J'ai fait un petit tour sur le Web pour avoir plus d'infos sur cette fonction "min" qui est très simple à comprendre et très efficace dans mon cas. Merci beaucoup.

Puis-je abuser ? Aller oui, j'abuse.

Lorsque j'ai ouvert ce post je souhaitais donc afficher les images d'un album sur plusieurs pages, ce qui est à présent fait, mais je souhaitais également afficher sous ces images leurs noms respectifs, sans l'extension du fichier et sans avoir recours à une base de données.

Y'a-t-il moyen de me mettre sur la voie pour que je puisse réfléchir à la modification de mon code ?

Par avance merci.

Micky

ViPHP
ViPHP | 3607 Messages

15 févr. 2011, 15:15

Si tu ne veux absolument pas utiliser de bdd, de fichiers en plus etc...
La meilleure solution est de se tourner vers pathinfo() ( http://fr2.php.net/manual/en/function.pathinfo.php )
Attention tout de même il faudra lui donner un chemin de fichier et non une url...

ViPHP
xTG
ViPHP | 7331 Messages

15 févr. 2011, 15:17

Tes noms de fichier d'après ton code ne comporte que l'extension dans ce qui ne t'intéresse pas.
Tu peux donc voir du côté des fonctions telles que str_replace() afin de supprimer les extensions (.jpg, .png, .gif, ect) dans les chaînes de caractères lors de l'affichage.

Après c'est cela dit moins propre que ce que te propose jojolapine. ;)