Base de données pour gallerie + pagination

Eléphanteau du PHP | 23 Messages

10 mars 2011, 10:19

Bonjour,

Je réalise en ce moment un site perso (graphiste de formation), mais je reste confronté à un obstacle qui me parait vraiment insurmontable : créer une galerie en php, avec base de données et pagination.
J'utilise pour l'instant une pagination en javascript, mais le résultat ne me semble pas convaincant ni commode pour une utilisation régulière, des MAJ fréquentes etc

vous pouvez voir ici une capture d'écran du site en cours de réalisation

http://img203.imageshack.us/i/galleriep ... ation.png/

chacune de mes réalisations aurait leur propre gallerie, avec une image grand format, un texte et (dans l'idéal) une présentation dynamique des images (slider en js avec effet de transition...boutons précédent et suivant)

Je cherche donc un bon tutorial expliquant clairement la création d'une base de données qui me permettrait d'afficher ces images...je suis sur mac et j'utilise Mamp

Enfin, si je veux une présentation aussi complexe, c'est avant tout pour alléger mon site, qu'une pagination en php crée x pages, je crois que ce site deviendrait vite trop lourd à charger sans php...

j'ai cherché une pagination en php sans bases de données, mais tous les scripts que j'ai pu trouver nécessitaient une bdd

bref, si quelqu'un parmi vous pouvait me conseiller, m'assister dans la création de cette base de données

je vous remercie par avance pour vos conseils

cdlt

Eléphant du PHP | 241 Messages

10 mars 2011, 14:51

Salut,
Je n'ai pas de tutoriel qui explique cela, mais j'ai réalisé une chose très semblable (voir identique :D)
Au finale ce n'est pas très compliqué à mettre en place (enfin...quand on connait le sujet ^^).

Le site internet se constitue de plusieurs pages, chaque page contient plusieurs images et il y a une pagination automatique.
En gros, ma bdd contient plusieurs tables, à chaque table correspond une page et contient les champs suivants :
id | tri | nom_img | descr_fr

Ensuite sur la page voulu je vais récupérer les informations de la table correspondant.

Pour la pagination, il suffit simplement de compter le nombre d'enregistrements, ensuite tout dépend du nombre d'images que l'on veut par page.

Si tu pense que cela peut t'aider, je me ferai un plaisir d'expliquer le tout bien plus en détail.

ViPHP
ViPHP | 3607 Messages

10 mars 2011, 15:29

Bonjour,

Voici un tutoriel sur la pagination : faq-tutoriels/afficher-des-elements-pag ... t8874.html
Pour le slider Js, tu peux regarder du côté de fancybox ( http://fancybox.net/ )

Bon courage ;)

Invité
Invité n'ayant pas de compte PHPfrance

10 mars 2011, 18:13

jojolapine : je n'ai pas vraiment besoin d'aide pour mettre en place une pagination en php, mais plutot pour créer une base de données qui me permettrait d'afficher mes galeries...merci tout de même pour ta réponse

misterflo, peut-on voir ce site en ligne ? je ne connais rien en php, mes compétences se limitent au html, css...(je suis avant tout graphiste, et encore...lol)

j'ai pu voir un script de pagination en php, j'ai compris que le code se connectait à une base de données pour créer la pagination, tout ce qu'il me faut, c'est une bdd (image + description + miniature ou galerie dynamique en js)

j'en demande un peu trop, peut-être

désolé

Eléphanteau du PHP | 23 Messages

10 mars 2011, 18:24

misterflo, je ne comprends pas bien comment fonctionne ton site, pourquoi créer plusieurs pages si la pagination les génère automatiquement ?

pour ma part, je ne conçois pas mon site de cette façon, il n'y aurait qu'une page index.php, une div "contenu" qui contiendrait l'ensemble de mes réalisations,
hébergées dans une bdd que "pagination.php" répartirait en x pages, générant x pages

voila quoi...

Eléphant du PHP | 241 Messages

10 mars 2011, 18:38

C'est un site pour un infographiste aussi ^^,
Par exemple une page présente ses dessins, une autre des vidéos, une autre ses travaux 3d etc.

Prenons l'exemple de la page dessins :
Plutôt que d'afficher tous les dessins sur la page qui comme tu le fais remarquer alourdirait énormément la navigation, j'affiche seulement les 5 premiers avec leur descriptions et les miniatures de chaque image, puis la pagination me permet d'afficher les 5 suivant etc.

J'espère que mon explication est plus claire :?

Eléphanteau du PHP | 23 Messages

10 mars 2011, 18:43

oui, merci

je n'ai pas envie de classifier, contrairement à toi, c'est la seule différence en fait, je peux voir ton site ?

Eléphant du PHP | 241 Messages

10 mars 2011, 21:46

Oui oui, rien ne t'oblige à classifier ou quoi que ce soit d'autre ^^

l'url du site en question : http://www.aes-3d.fr

Eléphanteau du PHP | 23 Messages

11 mars 2011, 10:20

j'ai consulté le site, je ne dirais rien sur le graphisme ce n'est pas l'endroit...
pour le reste, les photos s'affichant sur plusieurs pages, c'est bien ce que je recherche
le texte qui apparait au roll over est aussi dans une base de données ?
le mien apparaitrait sous l'image (comme dans la capture d'écran)
cette image ne serait pas cliquable, mais des miniatures pourraient s'afficher à la suite du texte
sinon, pour la pagination, je suppose qu'on peut activer ou désactiver la numérotation des pages
ici, ce sont des flêches gauche/droite....ok

