Sujet fermé
Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

[Résolu] Balise utilisateur pour lister les éléments d'un répertoire
#1

Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: #1.10.3
#~ Url du site :
#~ Hébergeur / Soft : OVH/MAMP
#~ Informations Système :
#~ OS : Mac Lion
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~

Bonjour,
je souhaite afficher le contenu d'un répertoire, pour le moment ça fonctionne mais j'aimerai "pousser" un peu plus loin, en effet pour le moment je l'utilise de la manière suivante : {fichiers}.
Code :
[== PHP ==]
/* repertoire du dossier */
$rep = "uploads/telechargements/test/";
$dir = opendir($rep);

while ($f = readdir($dir))
{      
   if(is_file($rep.$f))
           {
           $tab_dir[] = $f;
           }
}

/* on trie le tableau obtenu */
natcasesort($tab_dir);

echo '<div align="center" style="background-image: url(./uploads/telechargements/icones/download.png); background-position: 15px -10px; background-repeat: no-repeat; font-size: smaller; width:270px ; margin-left: 0px; padding:2px ; border-left:1px solid #FFFFFF ; border-right:1px solid #FFFFFF ; border-bottom:1px solid #FFFFFF ; border-top:1px solid #FFFFFF; height:72px; margin-top:-78px;">';

echo '<ul style="line-height:0px;">';

/* on affiche chaque element */
foreach($tab_dir as $elem)
{

if (preg_match("#.pdf$#", $elem)) {
    $icon="Pdf.png";
} elseif (preg_match("#.xlsx$#", $elem)) {
    $icon="Excel.png";
} elseif (preg_match("#.xls$#", $elem)) {
    $icon="Excel.png";
} elseif (preg_match("#.docx$#", $elem)) {
    $icon="Word.png";  
} elseif (preg_match("#.doc$#", $elem)) {
    $icon="Word.png";  
} elseif (preg_match("#.pptx$#", $elem)) {
    $icon="PowerPoint.png";  
} elseif (preg_match("#.ppt$#", $elem)) {
    $icon="PowerPoint.png";  
} elseif (preg_match("#.ppsx$#", $elem)) {
    $icon="PowerPoint.png";  
} elseif (preg_match("#.pps$#", $elem)) {
    $icon="PowerPoint.png";  
} elseif (preg_match("#.zip$#", $elem)) {
    $icon="Zip.png";
}else {
    $icon="inconnu.png";
}

echo '<div align="center" style="text-align:left; margin-left:50px;">
<li style="list-style-type:none;">
<a href="uploads/telechargements/test//'.$elem.'"><img src="./uploads/telechargements/icones/'.$icon.'" title="'.pathinfo($elem,PATHINFO_FILENAME).'"></a>
<a href="uploads/telechargements/test//'.$elem.'" title="'.pathinfo($elem,PATHINFO_FILENAME).'">'.pathinfo($elem,PATHINFO_FILENAME).'</a>
</li><br/></div>';

}

echo'</div>';

Je voudrais améliorer le code pour lister les éléments d'un dossier passé en paramètre de la façon suivante : {fichiers name='test'}
Mais je n'y arrive il ne m'affiche rien pour le moment.
Code :
[== PHP ==]
$rep = "uploads/telechargements/";
$dir = getenv("DOCUMENT_ROOT").$rep.$params['name'];
$dh  = opendir($dir);

$i=0;
while ( $file = readdir($dh) )
{
  echo 'while 1';
  // enleve les fichiers . et ..
  if ($file != '.' && $file != '..')
  {
    echo 'data';
    // on passe les datas dans un tableau
    $ListFiles[$i]=$file;
    $i++;
   }
}
closedir($dh);

// tri par ordre decroissant
if(count($ListFiles)!=0)
{
  if($list_tri == 'DESC')
  {
    rsort($ListFiles);
   }
   else
   {
     sort($ListFiles);
    }
}

Même cette portion de code ne m'affiche rien.

Merci d'avance

Cool
#2

ça m'a l'air pas trop mal pourtant

Code :
$dir = getenv("DOCUMENT_ROOT").$rep.$params['name'];

je préfère le code suivant

Code :
$config = cmsms()->getConfig();
$dir = $config['root_path']."/uploads/telechargements/".$params['name'];
echo $dir;
return;
#3

