Page 1 sur 3

Amélioration script galerie photo

Posté : 12 janv. 2011, 14:56
par Invité
Bonjour à tous,

Je vous sollicite afin d'améliorer un script de galerie photos. Pour commencer voici à quoi ressemble la galerie sur mon site (ATTENTION : Site pour le moment uniquement compatible Firefox, mes CCS n'étant pas encore modifiés pour IE) : http://zemickyunivers.free.fr/dessins_royo_dreams.php

Ce script fait appel à un répertoire sur mon serveur dans lequel se trouvent toutes les images (ici /images/Luis Royo/Dreams/) et affiche les miniatures du sous-répertoire "tb". Il ne génère pas les miniatures à la volée mais cela ne me dérange pas.

Ce que je souhaiterai ajouter à ce script c'est l'affichage des noms des images sous ces dernières (même si les noms comportent des espaces et des accents) et également qu'au delà de 20 images (ou tout autres nombre d'images) ou puisse passer à une page suivante. Par exemple si on a 100 images que l'on puisse faire 10 pages de 10 images ou 5 pages de 20 images ou 4 pages de 25 images, etc...

Voilà à quoi ressemble actuellement le script :
<?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/Luis Royo/Dreams/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);

// si on a au moins une miniature, on les affiche toutes
if ($nbpics != 0) {
	echo '<table>';
	for ($i=0; $i<$nbpics; $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><a href="images/Luis Royo/Dreams/' , $tableau[$i] , '" rel="lightbox[dreams]"><img src="images/Luis Royo/Dreams/tb/' , $tableau[$i] , '" alt="Image" /></a></td>';
		if($i%$nbcol==($nbcol-1)) echo '</tr>';
	}
	echo '</table>';
}
// si on a aucune miniature, on affiche un petit message :)
else echo 'Aucune image à afficher';
?>
Ne m'y connaissant pas vraiment en Php pouvez vous me donner les lignes de code qui vous sembleraient justes pour améliorer ce script avec ce que je vous est mentionné plus haut.

Par avance merci.

Micky

Re: Amélioration script galerie photo

Posté : 12 janv. 2011, 16:53
par jojolapine
Pour ajouter du texte en dessous de la photo, de mémoire il suffit d'ajouter un attribut title="" à ton lien <a>...
Ensuite pour la pagination celà se fera côté serveur...
Voici un très bon tutoriel à suivre: faq-tutoriels/afficher-des-elements-pag ... t8874.html

Re: Amélioration script galerie photo

Posté : 13 janv. 2011, 10:41
par Invité
Bonjour,

Merci beaucoup pour ta réponse mais en ce qui concerne le tutoriel cela ne correspond pas à ce que je recherche. Ce tuto fonctionne avec une base SQL. De mon côté je n'ai qu'un simple script Php et je souhaite que cela reste tel quel. Il faudrait que le script compte le nombre d'images qu'il a à afficher et qu'il calcul le nombre de pages qu'il a à générer par rapport à une variable "nombre_images_par_page" qu'on lui donnera. Mais je ne sais pas faire ça.

Pour ce qui est du nom des photos à afficher si on utilise l'attribut Title="" il faut d'abord que le script analyse le nom de la photo avant, non ?! "Title" c'est juste pour l'affichage, mais comment est-ce que le script sait ce qu'il doit afficher si on ne lui fait pas calculer avant ? Et encore une fois ça je ne sais pas faire.

Mais quoi qu'il en soit encore merci pour ton intervention.

N'hésitez pas, j'attends vos idées.

Micky

Re: Amélioration script galerie photo

Posté : 13 janv. 2011, 10:45
par jojolapine
Tu as essayé au moins?
De remplir l'attribut title?
Le script est prévu pour s'en servir à priori...

Quand au tutoriel, j'ai envie de dire que si il convient parfaitement...
C'est à toi d'adapter les requêtes SQL à la lecture de fichiers/dossiers...
Tu n'auras pas du tout cuit tout le temps!

Commence quelque chose et si tu bloques, on viendra t'aider!

un autre piste, tu peux paginer côté client : http://plugins.jquery.com/project/pagination

Re: Amélioration script galerie photo

Posté : 14 janv. 2011, 15:10
par Invité
Bonjour,

J'ai passé un peu de temps sur le tutoriel pour essayer de le comprendre et j'ai commencé à l'adapter à mon script. La partie du script adapté du tutoriel commence à la ligne 46. Voilà ce que j'ai fait :
<?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/2001/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);

// si on a au moins une miniature, on les affiche toutes
if ($nbpics != 0) {
	echo '<table>';
	for ($i=0; $i<$nbpics; $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><a href="images/Borris Vallejo/2001/' , $tableau[$i] , '" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/2001/tb/' , $tableau[$i] , '" alt="Image" /></a></td>';
		if($i%$nbcol==($nbcol-1)) echo '</tr>';
	}
	echo '</table>';
}
// si on a aucune miniature, on affiche un petit message :)
else echo 'Aucune image à afficher';