Eléphanteau du PHP | 23 Messages

11 mars 2011, 11:43

voila très précisément ce que j'aimerai obtenir :


http://www.alsacreations.com/xmedia/tut ... ie-jquery/


il ne manque ici qu'un titre et un texte décscriptif

et ce type de gallerie, multiplié par 10 sur une page...le reste s'affichant sur les pages suivantes

mouais...

Eléphanteau du PHP | 23 Messages

11 mars 2011, 11:50

pour faire simple :


----- titre galerie 01 ------------------
_____________________


image 700x450px


_____________________
vignettes
____ ____ ____ ____
____ ____ ____ ____
____ ____ ____ ____
____ ____ ____ ____
----------- texte-----------
blah blah blah blah et blah
blah et blahblah et blah.

-----------------------------------------------

----- titre galerie 02 ------------------
_____________________


image 700x450px


_____________________
vignettes
____ ____ ____ ____
____ ____ ____ ____
____ ____ ____ ____
____ ____ ____ ____
----------- texte-----------
blah blah blah blah et blah
blah et blahblah et blah.

-----------------------------------------------
----- titre galerie 03 ------------------
_____________________


image 700x450px


_____________________
vignettes
____ ____ ____ ____
____ ____ ____ ____
____ ____ ____ ____
____ ____ ____ ____
----------- texte-----------
blah blah blah blah et blah
blah et blahblah et blah.

-----------------------------------------------

x 10

-----pagination-----
début < 1 2 3 4 5 > fin
----------------------

Eléphant du PHP | 241 Messages

11 mars 2011, 13:46

Salut,
Pour le texte qui s'affiche au survole d'une image, oui il est dans une bdd.

Pour ce qui est de ce que tu veux faire, je pense qu'une seule table suffirait avec les champs suivant :
id | titre_galerie | img_principale | vignettes | commentaire

Eléphanteau du PHP | 23 Messages

11 mars 2011, 13:52

ok...et tu...tu pourrais me créer cette table et m'expliquer comment l'ajouter au code ?

Eléphant du PHP | 241 Messages

11 mars 2011, 13:56

