[PLUGIN] création automatique de dossiers d'image -cool pour les diapo

danielsandanielsan Member
novembre 2013 modifié dans Plugins
Hello,

préparant mon départ, je fais le tri dans mon legs :D

Plugin filesGenerator

Voici un petit plugin qui

1/ crée automatiquement un dossiers d'images à l'enregistrement d'un article.
Il le classe dans sa catégorie associée, exemple :
titre de l'article : "mon premier article"
catégorie : "categorie1"

le dossier image sera créé dans data/images/categorie1/mon-premier-article

Attention ! si l'article fait partie de plusieurs catégories,
il se trouvera dans les différents dossiers associés
exemple :
data/images/categorie1/mon-premier-article
data/images/categorie2/mon-premier-article

2/ à l'appel du hook, il va chercher le(s) dossier(s) concerné(s) et retourne la liste sous forme de tableau
on l'appelle simplement comme ça
[== PHP ==]
$dossiers = $plxShow->callHook('filesGenerator');

L'utilité ?
Par exemple, si vous avez différentes galeries d'images.
1/ on crée l'article (seul un titre suffit) et l'associe à une catégorie
2/ on enregistre (la création du dossier se fait à ce moment)
3/ on envoie les images dans le dossier
4/ on appelle le plugin et on injecte les images dans le widget de diapo

Qu'en pensez-vous ?

Je ne connais pas la portée de ce plugin sur les nouvelles versions de PluXml ...


Je mets un code d'exemple d'utilisation de ce plugin pour une liste d'images destinée à un diapo:

première partie :
on parcourt les dossiers, et classe les images en différentes catégories (taille normal et miniature, il faut les miniatures)
on en profite aussi pour extraire les dimensions et adapter en fonction de la taille du diapo ...

(note: l'histoire du logo et qu'en fait parmi les photos,
s'il y en a une qui s'appelle "logo",
elle est utilisée pour l'illustration de l'article ...)
[== Indéfini ==]
<?php

// récupération des dossiers d'images
$dossiers = $plxShow->callHook('filesGenerator');
if(is_array($dossiers)) {
			$vignettes = array();
			$images = array();
			$infos_width = array();
			$infos_height = array();
			$logo = array();

		foreach ($dossiers as $k => $dossier_img){
			$fichiers = scandir($dossier_img);

			foreach($fichiers as $k=>$v){
				if($v != '.' && $v != '..' && !is_dir($dossier_img.$v) && (in_array(strtolower(strrchr($v,'.')), array('.gif', '.jpg', '.png'))) ) { // on isole que les fichiers images
					if(stripos($v, ".tb.")!==false){
						array_push($vignettes, $dossier_img."/".$v); // on remplie le tableau des vignettes
						if($v=="logo.tb.jpg"){$logo['ptt'] = $dossier_img."/".$v;}else{}
					} else {
						array_push($images, $dossier_img."/".$v); // on remplie le tableau des images
						if($v=="logo.jpg"){ $logo['gd'] = $dossier_img."/".$v; }else{}
					}
				}else{}
			}
		}

		// on va vérifier s'il y a des photos autres que le logo pour afficher le diapo
		$countImage = sizeof($images);
		if($images>0){ // il y a des photos dans le dossier
			foreach($images as $k => $v){
				$pos1 = strripos($v,'/');
				$isol = substr($v, $pos1+1, 4);
				if(strtolower($isol)!="logo"){ // il y a des photos autres que le logo
					$insertImages = true; // on affiche le diapo
				}else{}
			}
		}else{}


		foreach($images as $k=>$value){

					# Informations sur l'image
					list($width_orig,$height_orig,$type) = getimagesize($value); // extraction des données liées à l'images
					# les dimensions voulues
					$width_diapo = 448;
					$height_diapo = 277;
					$ratio_diapo = $width_diapo/$height_diapo;
					$ratio_orig = $width_orig/$height_orig;
					
					if($width_orig>$height_orig){ // image horizontale
						if(($width_orig/$height_orig)>$ratio_diapo){ // images plus large que le diapo
							array_push($infos_width, ceil($width_diapo)); // on remplie le tableau des largeurs
							array_push($infos_height, ceil($width_diapo/$ratio_orig)); // on remplie le tableau des hauteurs
						}else{
							array_push($infos_width, ceil($height_diapo*$ratio_orig)); // on remplie le tableau des largeurs
							array_push($infos_height, ceil($height_diapo)); // on remplie le tableau des hauteurs
						}
					}else{ // image verticale
							array_push($infos_width, ceil($height_diapo*$ratio_orig)); // on remplie le tableau des largeurs
							array_push($infos_height, ceil($height_diapo)); // on remplie le tableau des hauteurs
					}
		}

		$nb_img = count($vignettes);
		$gallerie = array(
							"vignette"		=> $vignettes,
							"image"			=> $images,
							"width"			=> $infos_width,
							"height"		=> $infos_height,
							"logo"			=> $logo,
					);

}else{ $insertImages = false;}

?>

2ème étape, on affiche la liste d'images
[== Indéfini ==]
	<?php if($insertImages) :?>
	
		<div class="diapo_content grid_6 row_6 border_1 bg_light shadow">
			<ul class="jDiaporama diapo_produits">
				<?php for($i=0; $i<$nb_img; $i++) : ?>
				<?php $pos = strpos($gallerie["image"][$i], "logo");
				if ($pos === false) : ?>
				<?php
				$style = "style=\"";
				$style .= "margin-left:".ceil(($width_diapo-$gallerie["width"][$i])/2)."px;";
				if($gallerie["height"][$i]<$height_diapo){
					$style .= " margin-top:".ceil(($height_diapo-$gallerie["height"][$i])/2)."px;";
				}else{}
				$style .= "\"";
				?>
						<li>
							<a href="<?php echo $gallerie["image"][$i]; ?>" class="lightbox">
								<img src="<?php echo $gallerie["image"][$i]; ?>" width="<?php echo $gallerie["width"][$i]; ?>px" alt="Exemple de <?php $plxShow->artTitle(''); ?>" height="<?php echo $gallerie["height"][$i]; ?>px" <?php echo $style; ?>/>
							</a>
						</li>
				<?php endif; ?>
				<?php endfor; ?>
			</ul>
		</div>

	<?php endif; ?>

Bien entendu le code d'affichage est à adapter au plugin de diapo, de lightbox, etc ...

Enjoy ;)

Réponses

  • Merci Danielsan. A tester mais ça semble prometteur. Mais je pense que tu as oublié le lien de téléchargement vers le plugin... :D
  • Jerry Wham a écrit:
    Mais je pense que tu as oublié le lien de téléchargement vers le plugin... :D
    :lol: :lol: :lol:
Connectez-vous ou Inscrivez-vous pour répondre.