begin process at 2012 05 27 22:09:06
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > CLASS GALERIE PHOTO

CLASS GALERIE PHOTO


 Information sur la source

Note :
Aucune note
Catégorie :Class et Objet ( POO ) Classé sous :class, galerie, image Niveau :Débutant Date de création :20/02/2011 Date de mise à jour :23/02/2011 17:58:42 Vu :3 579

Auteur : Xiryl

Ecrire un message privé
Site perso
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

 Description

Je poste cette source en tant que débutant des class.
Après des années à faire du php tjrs a la vieille mode limite du php3, j'ai donc entrepris de créer une class pour voir comment ça marché vraiment...

Ce script bien que fonctionnel est surement loin d être correct et optimisé... je le poste d ailleurs pour ça car j'aimerai que l'on m'explique ( et pas critique hein ) mes erreurs.

Alors cette class donc:
après récupération du nom du répertoire dans une table sql, vérification si le répertoire existe bien, affiche donc les photos du répertoire par page.

j'attend des commentaires constructif pour me permettre de comprendre ce que j'ai mal fait
Merci à vous :)

Source

  • <?php
  • class MyException extends Exception {
  • public function __construct($msg=NULL, $code=0)
  • {
  • parent::__construct($msg, $code);
  • }
  • }
  • class Gallery {
  • private $rw;
  • private $rh;
  • private $rtop;
  • private $w;
  • private $h;
  • private $pic;
  • private $nbpage;
  • public $nombre_pic;
  • public $page;
  • public $page_back;
  • public $page_next;
  • public $affiche_pic;
  • public $realpath;
  • public $webpath;
  • public $nombre_ppage;
  • public $name_gallery;
  • public $type;
  • public function __construct() {
  • }
  • public function data($rep,$type,$w,$h,$nbpp) {
  • if(is_dir($this->realpath.$rep)) {
  • $nbfiles=0;
  • $Dir=new RecursiveDirectoryIterator($this->realpath.$this->name_gallery);
  • foreach (new RecursiveIteratorIterator($Dir) as $filename=>$cur) {
  • if($cur->getFilename()!="index.html") {
  • $nbfiles++;
  • $this->pic[]=$cur->getFilename();
  • }
  • }
  • sort($this->pic);
  • $this->nombre_pic = count($this->pic);
  • $this->name_gallery = $rep; //repertoir des images
  • $this->type = $type; //type d'affichage
  • $this->w = $w; // largeur maxi de l'image
  • $this->h = $h; // hauteur maxi de l'image
  • $this->nombre_ppage = $nbpp; // nombre par page
  • if($this->w==0) { $this->w=300; }
  • elseif($this->w>1000) { $this->w=1000; } // test des dimention demander
  • if($this->h==0) { $this->h=300; }
  • elseif($this->h>1000) { $this->h=1000; }
  • }
  • else
  • {
  • throw new MyException('Erreur de repertoire');
  • }
  • }
  • // redimention d'image
  • public function RedimImage($img) {
  • if(GetImageSize("".$this->realpath."".$this->name_gallery."/".$img."")) {
  • $dst_w = $this->w;
  • $dst_h = $this->h;
  • $size = GetImageSize("".$this->realpath."".$this->name_gallery."/".$img.""); // taille reel de l'image
  • $src_w = $size[0];
  • $src_h = $size[1];
  • $test_h = round(($dst_w / $src_w) * $src_h);
  • $test_w = round(($dst_h / $src_h) * $src_w);
  • if(!$dst_h) { $dst_h = $test_h; }
  • elseif(!$dst_w) { $dst_w = $test_w; }
  • elseif($test_h>$dst_h) { $dst_w = $test_w; }
  • else { $dst_h = $test_h; }
  • if($dst_h > 1 && $dst_h < $this->h){ // centre l'image
  • $top = ceil(($this->h - $dst_h) / 2);
  • } else { $top = 0; }
  • $this->rtop = $top;
  • $this->rw = $dst_w;
  • $this->rh = $dst_h;
  • }
  • else
  • {
  • throw new MyException('Erreur de redimention');
  • }
  • }
  • public function ViewGallery($page=0) {
  • $this->page = $page; // recup de la page en cour
  • $this->nbpage = round($this->nombre_pic / $this->nombre_ppage); // nombre de page
  • if($this->page > $this->nbpage-1) { $this->page=0; } // si page en cour plus grand que le nombre de page on retourne au debut
  • if($this->page!=0) { $this->page_back = $this->page-1; } else { $this->page_back = 0; } // page retour
  • if($this->page+1 < $this->nbpage) { $this->page_next = $this->page+1; } else { $this->page_next = 0; } // page suivant
  • $varpic_debut = $this->page*$this->nombre_ppage;
  • $varpic_fin = ($this->page+1)*$this->nombre_ppage;
  • foreach ($this->pic as $key => $value) {
  • if($key>=$varpic_debut && $key<$varpic_fin) {
  • $this->RedimImage($value);
  • $args = array($value,
  • $this->rw,
  • $this->rh,
  • $this->rtop);
  • $this->affiche_pic[] = $args;
  • }
  • }
  • }
  • }
  • ?>
  • <?php
  • // contenue de la page
  • try{
  • $gallery = new Gallery();
  • $gallery->realpath = "/home/website/public_html/files/images/";
  • $gallery->webpath = "../files/images/";
  • $gallery->data('MA_DIR_equipe2','1','300','300','10');
  • $gallery->ViewGallery($_GET['page']);
  • }
  • catch(MyException $e)
  • {
  • echo 'Oops un bug : ' .$e->getMessage() . ' à la ligne : ' . $e ->getLine();
  • }
  • ?>
  • <table>
  • <td><a href="?op=test&page=<?= $gallery->page_back ?>"> back </a></td>
  • <td><?php for($i=0;$i<count($gallery->affiche_pic);$i++) { echo '<img src="'.$gallery->webpath.$gallery->name_gallery.'/'.$gallery->affiche_pic[$i][0].'" width="'.$gallery->affiche_pic[$i][1].'" height="'.$gallery->affiche_pic[$i][2].'" style="margin-bottom:'.$gallery->affiche_pic[$i][3].'px"/>'; } ?></td>
  • <td><a href="?op=test&page=<?= $gallery->page_next ?>"> next </a></td>
  • </tr>
  • </table>