Oui sans problème. J'éditerai mon message dans l'après-midi pour tout expliquer (là tout de suite j'ai pas trop le temps ^^)

EDIT :
Chose promise Chose due :mrgreen:

Je n'ai pas la prétention de dire que cette méthode est la meilleure, si quelqu'un trouve des améliorations à apporter au code je serais heureux ( oui oui vraiment !) d'en être informé !

Maintenant place aux explications !

Tout d'abord la table MySQL
CREATE TABLE IF NOT EXISTS `galerie` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `titre_galerie` varchar(300) NOT NULL,
  `img_principale` varchar(300) NOT NULL,
  `vignettes` text NOT NULL,
  `commentaire` text NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `titre_galerie` (`titre_galerie`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ;
J'ai donc créé une table avec les champs : id (clé primaire), titre_galerie(clé unique pour éviter des galeries avec les mêmes noms), img_principale (qui correspond à l'image grand format de la galerie), vignettes (qui contient toutes les vignettes de cette galerie), commentaire (le texte de description de la galerie).

Le champ img_principale prend simplement le nom avec l'extension de l'image voulue, par exemple -> image_exemple.jpg

Le champ vignettes prend lui aussi que les noms des vignettes, ils sont séparés par des barres ( | ), rien n'empêche de mettre autre chose comme des ";" , "/" etc. (il faudra juste le changer à un autre moment dans le traitement php).
exemple :

Code : Tout sélectionner

image1.jpg|image2.jpg|image3.jpg|image4.jpg|image5.jpg
Voilà du côté de SQL, maintenant du côté de PHP

On commence par mettre en place le nombre de galeries que l'on veut par page
/* mise en place du nombre d'affichage de galeries par page */
$nb_affiche = 5; //Nombre de galeries que l'on veut par page

//On va afficher la/les galeries selon la page où l'on ce trouve	
if (isset($_GET['page']) && is_numeric($_GET['page']) && $_GET['page']>0)
{
	//$start nous sert pour savoir où commence l'affichage des galeries selon la page où l'on est
	$start = $_GET['page'] * $nb_affiche - $nb_affiche;
	
	//On récupère la page sur laquelle on est, nécessaire lors de la pagination
	$page = $_GET['page']
}
else
{
	$start = 0;
	$page = 1;
}
/* ========================================================= */
Ensuite on va mettre en place la requête SQL qui ira chercher les informations à afficher dans la page
<?php
//On prepare la requete SQL
$req = $bdd->prepare("SELECT * FROM galerie ORDER BY id LIMIT :start,:nb_affiche");
$req->bindValue(':start',$start,PDO::PARAM_INT);
$req->bindValue(':nb_affiche',$nb_affiche,PDO::PARAM_INT);
$req->execute();
while ($donnees = $req->fetch())
{
?>
	<div class="galerie">

		<h1><?php echo $donnees['titre_galerie']; ?></h1>

		<img src="galerie/<?php echo $donnees['img_principale']; ?>" alt="" />

		<div class="vignettes">
<?php
			/*On affiche toutes les vignettes pour cette galerie
			On crée un tableau des vignettes grâce au séparateur barre | */
			$tableau_vignettes = explode("|",trim($donnees['vignettes']));
			for ($i = 0; $i < count($tableau_vignettes); $i++)
			{
			//On affiche chaque vignette dans une balise img
?>
			<img src="galerie/<?php echo $tableau_vignettes[$i]; ?>" alt="" />
<?php
			}
?>
		</div>

		<p>

			<?php echo $donnees['commentaire']; ?>
			
		</p>
		
	</div>
<?php
}
$req->closeCursor();
?>

Pour terminer on met en place la pagination
<?php
//On met en place la pagination
$req = $bdd->prepare("SELECT COUNT(*) AS nb_galerie FROM galerie");

$req->execute();

$nb_galerie = $req->fetch();

$nb_galerie = $nb_galerie['nb_galerie']; //On associe le nombre de galeries

$nb_pages = ceil($nb_galerie / $nb_affiche); //On compte le nombre de pages par rapport au nombre de galeries que l'on veut par page

?>
	<p class="pagination">[ Page :
<?php
for ($i=1;$i<=$nb_pages;$i++)
{
	if ($i == $page )
	{
?>
		<span><?php echo $i; ?></span> -
<?php
	}
	else
	{
?>
		<a href="?page=<?php echo $i; ?>"><?php echo $i; ?></a> -
<?php
	}
}
?>
		]</p>
<?php
$req->closeCursor();
?>
Modifié en dernier par misterflo le 11 mars 2011, 18:05, modifié 1 fois.

Eléphanteau du PHP | 23 Messages

11 mars 2011, 14:00

je te remercie

Bon ça ne marche pas
J'ai pu créer la bdd en exécutant ton code
Je n'ai pas encore essayé d'ajouter des données
Image ou texte
Je ne sais pas bien comment traiter le reste de ton code
J'ai tout collé sur un nouveau document php
Galerie.php
J'ai ajouté un include du php dans la div "galerie" de mon index.php
Comme la bdd est vierge rien ne s'affiche
Normal, mais ce qui me chiffonne c'est que mon menu
en Javascript ne fonctionne plus...

Bref, pas très encourageant

Peux tu me dire comment ajouter mon contenu à la bdd ?
Je n'ai sûrement pas bien exploité ton code

Tu dois me trouver trop exigeant ou paresseux
Mais je te garantis que je suis complètement incapable de réaliser ce genre de truc, trop complexe pour moi qui demeure un """""""artiste"""""" (formation littéraire arts plastique prépa beaux arts et école sup de design...3 sur 20 à l'épreuve de math. du baccalauréat) et pas un informaticien, une formation en webdesign m'a d'ailleurs permis de réaliser mes limites, et au delà des rudiments du html, du css (que j'aime manipuler) mes compétences sont quasi nulles...bref chacun son truc, je crois qu'on a tort de demander aux graphistes de maitriser mysql php java etc, de même qu'on aurait tort de demander à un développeur d'etre créatif (plus rare je crois), enfin, je ne sous estime pas l'importance du devellopement, et peut être que ce métier relève de l'art, mais ses enjeux me dépassent complètement

Bref, je me sens un peu seul vous l'aurez remarqué

Désolé si je divague

une dernière chose, des artistes doués en programmation, ou des programmeurs créatifs produisent des choses magnifiques, Maeda par ex (enfin je crois)

Bon, je vais me coucher