Pagination sans BDD

Répondre
Nathan11
le 07/01/2010 à 11:46
Nathan11
Bonjour
J'ai un script php d'album photo très simple et je voulais savoir si d'après mon code (ci-dessous) on peut y intégré un système de pagination ?
En fait j'ai cherché des sources mais je n'ai rien trouvé.
<?php
/***************************************************************************
* Fichier : /pages/Galerie.php
* Date de création : avant le 13/08/2007
* Dernière modification : 15/10/2007
***************************************************************************/

// Sécurité
if ( !defined ( 'TAGADASH' ) )
{
header ( 'Location: ../' );
die ( -1 );
}
///

///
$page_texte .= '<p align="center" style="color:#C00;"><b>Pour voir les photos cliquez simplement dessus !</b></p>';
$page_texte .= '<fieldset><legend>Image de la galerie</legend><br /><br /><p align="center">';
$adresse = "Galerie/";
$dossier = opendir($adresse);
while ($Fichier = readdir($dossier))
{
if ($Fichier != "." && $Fichier != "..")
{
$nomFichier = $adresse."/".$Fichier;
$i++;
// Nom de l'image.
$source= $nomFichier;
// Taille à ne pas dépasser
$taillemax=100;
// On récupère les dimension initiales de l'image.
$img = getimagesize($source);
$x=$img[0];
$y=$img[1];
// Le script.
if ($x > $y)
{
$y=$y*(($taillemax)/$x);
$x=$taillemax;
}
if ($y > $x)
{
$x=$x*(($taillemax)/$y);
$y=$taillemax;
}
if ($y == $x)
{
$x=$taillemax;
$y=$taillemax;
}
// On peut afficher l'image.
$page_texte .="<a href=\"$source\" rel=\"zoombox[galerie]\"><img src=\"$source\" width=\"$x\" height=\"$y\" /></a>&nbsp;&nbsp;";
if($i == 7){
$i = 0;
$page_texte .="<br/><br />";
}
}
}
$page_texte .='</p></fieldset>';
closedir($dossier); //Fermeture du dossier.
?>


Si quelqu'un peu m'aider en sachant que je suis extrèmement loing d'être fort en php !
Merci beaucoup
Nathan
LupusMic
le 08/01/2010 à 14:03
LupusMic
On peut toujours faire de la pagination. Le principe est que tu n'affiche qu'une portion de résultats.

Il faut un paramètre HTTP GEt pour le numéro de page, et décider du nombre de résultats par pages (qui peut aussi être un paramètre HTTP GET).

Ensuite c'est de la mise en œuvre. Essaye déjà d'afficher une page de résultats en fonction du numéro de page et du nombre d'items à afficher.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Nathan11
le 08/01/2010 à 15:48
Nathan11
Merci pour la réponse !

Finalement je suis parti du script présent dans "les comment faire ?".
Du coup le code d'affichage des photos n'est plus du tout le meme mais je n'arrive toujours pas a intégré le système de pagination !
<?php 
// Sécurité
if ( !defined ( 'TAGADASH' ) )
{
header ( 'Location: ../' );
die ( -1 );
}


// Droits d'administration
if ( $droit['administration'] == 0 )
{
$page_msg = 2;
include_once ( 'systeme/msg.' . EXT );
}


// on défini le répertoire où sont stockées les images de grande taille
$dir = './TOF/pics';
// on défini le répertoire où seront stockées les miniatures
$dir_mini = './TOF/mini';
// on défini une variable $ratio qui vaudra 150 dans notre cas (150 pixels). En fait, pour nos miniatures, nous allons respecter le ratio de l'image originale, mais nous allons forcer sa taille à 150 pixels, soit en hauteur soit en largeur (tout dépend de l'orientation de notre image : paysage ou portrait).
$ratio = 100;

