par
bisca330 » 16 févr. 2011, 14:10
Bien ! Je vais essayer de le peaufiner petit à petit et je vais réfléchir à une éventuelle base de données.
Je remet ici le code définitif pour ceux qui passeraient dans le coin et que ça intéresserait :
<?php
//***************************************************************************************************************
// Ce script permet d'afficher dans une page web des images contenues dans un répertoire et de générer plusieurs
// pages en fonction de paramètres que l'utilisateur lui donnera.
// Il n'utilise pas de base de données.
// Il ne génère pas de miniatures à la volée. Il faudra donc créer les miniatures manuellement et les mettre dans
// un répertoire dédié aux miniatures (ici répertoire "tb").
// Les paramètres modifiables sont le nombre d'images par page et le nombre de colonnes par page.
// Expl : On a 30 images dans un répertoire. Si on définit 10 images par page et 5 colonnes par page le script
// créera trois pages (accessibles via une barre de navigation créée automatiquement) avec chacune 10 images
// réparties sur 5 colonnes. On aura donc par page deux lignes de 5 images.
//***************************************************************************************************************
//***************************************************************************************************************
// Vous pouvez modifier les paramètres suivants.
//***************************************************************************************************************
// Nombre de photos qui seront affichées sur chaque page.
$nb_pics_par_page = 8;
// Nombre de colonnes sur lesquelles vont s'afficher nos miniatures.
$nbcol=4;
// Remplacer "nom_de_ma_page.php" par le nom de la page qui contient ce sript.
$url = "./nom_de_ma_page.php?page=";
//***************************************************************************************************************
// A partir d'ici il est préférable de ne pas toucher au code sauf pour les chemins vers vos répertoires des
// miniatures et des images à taille réelle.
//***************************************************************************************************************
// On déclare deux tableaux qui contiendront pour le 1er le nom des fichiers afin d'afficher nos miniatures
// et pour le second le noms des fichiers sans les extensions (expl : sans .jpg, .gif ...).
$tableau01 = array();
$tableau02 = array();
// On ouvre notre dossier contenant les miniatures.
$dossier = opendir ('chemin/répertoire/miniature/');
while ($fichier = readdir ($dossier)) {
if ($fichier != '.' && $fichier != '..' && $fichier != 'index.php') {
// On stocke le nom des fichiers dans un tableau (tableau01) pour afficher ultérieurement les miniatures
// et dans un autre tableau (tableau02) pour afficher les noms des fichiers sans leurs extensions.
$tableau01[]=$fichier;
$info = pathinfo($fichier);
$file_name = basename($fichier,'.'.$info['extension']);
$tableau02[]=$file_name;
}
}
closedir ($dossier);
// on tri les tableaux par ordre alphabétique.
sort($tableau01);
sort($tableau02);
// on compte le nombre de miniatures.
$nbpics = count($tableau01);
// 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 = min ($debut+$nb_pics_par_page, $nbpics);
//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) {
?>
<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éments 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 et son nom sans l'extension munie d'un lien vers la
// photo en taille réelle
echo '<td>';
echo '<a href="chemin/répertoire/images/tailles/réelle/' , $tableau01[$i] , '" rel="lightbox[Royo]"><img src="chemin/répertoire/miniature/' , $tableau01[$i] , '" alt="Image" /><br />'.$tableau02[$i].'</a>';
echo '<br /><br />';
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.
}
// 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) ).'"> </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 "Page 1 | 2 | 3 etc..." en liens cliquables
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="pcenter"><?php echo($barre_nav); ?></p>
<?php
} // Fin condition si miniature dans le répertoire.
else echo 'Aucune image à afficher';// S'il n'y a aucune miniature on affiche un petit message.
?>
Merci beaucoup à ceux qui m'ont aidé et poussé à réfléchir pour l'amélioration de ce code.
Bonne continuation.
Micky
Bien ! Je vais essayer de le peaufiner petit à petit et je vais réfléchir à une éventuelle base de données. :wink:
Je remet ici le code définitif pour ceux qui passeraient dans le coin et que ça intéresserait :
[php]
<?php
//***************************************************************************************************************
// Ce script permet d'afficher dans une page web des images contenues dans un répertoire et de générer plusieurs
// pages en fonction de paramètres que l'utilisateur lui donnera.
// Il n'utilise pas de base de données.
// Il ne génère pas de miniatures à la volée. Il faudra donc créer les miniatures manuellement et les mettre dans
// un répertoire dédié aux miniatures (ici répertoire "tb").
// Les paramètres modifiables sont le nombre d'images par page et le nombre de colonnes par page.
// Expl : On a 30 images dans un répertoire. Si on définit 10 images par page et 5 colonnes par page le script
// créera trois pages (accessibles via une barre de navigation créée automatiquement) avec chacune 10 images
// réparties sur 5 colonnes. On aura donc par page deux lignes de 5 images.
//***************************************************************************************************************
//***************************************************************************************************************
// Vous pouvez modifier les paramètres suivants.
//***************************************************************************************************************
// Nombre de photos qui seront affichées sur chaque page.
$nb_pics_par_page = 8;
// Nombre de colonnes sur lesquelles vont s'afficher nos miniatures.
$nbcol=4;
// Remplacer "nom_de_ma_page.php" par le nom de la page qui contient ce sript.
$url = "./nom_de_ma_page.php?page=";
//***************************************************************************************************************
// A partir d'ici il est préférable de ne pas toucher au code sauf pour les chemins vers vos répertoires des
// miniatures et des images à taille réelle.
//***************************************************************************************************************
// On déclare deux tableaux qui contiendront pour le 1er le nom des fichiers afin d'afficher nos miniatures
// et pour le second le noms des fichiers sans les extensions (expl : sans .jpg, .gif ...).
$tableau01 = array();
$tableau02 = array();
// On ouvre notre dossier contenant les miniatures.
$dossier = opendir ('chemin/répertoire/miniature/');
while ($fichier = readdir ($dossier)) {
if ($fichier != '.' && $fichier != '..' && $fichier != 'index.php') {
// On stocke le nom des fichiers dans un tableau (tableau01) pour afficher ultérieurement les miniatures
// et dans un autre tableau (tableau02) pour afficher les noms des fichiers sans leurs extensions.
$tableau01[]=$fichier;
$info = pathinfo($fichier);
$file_name = basename($fichier,'.'.$info['extension']);
$tableau02[]=$file_name;
}
}
closedir ($dossier);
// on tri les tableaux par ordre alphabétique.
sort($tableau01);
sort($tableau02);
// on compte le nombre de miniatures.
$nbpics = count($tableau01);
// 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 = min ($debut+$nb_pics_par_page, $nbpics);
//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) {
?>
<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éments 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 et son nom sans l'extension munie d'un lien vers la
// photo en taille réelle
echo '<td>';
echo '<a href="chemin/répertoire/images/tailles/réelle/' , $tableau01[$i] , '" rel="lightbox[Royo]"><img src="chemin/répertoire/miniature/' , $tableau01[$i] , '" alt="Image" /><br />'.$tableau02[$i].'</a>';
echo '<br /><br />';
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.
}
// 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) ).'"> </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 "Page 1 | 2 | 3 etc..." en liens cliquables
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="pcenter"><?php echo($barre_nav); ?></p>
<?php
} // Fin condition si miniature dans le répertoire.
else echo 'Aucune image à afficher';// S'il n'y a aucune miniature on affiche un petit message.
?>
[/php]
Merci beaucoup à ceux qui m'ont aidé et poussé à réfléchir pour l'amélioration de ce code.
Bonne continuation.
Micky