Arborescence tree php

Fermé
linda - 5 août 2009 à 12:28
 linda - 6 août 2009 à 17:23
Bonjour,
bonjour,
est ce que quelqu'un peut m'aider svp on faite je avec ce code j'affiche mon arborescence mais par exemple quand j'affiche les fichier sa m'affiche les extensions avec comment je peux faire pour ne pas afficher les extension et pour afficher les repertoire et les fichier par ordre merci



<script language="javascript">
function toggle(id,img, fin) //afficher sur un meme emplacement soit du texte soit une image
{var elmt = document.getElementById(id);
if(fin == 1)
{if(elmt.style.display == "none"){
elmt.style.display = "";
img.setAttribute("src", "./images/moinspetit.png");
}else
{elmt.style.display = "none";
img.setAttribute("src", "./images/pluspetit.png");
}}else
{if(elmt.style.display == "none"){
elmt.style.display = "";
img.setAttribute("src", "./images/moins.png");
}else{
elmt.style.display = "none";
img.setAttribute("src", "./images/plus.png");
}}}
</script>
</head>
</body>
<?php
$path = $_GET['path']; //chemin d'accès aux différents répertoires sur le serveur
$path = preg_replace('#((\.+\/+)*)#', '', $path); // on enleve les ./ ../ ..// .../ ...// .../// etc
$path = './'.$path;
$folders = explode("/", $path);
$i = '-1';
$hierar = '0';
$texte = '';
$vide = '';
function compte($chemin)
{
$i = '0';
if(is_dir($chemin))
{
$dir = opendir($chemin) or die("erreur");
while ($f = readdir($dir))
{
if($f != '.' && $f != '..')
//if(is_dir($chemin.$f))
$i++;
}
return $i;
}
else return 0;
}
function parcour($chemin, $videok)
{
$nombre = 0;
global $folders;
global $hierar;
global $vide;
$hierar++;
global $texte;
global $i;
$dir = opendir($chemin) or die("erreur");
while ($f = readdir($dir))
{
if($f != '.' && $f != '..')
{if(is_dir($chemin.$f)){
$nombre++;
$nombrefolder = compte($chemin.'/');
$nombresusfolder = compte($chemin.$f.'/');
if($nombrefolder == $nombre)
$vide[$hierar] = 1;
else
$vide[$hierar] = 0;
$i++;
if($hierar > '1'){
for($nb=1; $nb < $hierar; $nb++)
if($videok[$nb] == '1')
$texte .= '<img src="./images/vide.png" alt="" />';
else
$texte .= '<img src="./images/verti.png" alt="" />';
}
if($nombresusfolder == '0')
{
if($nombrefolder == $nombre)
$texte .= '<img src="./images/simplepetit.png" />';
else
$texte .= '<img src="./images/simple.png" />';
}els{
$texte .= '<img class="lien" onclick="javascript:toggle(\'dossier'.$i.'\', this, '.$vide[$hierar].');"';
if($nombrefolder == $nombre)
{
if($folders[$hierar] != $f)
$texte .= ' src="./images/pluspetit.png" alt="[+]" />';
else
$texte .= ' src="./images/moinspetit.png" alt="[-]" />';
}else {
if($folders[$hierar] != $f)
$texte .= ' src="./images/plus.png" alt="[+]" />';
else
$texte .= ' src="./images/moins.png" alt="[-]" />';
}
}
//AFFICHAGE DE LA LIGNE
$texte .= ' <img src="./images/mini_folder.png" /><a href="./tree.php?path='.$chemin.$f.'">'.$f.'</a><br />';
//FIN AFFICHAGE DE LA LIGNE
$texte .= '<div id="dossier'.$i.'"';
if($folders[$hierar] != $f)
$texte .= ' style="display: none;"';
else
$texte .= ' alt="[+]" ';
$texte .= ' />';
parcour($chemin.$f.'/', $vide);
$texte .= '</div>';
} else {
$nombre++;
$nombrefolder = compte($chemin.'/');
$nombresusfolder = compte($chemin.$f.'/');
if($nombrefolder == $nombre)
$vide[$hierar] = 1;
else
$vide[$hierar] = 0;
$i++;
if($hierar > '1')
{
for($nb=1; $nb < $hierar; $nb++)
if($videok[$nb] == '1')
$texte .= '<img src="./images/vide.png" alt="" />';
else
$texte .= '<img src="./images/verti.png" alt="" />';
}
if($nombresusfolder == '0')
{
if($nombrefolder == $nombre)
$texte .= '<img src="./images/simplepetit.png" />';
else
$texte .= '<img src="./images/simple.png" />';
}
//AFFICHAGE DE LA LIGNE

$texte .= ' <a href="'.$chemin.$f.'" target="right">'.$f.'</a><br />';
}}}
closedir($dir);
$hierar--;
return $texte;
}
sort($folders);
echo parcour("../", $vide);
?>
A voir également:

8 réponses

kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
5 août 2009 à 15:08
Bonjour,

Ca sent la mise à jour d'un script que tu n'as pas fait toi même ça ;)

C'est relativement simple, suffit de trouver la ligne qui affiche le nom de ton fichier, pour information ce doit être celle-ci :
$texte .= ' <a href="'.$chemin.$f.'" target="right">'.$f.'</a><br />'; 


Et d'ajouter un traitement sur la variable $f de manière a supprimer l'extension dans le nom avant de l'afficher.

Comment faire donc ?
Et bien un nom de fichier comporte des lettres et... le caractère '.' suivit de lettre pour l'extension.
Il te suffit donc de détecter le . et de supprimer tout ce qu'il vient derrière.

Donc tu remplacera la ligne de code en question par celles-ci (après avoir compris le truc bien sur)

Code :
$tmp = $f;
$tmp = substr($tmp,0,strpos($tmp,'.'));
$texte .= ' <a href="'.$chemin.$f.'" target="right">'.<gras>$tmp.'</gras></a><br />';


A toi de corriger si tu as des noms de fichier comportant plus d'un caractère '.', ce code est pour les cas les plus simples.
0
merci
j'ai modifier mais j'ai une erreure: Parse error: syntax error, unexpected '<' in listerdossier/tree.php on line 181
$texte .= ' <a href="'.$chemin.$f.'" target="right">'.$tmp.'</a><br/>';
0
Sa marche merci
encore une question comment je peus faire pour que mes fichier soit classés par ordre alphabitique j'ai utilisé rsort mais sa marche pas,
et aussi pour ne pas afficher le dossier qui contient le code.
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
6 août 2009 à 14:34
Re bonjour,

Pour trier par ordre alphabétique il va te falloir changer la manière dont ton code est fait, du moins ton analyse / parcours des fichiers.

Si tu souhaite trier, il faut d'abord avoir la liste des noms de fichier quelque part, dans un tableau par exemple.
Or ton programme ne liste jamais les fichiers, il les traite un à un au fur et à mesure qu'il les rencontre.

C'est cette manière de traiter les fichiers qu'il te faudra dans un premier temps changer : tu es dans un répertoire, tu liste les fichiers (de n'importe quel type, dossier ou fichier).
Tu trie ensuite cette liste via la fonction suivante :

Exemple :
$list = array("test","bidule","machin","machin1","machin12","machin21");
natcasesort(&$list);
// --- Ici ta liste sera trier humainement dans l'ordre alphabétique.


Pour mieux comprendre, je te conseille de lire ces deux pages :
https://forums.commentcamarche.net/forum/affich-2564512-php-listage-par-ordre-alphabetique#1
http://www.lephpfacile.com/manuel-php/function.natcasesort.php

Attention toutefois, il faut que tu sois en PHP4/PHP5 pour pouvoir utiliser la fonction 'natcasesort'.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mais dans ce cas la je pense qu'il faut connaitre les nom des fichiers??
0
en faite ce que je veux faire c'est une arborescence comme l'explorateur de windows qui sera mon arbre ou mon menu de navigation sur mon interface et je sais pas comment faire ça??
0
kij_82 Messages postés 4089 Date d'inscription jeudi 7 avril 2005 Statut Contributeur Dernière intervention 30 septembre 2013 857
6 août 2009 à 16:33
C'est pourtant assez simple niveau conception, tu as deux parties :
- a gauche, un menu de navigation : tu liste et présente un arbre (ce qui est déjà fait plus haut semble-t-il)
- a droite, le contenu d'un répertoire : tu liste et trie dans l'ordre alphabétique le contenu d'un répertoire et l'affiche.

Normalement tu as tout ce dont tu as besoin.

Après, le but d'un site d'entraide n'est pas de tout faire à la place des autres mais bien de donner des coups de pouce.
Déjà que le script que tu donne ci-dessus ne vient pas de toi (sinon tu saurais comment faire ce que tu demande), si en plus, lorsque je te donne des liens relatant de ton problème tu ne vois toujours pas comment faire, alors je te conseille fortement de revoir les bases du langage dans lequel tu évolues.

Demande c'est bien, mais attendre qu'on fasse tout à sa place c'est pas ce qu'il y a de mieux ;)
0
/avant je te remerci pour ton aides c'est gentil de ta part, j'ai demander de l'aide c'est vrais mais en aucun message j'avais demander de faire le travail à ma place, pour les liens j'ai regarder et j'essaye de faire ce que j'ai compris,
0