// on teste si le formulaire permettant d'uploader un fichier a été soumis
if (!empty($_POST['go'])) {
// on teste si le champ permettant de soumettre un fichier est vide ou non
if (empty($_FILES['mon_image']['tmp_name'])) {
// si oui, on affiche un petit message d'erreur
$erreur = 'Aucun fichier envoyé.';
}
else {
// on examine le fichier uploadé en récupérant de nombreuses informations sur ce fichier (je vous suggère de regarder la documentation de la fonction getimagesize pour de plus amples informations)
$tableau = @getimagesize($_FILES['mon_image']['tmp_name']);
if ($tableau == FALSE) {
// si le fichier uploadé n'est pas une image, on efface le fichier uploadé et on affiche un petit message d'erreur
unlink($_FILES['mon_image']['tmp_name']);
$erreur = 'Votre fichier n\'est pas une image.';
}
else {
// on teste le type de notre image : jpeg ou png
if ($tableau[2] == 2 || $tableau[2] == 3) {
// si on a déjà un fichier qui porte le même nom que le fichier que l'on tente d'uploader, on modifie le nom du fichier que l'on upload
if (is_file('./TOF/pics/'.$_FILES['mon_image']['name'])){
$file_upload = time()."_".$_FILES['mon_image']['name'];
}
else {
$file_upload = $_FILES['mon_image']['name'];
}
// on copie le fichier que l'on vient d'uploader dans le répertoire des images de grande taille
copy ($_FILES['mon_image']['tmp_name'], $dir.'/'.$file_upload);

// il nous reste maintenant à générer la miniature

// si notre image est de type jpeg
if ($tableau[2] == 2) {
// on crée une image à partir de notre grande image à l'aide de la librairie GD
$src = imagecreatefromjpeg($dir.'/'.$file_upload);
// on teste si notre image est de type paysage ou portrait
if ($tableau[0] > $tableau[1]) {
$im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio);
imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]);
}
else {
$im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1]));
imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]);
}
// on copie notre fichier généré dans le répertoire des miniatures
imagejpeg ($im, $dir_mini.'/'.$file_upload);
}
elseif ($tableau[2] == 3) {
$src = imagecreatefrompng($dir.'/'.$file_upload);
if ($tableau[0] > $tableau[1]) {
$im = imagecreatetruecolor(round(($ratio/$tableau[1])*$tableau[0]), $ratio);
imagecopyresampled($im, $src, 0, 0, 0, 0, round(($ratio/$tableau[1])*$tableau[0]), $ratio, $tableau[0], $tableau[1]);
}
else {
$im = imagecreatetruecolor($ratio, round(($ratio/$tableau[0])*$tableau[1]));
imagecopyresampled($im, $src, 0, 0, 0, 0, $ratio, round($tableau[1]*($ratio/$tableau[0])), $tableau[0], $tableau[1]);
}
imagepng ($im, $dir_mini.'/'.$file_upload);
}
// on redirige l'administrateur vers l'accueil de la partie admin
header('location: index.php?page=TOF_Admin');
exit();
}
else {
// si notre image n'est pas de type jpeg ou png, on supprime le fichier uploadé et on affiche un petit message d'erreur
unlink($_FILES['mon_image']['tmp_name']);
$erreur = 'Votre image est d\'un format non supporté.';
}
}
}
}

// on teste si le formulaire permettant de supprimer un fichier à été soumis
if (isset($_GET['del'])) {
if (empty($_GET['del'])) {
// si le paramètre n'est pas renseignée, on affiche un petit message d'erreur
$erreur = 'Aucune image à supprimer';
}
else {
$pic_a_zapper = $_GET['del'];
// si l'image existe ainsi que sa miniature, on les supprime
if (is_file('./TOF/mini/'.$pic_a_zapper) && is_file('./TOF/pics/'.$pic_a_zapper)) {
unlink('./TOF/mini/'.$pic_a_zapper);
unlink('./TOF/pics/'.$pic_a_zapper);
}
// si l'image ou la miniature n'existe pas, on affiche un message d'erreur
else {
$erreur = 'Image non reconnue';
}
}
}
$page_texte .='<fieldset><legend>Ajouter une photo à la galerie :</legend><br />';

$page_texte .='<form action="index.php?page=TOF_Admin" method="post" enctype="multipart/form-data">
<input type="file" name="mon_image" /> <input type="submit" name="go" value="Envoyer" />
</form></fieldset>';

$page_texte .='<p align="center" style="color:#F00; font-weight:bold;">Supprimer une photo de la galerie (cliquer sur la miniature pour supprimer la photo)</p>';
// l'étude de cette portion de code a déjà été faite plus haut
$tableau = array();
$dossier = opendir ('./TOF/mini/');
while ($fichier = readdir ($dossier)) {
if ($fichier != '.' && $fichier != '..' && $fichier != 'index.php') {
$tableau[] = $fichier;
}
}
closedir ($dossier);

$nbcol=8;
$nbpics = count($tableau);

if ($nbpics != 0) {
$page_texte .= '<fieldset><legend>Image de la galerie</legend><br /><br /><p>';
for ($i=0; $i<$nbpics; $i++){
if($i%$nbcol==0)
$page_texte .='<div align="center">';
// on affiche un lien sur la photo permettant de la supprimer
$page_texte .= '<a href="index.php?page=TOF_Admin&amp;del=' . $tableau[$i] . '"><img src="./TOF/mini/' . $tableau[$i] . '" alt="Image" /></a>&nbsp;&nbsp;';
if($i%$nbcol==($nbcol-1))
$page_texte .= '</div>';
}
$page_texte .='</p></fieldset>';
}
else $page_texte .= 'Aucune image à afficher';

// si un message d'erreur est défini, on l'affiche
if (isset($erreur)) $page_texte .= '<br />' . $erreur;
?>

Merci
Nathan
LupusMic
le 09/01/2010 à 19:24
LupusMic
Bon, le problème est noyé au milieu du code. Tu devrais essayer d'un peu plus séparer les chose, en utilisant des fonctions.

Avec le code suivant, tu parcours tout les objets. Tu n'utilises pas la pagination.
<?php
for ($i=0; $i<$nbpics; $i++){


Il faudrait que tu ais quelque chose dans ce goût là :
<?php
$current_page = empty($_GET['page']) ? 0 : (int) $_GET['page'] ;
define('IMAGE_PER_PAGE', 10) ;
for ($i=$page*IMAGE_PER_PAGE; $i<($page+1) * IMAGE_PER_PAGE; $i++){


Mais c'est la méthode basique.
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours