[RESOLU] Liste de dossiers/fichiers + résultat dans code html

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Liste de dossiers/fichiers + résultat dans code html

Re: Liste de dossiers/fichiers + résultat dans code html

par Nyrhu » 18 sept. 2016, 15:00

Désolé, j'ai trouvé ma solution de mon côté, j'avais complètement oublié que j'avais solliciter l'aide des membres de ce forum :) Merci tout de même, vous m'avez tout de même aidé à trouver la solution^^ Voici mon code complet :

Code : Tout sélectionner

function scan_rep($repertoire){ $le_repertoire = opendir($repertoire); $return = array(); while($fichier = @readdir($le_repertoire)){ if ($fichier != "." && $fichier != "..") { if(is_dir($repertoire.'/'.$fichier)){ $folder = $repertoire.'/'.$fichier; $return[] = array('folder'=> $repertoire, 'rep'=>$fichier, 'file'=>scan_rep($repertoire.'/'.$fichier)); } else { $return[] = array('file'=>$fichier, 'meta'=>MetaData($repertoire.'/'.$fichier)); } } } closedir($le_repertoire); return $return; } function echo_rep($a,$cat,$folder,$class){ $flag = 0; foreach($a as $v){ if(is_array($v['file'])) { $cat = $v['rep']; $folder = $v['folder']; echo '<div class="'.$class.'" style="background-image: url(\''.$folder.'/'.$v['rep'].'/00-cover.jpg\')">'; echo_rep($v['file'],$cat,$folder,$class); } else { if ($v['file']=="00-cover.jpg"){ $titre="<h6>".$v['meta']."</h6>"; } else { if ($flag!=1) { echo '<a href="'.$folder.'/'.$cat."/".$v['file'].'"data-lightbox="'.$cat.'"data-title="'.$v['meta'].'">'.$titre.'</a>'; $flag = 1; } else { echo '<a href="'.$folder.'/'.$cat."/".$v['file'].'"data-lightbox="'.$cat.'"data-title="'.$v['meta'].'"></a>'; } } } } echo "</div>"; } function MetaData($f){ GetImageSize($f,$info); if (isset($info["APP13"])) { $iptc = iptcparse($info["APP13"]); return $iptc["2#105"][0]; } } echo_rep(scan_rep('equipe'),'','','cadre-nospanPetit');

Re: Liste de dossiers/fichiers + résultat dans code html

par Ryle » 13 juil. 2016, 16:49

Bonjour,

Ton code php semble plutôt correct, mais ton div n'est pas terminé, et tu n'affiches rien entre tes balises <a></a>, tu n'auras donc pas de lien à l'écran... Tu as également pas mal de résidus de tests précédents qui doivent te polluer... est-ce que quelque chose dans ce genre fonctionne mieux ?
function scan_rep($repertoire){
   $le_repertoire = opendir($repertoire);
   while($fichier = @readdir($le_repertoire)){
      if ($fichier == "." || $fichier == "..") 
         continue;

      if(is_dir($repertoire . '/' . $fichier)) {
         echo '<div class="cadre-nospan" style="background-image: url(\'' . $repertoire . '/cover.jpg\')">';
         echo '<h6>' . $fichier . '</h6>';
         scan_rep($repertoire . '/' . $fichier);
      } else {
         $MetaFile = MetaData($repertoire . '/' . $fichier);
         echo '<a class="galerie" href="' . $repertoire . '/' . $fichier . '" 
            data-lightbox="' . $repertoire . '" data-title="' . $MetaFile . '">' . $fichier . '</a>';
      }
   }
   closedir($le_repertoire);
}
scan_rep('equipe');

Re: Liste de dossiers/fichiers + résultat dans code html

par Nyrhu » 12 juil. 2016, 18:39

Je suis partis dans une autre direction pour le code mais je n'y arrive toujours pas :(

Code : Tout sélectionner

