8791 sujets

Développement web côté serveur, CMS

Bonjour, sur une partie de mon site ou je met à disposition des fichiers (pdf, doc, xsl, etc.)

j'ai fait un simple listing de mon dossier qui me permet d'afficher tous les fichiers présenst sous forme de liste.
j'ai comme idée d'associer à chacun des documents présents dans cette liste une icône en rapport avec l'extension du fichier... Mais je bloque, je ne sais pas trop comment aborder le problème.

Si dessous mon code de listing
<?php
$dir_nom = 'media/fichier'; // dossier listé (pour lister le répertoir courant : $dir_nom = '.'  --> ('point')
$dir = opendir($dir_nom) or die('Erreur de listage : le répertoire n\'existe pas'); // on ouvre le contenu du dossier courant
$fichier= array(); // on déclare le tableau contenant le nom des fichiers
$dossier= array(); // on déclare le tableau contenant le nom des dossiers

while($element = readdir($dir)) {
	if($element != '.' && $element != '..') {
		if (!is_dir($dir_nom.'/'.$element)) {$fichier[] = $element;}
		else {$dossier[] = $element;}
	}
}

closedir($dir);

if(!empty($dossier)) {
	sort($dossier); // pour le tri croissant, rsort() pour le tri décroissant
	echo "Liste des dossiers accessibles dans '$dir_nom' : \n\n";
	echo "\t\t<ul>\n";
		foreach($dossier as $lien){
			echo "\t\t\t<li><a href=\"$dir_nom/$lien \">$lien</a></li>\n";
		}
	echo "\t\t</ul>";
}

if(!empty($fichier)){
	sort($fichier);// pour le tri croissant, rsort() pour le tri décroissant
	echo "Liste des documents accessibles";
	echo "\t\t<ul>\n";
		foreach($fichier as $lien) {
			echo "\t\t\t<li><img src='media/icone/".icone_ext('$dir_nom/$lien ')."'><a href=\"$dir_nom/$lien \">$lien</a></li>\n";
		}
	echo "\t\t</ul>"; 
 }
?>




En fait j'ai trouvé sur le net un code qui permet soit disant d'afficher une icône en fonction de l'extension mais je n'arrive pas à le relier avec mon listin Smiley sweatdrop

voici ce code
<?php 
function icone_ext($fichier)
   {
   // icone par defaut si l'extention n'a pas d'icone
   $icone_defaut = "excel.ico";   
      
   // tableau des nom d'icone par aport a l'extention
   $tab_icone = array("doc"=>"doc.ico",
                  "pdf"=>"pdf.ico" );
                  
   // recupere extention sur le nom de fichier
   $tab_fichier = explode(".",$fichier);   
   $extention = $tab_fichier[count($tab_fichier)-1];
   
   // si l'extention est dans la liste
   if (array_key_exists($extention,$tab_icone))
      return $tab_icone[$extention];
      
   // si elle n'existe pas
   else return $icone_defaut;
}

echo "<img src='media/icone/".icone_ext('monfichier.pdf')."'> monfichier.pdf"
?>



Pourriez-vous m'aiguiller svp? Merci
Modifié par foxprox (11 Aug 2009 - 12:12)
Salut,

1. Tu as bien .xxx à la fin de ta variable $lien ? (Normalement oui)
2. Tu as bien ajouté les extensions qui t'intéresse dans le tableau $tab_icone et tu as mis le bon chemin pour les icônes ?
3. Un petit Ctrl+u dans Firefox (voir source) ça donne quoi ?

ps : Si j'ai bien compris tu ne devrait pas avoir besoin de $dir_nom/$lien mais seulement de $lien, mais ça ne change rien.
Salut,

là tout de suite j'ai un peu la flemme de rentrer dans le détail mais je viens de retrouver ce code :
function Geticone($isdir, $fichier)
{
	if($isdir)
	{
		$img = 'folder.gif';
	}
	else
	{
		$extension= strtolower(substr( strrchr( $fichier, "." ), 1 ));
		if ($extension)
		{
			$img = $extension.'.gif';
		}
		else
		{
			$img = 'default.gif';
		}
	}
return $img;
}
Et plus loin
echo '<img src="templates/icones/'.Geticone(0, $name).'" alt="" width="20" height="20" />';
où $name contient le nom du fichier et le répertoire icones toutes les images (bmp.gif, doc.gif, xls.gif...)
en réponse à Kurt11, voici ce que j'avais essay' de faire, en premier lieux les fichier .ico ne fonctionnaient pas, j'ai changé pour les png.

à la fin de mon script de listing de fichier, j'ai rajouter
<img src='media/icone/".icone_ext('$dir_nom/$lien ')."'>


ce qui donne

echo "\t\t\t<li><img src='media/icone/".icone_ext('$dir_nom/$lien ')."'><a href=\"$dir_nom/$lien \">$lien</a></li>\n";
		}
 }