<?php 

	   class MyException extends Exception { 
		    public function __construct($msg=NULL, $code=0) 
		    { 
		        parent::__construct($msg, $code); 
		    }  
		} 
  
  
	class Gallery {
		private $rw;
		private $rh;
		private $rtop;
		private $w;
		private $h;
		private $pic;
		private $nbpage; 
		
		public $nombre_pic;
		public $page;
		public $page_back;
		public $page_next;
		public $affiche_pic;
		public $realpath;
		public $webpath;
		public $nombre_ppage;
		public $name_gallery;
		public $type;

		
		   public function __construct() {
			}
		
			public function data($rep,$type,$w,$h,$nbpp) { 
			if(is_dir($this->realpath.$rep)) {
				$nbfiles=0;
				$Dir=new RecursiveDirectoryIterator($this->realpath.$this->name_gallery);
				foreach (new RecursiveIteratorIterator($Dir) as $filename=>$cur) {
					if($cur->getFilename()!="index.html") {
						$nbfiles++;
						$this->pic[]=$cur->getFilename();
					}
				}
				sort($this->pic);
				$this->nombre_pic = count($this->pic);
				$this->name_gallery = $rep; //repertoir des images
				$this->type = $type; //type d'affichage
				$this->w = $w; // largeur maxi de l'image
				$this->h = $h; // hauteur maxi de l'image
				$this->nombre_ppage = $nbpp;	// nombre par page
				if($this->w==0) { $this->w=300; }
				elseif($this->w>1000) { $this->w=1000; }   // test des dimention demander
				if($this->h==0) { $this->h=300; }
				elseif($this->h>1000) { $this->h=1000; }	
			} 
			else
			 {
		 		throw new MyException('Erreur de repertoire'); 
		 	 }
		}			
		  	
		// redimention d'image
		public function RedimImage($img) {
		if(GetImageSize("".$this->realpath."".$this->name_gallery."/".$img."")) { 
		   	$dst_w = $this->w;
		   	$dst_h = $this->h;
		   	$size = GetImageSize("".$this->realpath."".$this->name_gallery."/".$img.""); // taille reel de l'image 
		   	$src_w = $size[0]; 
		   	$src_h = $size[1];
		  		$test_h = round(($dst_w / $src_w) * $src_h);
		  		$test_w = round(($dst_h / $src_h) * $src_w);
		  		
			if(!$dst_h) { $dst_h = $test_h; }
		  		elseif(!$dst_w) { $dst_w = $test_w; }
		  		elseif($test_h>$dst_h) { $dst_w = $test_w; }
		  		else { $dst_h = $test_h; }
		  
		 	if($dst_h > 1 && $dst_h < $this->h){	// centre l'image
				$top = ceil(($this->h - $dst_h) / 2);
			} else { $top = 0; }  
			
			$this->rtop = $top;
			$this->rw = $dst_w;
			$this->rh = $dst_h;
		 }
		 else
		 {
		 	throw new MyException('Erreur de redimention'); 
		 }
		}
		
		
		public function ViewGallery($page=0) {
			$this->page = $page; // recup de la page en cour
			$this->nbpage = round($this->nombre_pic / $this->nombre_ppage);	// nombre de page
			
			if($this->page > $this->nbpage-1) { $this->page=0; } // si page en cour plus grand que le nombre de page on retourne au debut
			
			if($this->page!=0) { $this->page_back = $this->page-1; } else { $this->page_back = 0; }	// page retour
			if($this->page+1 < $this->nbpage) { $this->page_next = $this->page+1; } else { $this->page_next = 0; }	// page suivant
			
			$varpic_debut = $this->page*$this->nombre_ppage;
			$varpic_fin = ($this->page+1)*$this->nombre_ppage; 
			
							foreach ($this->pic as $key => $value) {
						  if($key>=$varpic_debut && $key<$varpic_fin) { 
						  $this->RedimImage($value);
						  $args = array($value,
						  				$this->rw,
										$this->rh,
										$this->rtop);
						  $this->affiche_pic[] = $args;
					  } 
				  }
		} 
}
?>