function scan_rep($repertoire){ $le_repertoire = opendir($repertoire); while($fichier = @readdir($le_repertoire)){ if ($fichier == "." || $fichier == "..") continue; if(is_dir($repertoire.'/'.$fichier)){ $folder = $repertoire.'/'.$fichier; echo '<div class="cadre-nospan" style="background-image: url("'.$repertoire.'/cover.jpg")'; scan_rep($repertoire.'/'.$fichier); } else { $File = $fichier; $MetaFile = MetaData($repertoire.'/'.$folder.$File); echo '<a class="galerie" href="'.$repertoire.'/'.$folder.$File.'" data-lightbox="'.$repertoire.'" data-title="'.$MetaFile.'"></a>'; } } echo "</div>"; closedir($le_repertoire); } scan_rep('equipe');

Re: Liste de dossiers/fichiers + résultat dans code html

par Nyrhu » 11 juil. 2016, 13:50

A priori oui, mais le problème c'est qu'à ce stade, je n'obtiens qu'une simple liste :

01-direction-administration
Ghislain Dehon (Directeur)
Olivier Boitel (Administrateur)
equipe/01-direction-administration/cover.jpg
02-assistantes-sociales
equipe/02-assistantes-sociales/cover.jpg
M�lanie Di Santo
V�ronique Wattier
03-centre-psycho-medico-social

Il faut que le script php génère le code html avec les bonnes informations. De plus, les caractères spéciaux sont mal gérés.

Si je décortique l'algorithme à produire :
0) Début
1) Lister répertoires (ex: "equipe") > %var1%
2) Rentrer dans un sous-répertoires/catégorie (ex: "01-direction-administration") > %var2%
3) Chercher le fichier cover.jpg
4) Récupérer la méta-donnée de ce fichier (ex: "Direction & Administration") > %var3%
5) Générer la premier ligne html pour cette catégorie : <div class="cadre-nospan" style="background-image: url("%var1%/%var2%/cover.jpg")
6) Lister les autres fichiers de ce répertoire > %varX%
7) Et récupérer la méta-donnée > %varM%
8) Pour le premier fichier : <a class="galerie" href="%var1%/%va2%/%varX%.jpg" data-lightbox="%var2%" data-title="%varM%"><h6>Direction & Administration</h6></a>
9) 8) Pour les autres fichiers de cette cétégories : <a class="galerie" href="%var1%/%va2%/%varX%.jpg" data-lightbox="%var2%" data-title="%varM%"></a>
10) Ferme la div : </div>
11) On recommence tant qu'on à pas passer toutes les catégories en revue (retourne au point 2)
12) Terminé !


Mise à jour :

Petite pause et on y retourne ! Alors j'ai un peu plus de code mais ça ne fonctionne pas :(

Code : Tout sélectionner