En fait maintenant, c'est l'icône par défaut qui s'affiche à chaque noms de fichiers.
voila tte ma page, ça sera peut être plus simple de comprendre..

Est-ce que ds la fonction je ne devrais pas changer $fichier, par une valeur qui vient du script de listing? genre $lien... je m'y perd un peu.

en tout cas merci pour votre aide, c'est sympa


<?php 
function icone_ext($fichier)
   {
   // icone par defaut si l'extention n'a pas d'icone
   $icone_defaut = "xls.png";   
      
   // tableau des nom d'icone par raport a l'extention
   $tab_icone = array("doc"=>"doc.png", "pdf"=>"pdf.png","xsl"=>"xsl.png"  );
                  
   // recupere extention sur le nom de fichier
   $tab_fichier = explode(".",$fichier);   
   $extention = $tab_fichier[count($tab_fichier)-1];
   
   // si l'extention est dans la liste
   if (array_key_exists($extention,$tab_icone))
      return $tab_icone[$extention];
      
   // si elle n'existe pas
   else return $icone_defaut;
}?>

<?php
$dir_nom = 'media/fichier'; // dossier listé (pour lister le répertoir courant : $dir_nom = '.'  --> ('point')
$dir = opendir($dir_nom) or die('Erreur de listage : le répertoire n\'existe pas'); // on ouvre le contenu du dossier courant
$fichier= array(); // on déclare le tableau contenant le nom des fichiers
$dossier= array(); // on déclare le tableau contenant le nom des dossiers

while($element = readdir($dir)) {
	if($element != '.' && $element != '..') {
		if (!is_dir($dir_nom.'/'.$element)) {$fichier[] = $element;}
		else {$dossier[] = $element;}
	}
}

closedir($dir);

if(!empty($dossier)) {
	sort($dossier); // pour le tri croissant, rsort() pour le tri décroissant
	echo "Liste des dossiers accessibles dans '$dir_nom' : \n\n";
	echo "\t\t<ul>\n";
		foreach($dossier as $lien){
			echo "\t\t\t<li><a href=\"$dir_nom/$lien \">$lien</a></li>\n";
		}
	echo "\t\t</ul>";
}

if(!empty($fichier)){
	sort($fichier);// pour le tri croissant, rsort() pour le tri décroissant
	echo "Liste des documents accessibles";
	echo "\t\t<ul>\n";
		foreach($fichier as $lien) {
			echo "\t\t\t<li><img src='media/icone/".icone_ext('$dir_nom/$lien ')."'><a href=\"$dir_nom/$lien \">$lien</a></li>\n";
		}
	echo "\t\t</ul>"; 
 }
?>
Tu n'as pas besoin des ' dans "ext_icone('$dir/$lien')".

edit : je crois bien que le souci vient de là en fait.
Modifié par kurt11 (10 Aug 2009 - 22:13)
bonjour, non en retirant les guillemets ça ne fonctionne tjs pas.
<img src='media/icone/".icone_ext($dir_nom/$lien)."'><a href=\"$dir_nom/$lien \">$lien</a></li>


l'icône par défaut est toujours affiché mais avec une erreur "Warning: Division by zero ",

je vais tester le code d'heyoan.

bonne journée
je viens d'essayer d'intégrer le code d'heyoan et ça fait exactement le même problème, affichage de l'icône par défaut sur tous les dossiers et une erreur "Warning: division by zero" Smiley sweatdrop


<?php function Geticone($isdir, $fichier) 
{ 
    if($isdir) 
    { 
        $img = 'dossier.png'; 
    } 
    else 
    { 
        $extension= strtolower(substr( strrchr( $fichier, "." ), 1 )); 
        if ($extension) 
        { 
            $img = $extension.'.png'; 
        } 
        else 
        { 
            $img = 'xls.png'; 
        } 
    } 
return $img; 
} ?>
<?php
$dir_nom = 'media/fichier'; // dossier listé (pour lister le répertoir courant : $dir_nom = '.'  --> ('point')
$dir = opendir($dir_nom) or die('Erreur de listage : le répertoire n\'existe pas'); // on ouvre le contenu du dossier courant
$fichier= array(); // on déclare le tableau contenant le nom des fichiers
$dossier= array(); // on déclare le tableau contenant le nom des dossiers

while($element = readdir($dir)) {
	if($element != '.' && $element != '..') {
		if (!is_dir($dir_nom.'/'.$element)) {$fichier[] = $element;}
		else {$dossier[] = $element;}
	}  }
closedir($dir);
if(!empty($fichier)){
	sort($fichier);// pour le tri croissant, rsort() pour le tri décroissant
	echo "Liste des documents accessibles";
	echo "\t\t<ul>\n";
		foreach($fichier as $lien) {
			echo "\t\t\t<li><img src='media/icone/".Geticone(0, $dir_nom/$lien)."'/>        <a href=\"$dir_nom/$lien \">$lien</a></li>\n";
		}
	echo "\t\t</ul>"; 
 }
?>