Merci pour ta réponse, effectivement avec ton code ça passe mieux.

Pour mon deuxième exemple ça fonctionne, il liste bien les fichiers du répertoire que je passe en paramètre. Par contre quand je veux "l'adapter" à mon premier code...

Code :
[== PHP ==]
$config = cmsms()->getConfig();
$dir = $config['root_path']."/uploads/telechargements/".$params['name'];
$dh  = opendir($dir);

/* pas de moyen de trier directement les fichiers avec readdir(), il faut provisoirement stocker le résultat de readdir() dans un tableau */
while ($f = readdir($dh))
{    
   if(is_file($dh.$f))
       {
       $tab_dir[] = $f;
       }
}

/* on trie le tableau obtenu */
natcasesort($tab_dir);

/* Pour affichier un cadre */
echo '<div align="center" style="background-image: url(./fichiers/icone/download.png); background-position: 15px -10px; background-repeat: no-repeat; font-size: smaller; width:270px ; margin-left: 0px; padding:2px ; border-left:1px solid #FFFFFF ; border-right:1px solid #FFFFFF ; border-bottom:1px solid #FFFFFF ; border-top:1px solid #FFFFFF; height:72px; margin-top:-78px;">';

echo '<ul style="line-height:0px;">';

/* on affiche chaque element */
foreach($tab_dir as $elem)
{

if (preg_match("#.pdf$#", $elem)) {
    $icon="Pdf.png";
} elseif (preg_match("#.xlsx$#", $elem)) {
    $icon="Excel.png";
} elseif (preg_match("#.xls$#", $elem)) {
    $icon="Excel.png";
} elseif (preg_match("#.docx$#", $elem)) {
    $icon="Word.png";  
} elseif (preg_match("#.doc$#", $elem)) {
    $icon="Word.png";  
} elseif (preg_match("#.pptx$#", $elem)) {
    $icon="PowerPoint.png";  
} elseif (preg_match("#.ppt$#", $elem)) {
    $icon="PowerPoint.png";  
} elseif (preg_match("#.ppsx$#", $elem)) {
    $icon="PowerPoint.png";  
} elseif (preg_match("#.pps$#", $elem)) {
    $icon="PowerPoint.png";  
} elseif (preg_match("#.zip$#", $elem)) {
    $icon="Zip.png";
}else {
    $icon="inconnu.png";
}

echo '<div align="center" style="text-align:left; margin-left:50px;"><li style="list-style-type:none;"><a href="uploads/telechargements/LAPPUI72//'.$elem.'"><img src="fichiers/icone/'.$icon.'" title="'.pathinfo($elem,PATHINFO_FILENAME).'"></a><a href="uploads/telechargements/LAPPUI72//'.$elem.'" title="'.pathinfo($elem,PATHINFO_FILENAME).'">'.pathinfo($elem,PATHINFO_FILENAME).'</a></li><br/></div>';

}

echo'</div>';

J'ai donc deux soucis, à mon avis le premier ce situe ici :
Code :
[== PHP ==]
while ($f = readdir($dh))
{    
   if(is_file($dh.$f))
       {
       $tab_dir[] = $f;
       }
}
Je pense qu'il n'arrive pas à remplir le tableau.

Et ma deuxième question :
Code :
[== PHP ==]
echo '<div align="center" style="text-align:left; margin-left:50px;"><li style="list-style-type:none;"><a href="uploads/telechargements/LAPPUI72//'.$elem.'"><img src="fichiers/icone/'.$icon.'" title="'.pathinfo($elem,PATHINFO_FILENAME).'"></a><a href="uploads/telechargements/LAPPUI72//'.$elem.'" title="'.pathinfo($elem,PATHINFO_FILENAME).'">'.pathinfo($elem,PATHINFO_FILENAME).'</a></li><br/></div>';
Comment j'indique le lien du fichier ?

Cool
#4

J'ai réglé le premier problème :
j'ai fait un mixte des deux codes :
Code :
[== PHP ==]
$config = cmsms()->getConfig();
$dir = $config['root_path']."/uploads/telechargements/".$params['name'];
$dh  = opendir($dir);