<?php
// contenue de la page 
try{ 
$gallery = new Gallery();
$gallery->realpath = "/home/website/public_html/files/images/";
$gallery->webpath = "../files/images/";
$gallery->data('MA_DIR_equipe2','1','300','300','10'); 
$gallery->ViewGallery($_GET['page']);
}
catch(MyException $e)
{
echo 'Oops un bug : ' .$e->getMessage() . ' à la ligne : ' . $e ->getLine();
}

?> 

<table>	
	<td><a href="?op=test&page=<?= $gallery->page_back ?>"> back </a></td>
	<td><?php for($i=0;$i<count($gallery->affiche_pic);$i++) { echo '<img src="'.$gallery->webpath.$gallery->name_gallery.'/'.$gallery->affiche_pic[$i][0].'" width="'.$gallery->affiche_pic[$i][1].'" height="'.$gallery->affiche_pic[$i][2].'" style="margin-bottom:'.$gallery->affiche_pic[$i][3].'px"/>'; }  ?></td>
	<td><a href="?op=test&page=<?= $gallery->page_next ?>"> next </a></td>
	</tr>
</table>





 Historique

21 février 2011 16:31:03 :
* rajout de la redimention d'image
21 février 2011 16:36:01 :
correction
23 février 2011 13:56:30 :
2eme version
23 février 2011 14:03:16 :
correction
23 février 2011 17:58:42 :
correction exception

 Sources de la même categorie

Source avec Zip GÉNÉRATION AUTOMATIQUE DE FICHIER .CLASS.PHP EN FONCTION D'U... par ig3
CLASSE D'OBJET DE CRYPTAGE ET DÉCRYPTAGE DE CHAINES DE CARAC... par 8Tnerolf8
Source avec Zip MY.DEVIANTART API par inwebo
CLASSE DE GESTION DE "VARIABLES GLOBALES D'ENVIRONNEMENT" par pifou25
Source avec Zip COLLECTION.CLASS.MIN.PHP par thunderhunter

 Sources en rapport avec celle ci

