Vous n'êtes pas identifié(e).

Annonce

ATTENTION

  • Prenez le temps de rechercher si quelqu'un n'a pas déjà proposé une solution à votre problème. Sur le forum français et sur le wiki
  • Pensez à mettre à jour votre version de Cms Made Simple. Nous ne faisons de support que sur LA dernière version de CmsMadeSimple.
  • Renseignez impérativement le formulaire de nouveau message de manière la plus complète que possible. Ces informations demandées nous permettent de mieux vous aider
  • Ajoutez [Résolu] au début du titre de votre 1er message lorsqu'une solution a été trouvée.

#1 30/04/2012 10:32:56

Celtic MAn
Membre
Lieu : Le Mans
Inscription : 30/04/2012
Messages : 72

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

#~~~~~ 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}.

[== 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.

[== 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

Dernière modification par Celtic MAn (30/04/2012 14:23:31)


cool

Hors ligne

 

#2 30/04/2012 11:44:56

bess
Administrateur
Lieu : Rennes
Inscription : 16/12/2008
Messages : 5 533
Site Web

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

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

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

je préfère le code suivant

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

Hors ligne

#3 30/04/2012 12:16:10

Celtic MAn
Membre
Lieu : Le Mans
Inscription : 30/04/2012
Messages : 72

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

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...

[== 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 :

[== 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 :

[== 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

Hors ligne

#4 30/04/2012 12:34:52

Celtic MAn
Membre
Lieu : Le Mans
Inscription : 30/04/2012
Messages : 72

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

J'ai réglé le premier problème :
j'ai fait un mixte des deux codes :

[== 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

Hors ligne

#5 30/04/2012 12:57:26

bess
Administrateur
Lieu : Rennes
Inscription : 16/12/2008
Messages : 5 533
Site Web

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

utilise

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

Hors ligne

#6 30/04/2012 13:10:25

Jean le Chauve
Sa Seigneurie le Chauve, Comte du domaine .be
Lieu : Bruxelles
Inscription : 13/12/2007
Messages : 3 401
Site Web

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

Pourquoi te fatiguer à insérer une icône avec img, alors que c'est faisable automatiquement  en css

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.

Dernière modification par Jean le Chauve (30/04/2012 13:25:22)

Hors ligne

#7 30/04/2012 13:59:17

Celtic MAn
Membre
Lieu : Le Mans
Inscription : 30/04/2012
Messages : 72

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

@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  hmm

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

Merci pour votre aide.

Dernière modification par Celtic MAn (30/04/2012 14:22:51)


cool

Hors ligne

Pied de page des forums

  Flux Rss Twitter FaceBook
fermer

Fin définitive du support 1.6.x sur le forum français

C'était le 8 juin 2011, la team org annonçait la fin du support de la branche 1.6.x, la dernière à supporter php 4.x et 5.1/5.2, nous avions de notre côté accepté d'étendre bénévolement le support de [lire la suite]