/* Paramètres de pagination */

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

$url = "./pageparpage.php?page=";



/* On détermine quelle est la page qui est actuellement affichée */

$page_en_cours    = isset($_GET&#91;'page'&#93;) ? $_GET&#91;'page'&#93; : 0;

$page_affichee    = ($page_en_cours + 1);


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

}

?>
Pour résumer j'ai enlevé tout ce qui concerne SQL et les connexions à la base. La partie du calcul du nombre de nouvelles a été supprimée puisque dans mon cas le nombre de photos à afficher a déjà était compté et se trouve sous la variable $nbpics.

Il y a cependant des lignes que je ne comprends pas et justement une de ces lignes créée une erreur à l'exécution du script. C'est sur la ligne 56 : $page_en_cours = isset($_GET&#91;'page'&#93;) ? $_GET&#91;'page'&#93; : 0;

Ça renvoie l'erreur suivante : Parse error: syntax error, unexpected '&', expecting ',' or ')' in F:\xampplite\htdocs\Perso\exemple_calcul_nbr_pages 2.php on line 56

J'ai essayé de comprendre la fonction ISSET mais je sèche complètement. Pourrais-tu m'aiguiller s'il te plait et m'expliquer cette ligne ?

Merci

Micky

Re: Amélioration script galerie photo

Posté : 14 janv. 2011, 15:14
par jojolapine
Il suffit d'essayer de comprendre le script...
La ligne 56 en l’occurrence est mal encodée par le forum...
Du coup forcément php ne va pas aimer...
Donc essaye de reconstruire cette ligne correctement ;)
C'est pas très compliqué!

Re: Amélioration script galerie photo

Posté : 14 janv. 2011, 16:05
par AB
Ce serait aussi plus simple si tu utilisais une bdd pour le commentaire sous tes images.
Si te te sert du nom des fichiers avec des noms contenant des espaces et ou des caractères accentués, tu vas à l'encontre de pas mal de pb pour avoir accès aux fichiers.

Re: Amélioration script galerie photo

Posté : 14 janv. 2011, 17:31
par bisca330
Jojolapine --> Je vais essayer de corriger le script et je repasse par le forum si jamais ça va pas.

AB --> Mon but n'est pas de mettre des commentaires sur mes photos mais simplement de mettre sous chacune d'elles le nom qu'elles portent. Et vu que certaines photos que je prends sont issues de paysages où lieux français je souhaite garder les accents dans les noms.

Je vais continuer mes recherches.

Merci à vous deux.

Micky

Re: Amélioration script galerie photo

Posté : 14 janv. 2011, 17:52
par AB
La fait que tu souhaites garder les accents dans les noms de fichiers est une chose. Le fait que cela ne posera pas de problèmes en est une autre.
Même pour afficher de simple titres une bdd est intéréressante. Et puis cela ouvre des perspectives : affichage des photos selon un ordre précis, statistiques sur les photos visitées etc.
Enfin bon à toi de voir, mais pour gérer une galerie d'image, ce petit investissement temps supplémentaire s'avère souvent vite très rentable :wink:

Re: Amélioration script galerie photo

Posté : 16 janv. 2011, 00:25
par bisca330
Voilà, je reviens faire le point.

AB --> Je vais déjà essayer de corriger les erreurs de ce script avant de commencer à travailler avec une base de données :wink: Merci pour les conseils en tout cas, j'en ai pris note.

Jojolapine -->Voilà ce que j'ai fait de la ligne 56 du code :

Avant :
$page_en_cours    = isset($_GET&#91;'page'&#93;) ? $_GET&#91;'page'&#93; : 0;
Après :
$page_en_cours    = isset($_GET['page']) && $_GET['page'] : 0;
J'ai compris que "ET commercial #91" et "ET commercial #93" sont les codes pour les crochets ouvrant et fermant.
Je suppose que le point d'interrogation c'est un double ET commercial "&&" qui doit représenter un ET.
Mais en fin de ligne, les deux points avant le zéro je ne sais pas. J'ai essayer des ==, >=, <=, < ou encore > mais rien n'y fait.
La barre de navigation s'affiche,mais dès que je clique sur un numéro de page c'est un lien non valide. De plus, toutes les images de ma galerie s'affichent alors que je ne devrais en avoir que deux par page.

Je ne comprends pas à quoi sert cette ligne. Une petite explication serait la bienvenue.

Micky

Re: Amélioration script galerie photo

Posté : 17 janv. 2011, 11:18
par jojolapine
Bonjour,
C'est bien d'avoir essayé de corrigé tout seul, tu y es presque!
En fait le point d'interrogation est un .... point d'interrogation :)
Cette syntaxe s'appelle l'opérateur ternaire ( http://php.net/manual/fr/language.opera ... on.ternary )
je te laisse voir ce qu'en dit le manuel ;)

Une fois que tu auras corrigé ça... revois ce qui ne fonctionne pas et reviens ici si besoin ;)