REDIMENSIONNEMENT D'IMAGE PHP par JStevens
Source avec Zip FUNCTION IMAGE SIMPLE ET ARRAY par astro53
Source avec Zip CLASSE : GÉNÉRATEUR DE MINIATURE STRICTE OPTIMISÉ par GauldoMagique
Source avec Zip Source avec une capture GALERIE D'IMAGE SIMPLE ET FACILE A INTEGRER A VOS PAGES EXIS... par darknessneo
Source avec une capture GALERIE PHP SANS BDD, AVEC CRÉATION DE VIGNETTES par ThePilot

Commentaires et avis

Commentaire de MagicGilles le 23/02/2011 03:07:31

Salut,
2-3 trucs en vrac.
Ta classe à trop de responsabilité, elle n'est pas réutilisable car peu flexible et extensible. On appelle cela le "code spaghetti". Si tu fais une modif, t'es obliger de te replonger dans le code pour savoir qui fait quoi et comment.
Pour bien programmer en objet, il faut qu'une classe est le moins de responsabilité possible (ça évite les erreurs). Par exemple, une classe de connexion à la base de données ne fait que ça. Elle se connecte/déconnecte mais elle ne s'occupe pas des données. Une autre classe sera là pour ça (c'est un exemple).

Maintenant parlons code :
1) Il faut éviter dans la grande majorité les opendir and co. Il y a mieux en php 5 comme RecursiveDirectoryIterator (je te laisse voir la doc sur les itérateurs sur le site php.net). Au pire tu peux utiliser la fonction glob.
2) Pour concaténer 2 variables tu n'es pas obligé de faire $var."".$var2, un simple point suffit : $var.$var2
3) Dans une classe il faut éviter de mettre du (x)html.
4) Il faut tester le résultat de chaque fonction. Par exemple GetImageSize retourne false en cas d'erreur. Il faut traiter ce cas.
Voila pour un début

Commentaire de Xiryl le 23/02/2011 13:57:32

merci de tes conseil magicgilles.

j'ai modifier selon tes critique ( pour commencer lol )

Commentaire de MagicGilles le 23/02/2011 14:36:56

Je pense que tu dois revoir les exceptions car je pense qu'il y a un truc qui t'échappe (http://www.php.net/manual/fr/class.exception.php).
Je te donne un exemple :
<?php
$filename= 'mondossier ' . DIRECTORY_SEPARATOR . 'monfichier.png';

try
{
if(!file_exists($filename))
{
throw new MyException(sprintf('Fichier %s non trouvé',$filename))
}
}
catch(MyException $e)
{
echo 'Il y a une erreur avec le message suivant : ' . $e -> getMessage() . ' à la ligne : ' . $e -> getLine();
}
?>

Commentaire de Xiryl le 23/02/2011 14:45:37

ça sens doute vu que c le début de gestion de class pour moi, ya bcp de truc qui m'échappe lol.
Pour les exceptions, j'ai demander au script pour le moment de m'afficher une erreur si le repertoire n'existe pas ou si il ne peut pas redimentionner, l'erreur s'affiche bien en cas de problemes... après un truc que j'ai pas trouver c comment lui dir a ViewGallery de ne pas affiché si ya une erreur.

Commentaire de MagicGilles le 23/02/2011 17:26:06

Oui c'est jamais facile au début. Là dans ton code, elles ne servent à rien car un simple echo fait aussi bien (surtout pour le débogage).
ça aurait plus d'utilité en dehors de ta classe. Tu places tes throw new MyException pour indiquer qu'une erreur inattendue vient de se produire et en dehors tu places ton bloc try catch.

try{
$ma_class = new ma_super_classe();
}
catch(MyException $e)
{
echo 'Oops un bug : ' .$e->getMessage() . ' à la ligne : ' . $e ->getLine();
}
Tu peux aussi le mettre en interne mais ça sous entend que ton bloc try catch doit/va essayer de corriger le problème avant de reprendre l'exécution du programme.

Commentaire de Xiryl le 23/02/2011 18:00:12

OK je viens de comprendre! merci MagicGilles :)
Alors la suite ?! lol
Comment je fait pour resoudre le probleme automatiquement via l'exception ?