function ScanDirectory($Directory){ $MyFolder = opendir($Directory); while($Folder = readdir($MyFolder)) { if ($Folder != '.' && $Folder != '..'){ if(is_dir($Directory.'/'.$Folder)) { $flag=0; $MyFolderSub = opendir($Directory.'/'.$Folder); //On cherche "cover.jpg" pour récupérer le nom de la catégorie d'images while($File = readdir($MyFolderSub)) { if ($File != '.' && $File != '..'){ if(!is_dir($Directory.'/'.$File)) { if ($File=="cover.jpg" && $flag<1) { echo '<div class="cadre-nospan" style="background-image: url("'.$Directory.'/'.$Folder.'/cover.jpg")'; $MetaCover = MetaData($Directory.'/'.$File); //Signifie qu'on à trouvé Cover.jpg $flag=1; } } } } //ReScan le dossier à la researche des autres fichiers que Cover.jpg while($File = readdir($MyFolderSub)) { if ($File != '.' && $File != '..'){ if(!is_dir($Directory.'/'.$File)) { //Si différent de cover.jpg c'est qu'on est sur un bon fichier image if ($File!="cover.jpg"){ //On récupère la méta du fichier $MetaName = MetaData($Directory.'/'.$File); //Vérifie que la ligne n'a pas été inscrite if (flag<2) { //On écriture de la ligne echo '<a class="galerie" href="'.$Directory.'/'.$Folder.'/'.$File.'" data-lightbox="'.$Folder.'" data-title="'.$MetaName.'"><h6>'.$MetaCover.'</h6></a>'; $flag=2; } else { //Sinon on écrit l'autre ligne (récurrente) echo '<a class="galerie" href="'.$Directory.'/'.$Folder.'/'.$File.'" data-lightbox="'.$Folder.'" data-title="'.$MetaName.'"></a>'; } } } } } echo '</div>'; } } } } ScanDirectory('equipe');

Re: Liste de dossiers/fichiers + résultat dans code html

par moogli » 11 juil. 2016, 12:34

salut,

question bête : c'est quoi la question ? :)

parce que la, à priori, tu a fait pas mal de chose et tu as assemblé le tout sans problème.

@+

Liste de dossiers/fichiers + résultat dans code html

par Nyrhu » 11 juil. 2016, 11:21

Bonjour,

J'ai développé un code batch il y a plusieurs années qui me permet de créer automatiquement une liste d'un dossier et des ses sous-dossiers, ainsi que des fichiers. Le tout est mis en forme dans un JS accompagné d'un html. Ceci me permet de générer des galeries d'images en un clic.

Actuellement, je travaille sur un site php (nouveau pour moi) et je suis entrain de convertir tous mes scripts en code php (bien plus pratique). Là, je galère un peu donc je viens quémander de l'aide :)

Voici ce que je dois obtenir au final dans la page web :

Code : Tout sélectionner

<div class="cadre-nospan" style="background-image: url("equipe/01-direction-administration/cover.jpg") <a class="galerie" href="equipe/01-direction-administration/1Dehon-Ghislain_Directeur.jpg" data-lightbox="01-direction-administration" data-title="Ghislain Dehon (Directeur)"><h6>Direction & Administration</h6></a> <a class="galerie" href="equipe/01-direction-administration/2Boitel-Olivier_Administrateur.jpg" data-lightbox="01-direction-administration" data-title="Olivier Boitel (Administrateur)"></a> </div>
La structure des dossiers se présente de cette façon :
>>equipe :
---->01-direction-administration
---------image1.jpg
---------image2.jpg
---------etc.jpg
---->02-enseignants
---------image1.jpg
---------image2.jpg
---------image3.jpg
---------etc.jpg
---->03-etc
---------image1.jpg
---------image2.jpg
---------image3.jpg
---------etc.jpg

J'utilise également une fonction me permettant de récupérer les méta-données des images. De cette façon, le nom du sujet de l'image est enregistré dans l'image et puis affiché. Sauf pour "cover", l'information contenue est le nom de la catégorie (exemple "Direction & Administration"). Voici un ZIP avec des photos contenant des méta-données valides.

Et voici ce que j'ai niveau code. A ce niveau; j'ai un simple affichage des données, mais je n'arrive pas à mettre en forme pour créer le code html souhaité :(

Code : Tout sélectionner

<?php function MetaData($f){ GetImageSize($f,$info); if (isset($info["APP13"])) { $iptc = iptcparse($info["APP13"]); return $iptc["2#105"][0]; } } function ScanDirectory($Directory){ $MyFolder = opendir($Directory) or die('Erreur'); while($Folder = readdir($MyFolder)) { if ($Folder != '.' && $Folder != '..'){ if(is_dir($Directory.'/'.$Folder)) { echo $Folder.'<br />'; //Dossier : affiché ScanDirectory($Directory.'/'.$Folder); } else { $file = $Directory.'/'.$Folder; if ($Folder=="cover.jpg") { echo $file.'<br />'; //Cover : dossier/fichier.ext } else { echo MetaData($file).'<br />'; //Meta : affichée } } } } } ScanDirectory('equipe'); ?>