Re: Amélioration script galerie photo

Posté : 17 janv. 2011, 13:07
par Invité
Bonjour,

Merci beaucoup, j'ai compris le principe de l'opérateur ternaire. Je pense que le code pour la création et l'affichage de la barre de navigation est OK.

Par contre si toutes mes images s'affichent même si j'ai définis dans le script qu'elles doivent apparaitre sur plusieurs pages vient du fait que dans la première partie de mon code, au niveau de l'affichage des images, je faisais le calcul avec la variable $nbrpics et non $nb_pics_par_page. J'ai donc rectifié le tire et aussi j'ai déclaré la variable "$nb_pics_par_page =3" avant la boucle pour l'affichage des images. Ce qui donne comme nouveau code ce qui suit (les modifications sont en gras) :
<?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/2001/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);

[b]$nb_pics_par_page = 3;[/b]             /* Nombre de photos qui seront affichées sur chaque page */

// si on a au moins une miniature, on les affiche toutes
if ([b]$nb_pics_par_page[/b] != 0) {
	echo '<table>';
	for ($i=0; $i<[b]$nb_pics_par_page;[/b] $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><a href="images/Borris Vallejo/2001/' , $tableau[$i] , '" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/2001/tb/' , $tableau[$i] , '" alt="Image" /></a></td>';
		if($i%$nbcol==($nbcol-1)) echo '</tr>';
	}
	echo '</table>';
}
// si on a aucune miniature, on affiche un petit message :)
else echo 'Aucune image à afficher';


/* Paramètres de pagination */

$url = "./pageparpage.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 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

}

?>
Donc si je définis 3 images par page et que j'ai 6 images en tout j'ai bien une barre de navigation avec deux pages et une première page que s'affiche avec les trois première images de mon répertoire.

Cependant, dès que je clique sur le lien de la deuxième page j'ai un lien invalide.

Aussi, je ne comprends pas cette ligne :
$url = "./pageparpage.php?page=";
Qu'est-ce que veut dire "pageparpage.php ?

En tout cas on avance...

Micky

Re: Amélioration script galerie photo

Posté : 17 janv. 2011, 13:21
par jojolapine
Bonjour,

Bon je vois qu'il y a du travail de fait ;)
C'est agréable de voir passer des débutants qui n'ont pas peur de faire l'effort d'apprendre et de comprendre ;)

Pour ton soucis, il est tout simple, la partie
$url = "./pageparpage.php?page=";
doit être changée pour le nom de ton fichier correct, pour toi ici si je me base sur ta page d'exemple donnée en tout début de sujet ça donnerait:
$url = "./dessins_royo_dreams.php?page=";

Re: Amélioration script galerie photo

Posté : 17 janv. 2011, 15:18
par bisca330
En effet, c'est mieux... sauf que lorsque je clique sur la page 2, j'ai toujours les trois même premières images de mon répertoire qui s'affichent.

Je pense que le script tel qu'il est fonctionne comme ça : Dès que l'on clique sur un lien de page il se réexécute et de ce fait il va toujours chercher les trois premières images qui ont été stockées dans un tableau grâce à cette ligne "$nbpics = count($tableau);".

Comment faire en sorte que le script comprenne que la page 2 doit afficher les trois images suivantes ? Comment lui dire qu'il aille chercher les trois images suivantes stockées dans le tableau ? Je pense que la partie du script à modifier est l'affichage des images mais je n'ai vraiment aucune idée de comment faire cela.

On avance mais je suis quand même bien laborieux :wink:

Micky

Re: Amélioration script galerie photo

Posté : 17 janv. 2011, 15:57
par AB
Ce n'est peut-être pas ton problème immédiat mais
if ($nb_pics_par_page != 0) {
echo '<table>';
for ($i=0; $i<$nb_pics_par_page; $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><a href="images/Borris Vallejo/2001/' , $tableau[$i] , '" rel="lightbox[Vallejo]"><img src="images/Borris Vallejo/2001/tb/' , $tableau[$i] , '" alt="Image" /></a></td>';
if($i%$nbcol==($nbcol-1)) echo '</tr>';
}
echo '</table>';
}
dans le code ci-dessus, à mon avis il manque une ligne dans la construction de ton tableau, cf ce tuto et cette ligne :
// Au cas où ...
if ($cpt!=0 && $cpt%$nbCols!=0) { // S'il n'y a pas eu assez de cellules dans la boucle pour finir la ligne ...
    echo '<td colspan="'.($nbCols - ($cpt%$nbCols) ).'">&nbsp;</td>'; // ... on complète avec une cellule vide de la bonne taille...
    echo '</tr>'; // ... et on ferme la ligne