echo '<div align="center" style="background-image: url(./fichiers/icone/download.png); background-position: 15px -10px; background-repeat: no-repeat; font-size: smaller; width:270px ; margin-left: 0px; padding:2px ; border-left:1px solid #FFFFFF ; border-right:1px solid #FFFFFF ; border-bottom:1px solid #FFFFFF ; border-top:1px solid #FFFFFF; height:72px; margin-top:-78px;">';

echo '<ul style="line-height:0px;">';

$i=0;
while ( $file = readdir($dh) )
{
  // enleve les fichiers . et ..
  if ($file != '.' && $file != '..')
  {
    // on passe les datas dans un tableau
    $ListFiles[$i]=$file;
    $i++;
   }
}
closedir($dh);

// tri par ordre decroissant
if(count($ListFiles)!=0)
{
  if($list_tri == 'DESC')
  {
    rsort($ListFiles);
   }
   else
   {
     sort($ListFiles);
    }
}

// affiche les fichiers par ordre alphabetique decroissant
$i=0;
while ( $i < count($ListFiles))
{
foreach($ListFiles as $elem)
{
  if (preg_match("#.pdf$#", $elem)) {
      $icon="Pdf.png";
  } elseif (preg_match("#.xlsx$#", $elem)) {
      $icon="Excel.png";
  } elseif (preg_match("#.xls$#", $elem)) {
      $icon="Excel.png";
  } elseif (preg_match("#.docx$#", $elem)) {
      $icon="Word.png";  
  } elseif (preg_match("#.doc$#", $elem)) {
      $icon="Word.png";  
  } elseif (preg_match("#.pptx$#", $elem)) {
      $icon="PowerPoint.png";  
  } elseif (preg_match("#.ppt$#", $elem)) {
      $icon="PowerPoint.png";  
  } elseif (preg_match("#.ppsx$#", $elem)) {
      $icon="PowerPoint.png";  
  } elseif (preg_match("#.pps$#", $elem)) {
      $icon="PowerPoint.png";  
  } elseif (preg_match("#.zip$#", $elem)) {
      $icon="Zip.png";
  }else {
      $icon="inconnu.png";
  }
  echo '<div align="center" style="text-align:left; margin-left:50px;"><li style="list-style-type:none;"><a href="uploads/telechargements/LAPPUI72//'.$elem.'"><img src="fichiers/icone/'.$icon.'" title="'.pathinfo($elem,PATHINFO_FILENAME).'"></a><a href="uploads/telechargements/LAPPUI72//'.$elem.'" title="'.pathinfo($elem,PATHINFO_FILENAME).'">'.pathinfo($elem,PATHINFO_FILENAME).'</a></li><br/></div>';
   $i++;
}
}

echo'</div>';

Il me manque plus qu'a trouvé comment lui indiqué le lien du fichier : <a href="...//'.$elem.'">

Cool
#5

utilise

$config = cmsms()->getConfig();
$config['root_url'].'uploads/telechargements/'.$elem
#6

Pourquoi te fatiguer à insérer une icône avec img, alors que c'est faisable automatiquement en css
Code :
a[href$='.zip'], a[href$='.gzip'], a[href$='.rar'], a[href$='.7z'] {
    background: url([[root_url]]/uploads/images/design/icones/zip.png) no-repeat left center;
    padding-left: 20px;
    line-height: 16px;
}
Tu peux ainsi chercher n'importe qu'elle icône en rapport à son extension sans passer par une regex Cool

Compatible IE7+ et tous les autres navigateurs.
#7

@Jean le Chauve : merci pour l'astuce je n'y avais pas pensé Wink

@bess : merci pour ton aide, mais je n'arrive pas encore à trouvé la bonne "syntaxe" :
  • <a href=""$config['root_url'].'uploads/telechargements/'.$elem"">
  • <a href=<a href="$config['root_url'].'uploads/telechargements/'.$elem">
  • ...

Entre la variable, les "" et les '' je vous avoue que je m'y perd un peu :/

Edit : syntaxe ok : <a href="/uploads/telechargements//'.$params['name'].'//'.$elem.'">

Merci pour votre aide.

Cool
#8

Quand les quotes t'embêtent, tu as aussi cette astuce : la syntaxe heredoc : http://www.manuelphp.com/php/language.ty...eredoc.php
Sujet fermé


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)