Commentaire de MagicGilles le 23/02/2011 18:23:00

Ça dépend si le problème est rattrapable ou non.
Je te donne un exemple.
Imagine que tu dois lire le dossier "image". Tu tests donc si le dossier est accessible en lecture (test normal avec la fonction is_readable par exemple). Manque de chance les droits de celui-ci on changé et il n'est plus accessible en lecture. Tu lèves une exception car c'est un comportement anormal sur ce dossier.
Ton blog try catch capture l'exception en interne, changes les droits du dossier (voir chmod pour plus de détails) et tu appels de nouveau la méthode.
L'avantage c'est que l'utilisateur ne voit rien et que le problème à été règlé.

Commentaire de Xiryl le 23/02/2011 18:25:55

ok ok...
autre petite question, ya t'il simple moyen de savoir si ya une exception ou pas ?
par exemple avant d'afficher le html, regarder si tout c bien dérouler et si c le cas on affiche, sinon on affiche rien ?

autre chose sinon de pas bon dans ma source ?

Commentaire de MagicGilles le 23/02/2011 18:54:00

Oui mais c'est un peu plus complexe. C'est de séparer les couches. Php d'un coté, le html de l'autre.
C'est à php de décidé quoi faire en fonction des événements. Si t'as une erreur tu affiches ton erreur (par exemple) ou autre. Sinon tu affiches ta galerie.

Si il y a toujours moyen d'améliorer et ça dépend de tes besoins (puis tu débutes donc faut avancer petit à petit). Tiens encore une petite astuce. Plutôt que de répéter les private, public ou protected tu peux les grouper.

Par exemple :
class A
{
private
     $_a,
     $_b,
     $_c;
protected
     $d,
     $e,
     $f;
}

Commentaire de mihajatiana le 23/11/2011 15:02:07

Je ne comprends rien ce code là!!!

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

php [ par alouest3 ] php galerie voila j'ai besoin de faire une galerie ou le gar choisi son image valide et que cele ci apparaise en haut un peu comme ca http://tetsuya.k Galerie d'image [ par sebalex ] Bonjour &#224; tous,J'ai des images dans un r&#233;pertoire de mon site qui sont reli&#233;es &#224; une bdd (sql) et que j'affiche dans un tableau. A Quelqu'un aurait une galerie sur iFrance??? [ par sm200988 ] Bonjour voilà je suis hébergé sur iFrance et en faites je teste un tas de galerie d'image en javascript mais c'est pas beau!!! En faites j'aurais aimé arborescence de repertoire et sous répertoire avec galerie d'image [ par bladehelsing ] Bonjours à tous,après avoir essayer tous les codes arborescence avec galerie d'image.j'en ai trouvé aucun qui:affiche d'abord les répertoires qui seul Galerie d'image [ par Tokuna ] Bonjour,Je ne m'y connais absolument pas en image niveau php, donc, j'aimerai vous poser une question.Je d&#233;sirai cr&#233;er une "galerie d'image" Petit probleme dans ma galerie d'image aideeee svp [ par marouanemarouane ] Bonsoirrrr , j'ai besoin d'un petit aide svpppj'ai creé une petite galerie d'image avec une boucle...mais ça m'affiche toute les images dans une seule comment faire une galerie d'image [ par Malamute7 ] bonjour voici mon code Photographies de la communes <?php $compteur=0; // connection au serveur galerie image [ par djbabou ] Bonjour à tous ... Me revoici sur codes sources avec une nouvelle quesion: J'ai développé une galerie d'image très simple en pure css/html. En fait, Galerie photos: Miniature + rognage [ par Kronikerz ] Bonjour, Je suis à la recherche de 2 scripts: le premier permettant de miniaturiser une image, tout en gardant les proportions. Le second dans le b galerie photo [ par SalahDN25 ] Salut tous le monde,je voudrais réaliser une galerie photos dans une page qui contien une table à deux colonnes: ma vision est de faire defiler vertic


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,452 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales