Accueil > Forum > > > > amélioration fonction / Tree View
amélioration fonction / Tree View
lundi 30 juillet 2007 à 10:22:54 |
amélioration fonction / Tree View

ThoMiNou
|
Bonjour,
J'ai récupéréi l n'y a pas longtemps un bout de code me permettant d'afficher l'aborescence d'un répertoire, jusque là tout vas bien. Le problème qui se pose c'est que :
1/ Le code n'est pas du tout optimisé 2/ Il ne permet d'afficher qu'un nombre limité de niveau. C'est à dire qu'au bout de 6 sous-répertoires cela ne fonctionne plus. Biensur on peut rajouter les niveaux à la main mais question pratique ce n'est pas le top.
Mes connaissances en PHP ne me permette pas de l'optimiser donc si il y a une bonne âme qui serait capable de faire ça.
Exemple du code sur 2 niveaux
[code]
<? function niv_0($chemin0) { global $tab_rep ; $tab_rep[]="/"; $rep_0=@opendir($chemin0); while($nomfichier=@readdir($rep_0)) { if ($nomfichier !="." && $nomfichier !="..")// pour eviter le premier { if(!is_file($chemin0 . "/" . $nomfichier)) { echo "<li id='foldheader'>$nomfichier </li>"; ?> <ul STYLE="margin-left: 1em" id="foldinglist" style="display:none" style=&{head};> <? $chemin1 = "$chemin0$nomfichier"; $tab_rep[] = $chemin1; niv_1($chemin1); echo"</ul>"; } }// de if ($nomfichier !="." pour eviter le premier }// de while($nomfichier //echo "</ul>"; closedir($rep_0); //-------------------------------------------- $rep_0=@opendir($chemin0); while($nomfichier=@readdir($rep_0)) { if ($nomfichier !="." && $nomfichier !="..")// pour eviter le premier { if(is_file($chemin0 . "/" . $nomfichier)) { $chemin = $chemin0; tri($chemin,$nomfichier, $tab_rep); } }// de if ($nomfichier !="." pour eviter le premier }// de while($nomfichier closedir($rep_0); echo "</ul>"; } //********************************************************************************* function niv_1($chemin1) { global $tab_rep ; $rep_1=@opendir($chemin1); while($nomfichier_1=@readdir($rep_1)) { if ($nomfichier_1 !="." && $nomfichier_1 !="..")// pour eviter le premier { if(!is_file($chemin1."/".$nomfichier_1)) { //$nb_indice = count($tab_rep); echo "<li id='foldheader'>$nomfichier_1 </li>"; //$indice++; ?> <ul STYLE="margin-left: 1em" id="foldinglist" style="display:none" style=&{head};> <? $chemin2 = "$chemin1/$nomfichier_1"; $tab_rep[] = $chemin2 ; niv_2($chemin2); echo"</ul>"; } } } @closedir($rep_1); //******************************************************************************* $rep_1=@opendir($chemin1); while($nomfichier_1=@readdir($rep_1)) { if ($nomfichier_1 !="." && $nomfichier_1 !="..")// pour eviter le premier { if(is_file($chemin1."/". $nomfichier_1)) { $chemin = $chemin1; $nomfichier = $nomfichier_1; tri($chemin,$nomfichier, $tab_rep); } }// de if ($nomfichier !="." pour eviter le premier }// de while($nomfichier */ @closedir($rep_1); } //********************************************************************************* function niv_2($chemin2) { global $tab_rep ; $rep_2=@opendir($chemin2); while($nomfichier_2=@readdir($rep_2)) { if ($nomfichier_2 !="." && $nomfichier_2 !="..")// pour eviter le premier { if(!is_file($chemin2."/".$nomfichier_2)) { //$nb_indice = count($tab_rep); echo "<li id='foldheader'>$nomfichier_2 </li>"; ?> <ul STYLE="margin-left: 1em" id="foldinglist" style="display:none" style=&{head};> <? $chemin3 = "$chemin2/$nomfichier_2"; $tab_rep[] = $chemin3 ; niv_3($chemin3); echo"</ul>"; } } } closedir($rep_2); //************************************************** $rep_2=@opendir($chemin2); while($nomfichier_2=@readdir($rep_2)) { if ($nomfichier_2 !="." && $nomfichier_2 !="..")// pour eviter le premier { if(is_file($chemin2."/". $nomfichier_2)) { $chemin = $chemin2; $nomfichier = $nomfichier_2; tri($chemin,$nomfichier, $tab_rep); } }// de if ($nomfichier !="." pour eviter le premier }// de while($nomfichier */ closedir($rep_2); }
[/code]
Merci de votre aide.
|
|
lundi 30 juillet 2007 à 12:06:18 |
Re : amélioration fonction / Tree View
|
lundi 30 juillet 2007 à 12:13:23 |
Re : amélioration fonction / Tree View

ThoMiNou
|
Non pas vraiment, comme je l'ai dit le code que j'ai mis est vraiment le résultat que je veux. Sauf que cette fonction n'est pas récurcive là est mon problème. 
Mais merci quand même.
|
|
lundi 30 juillet 2007 à 13:26:09 |
Re : amélioration fonction / Tree View

J_G
|
Réponse acceptée !
Salut,
C'est pas possible comme ça !!! Il faut faire une fonction récursive (qui descend automatiquement dans l'arborescence de répertoire). En plus c'est facile... Exemple:
<?php error_reporting(E_ALL | E_STRICT);
// Uniquement pour PHP4... Où la fonction scandir n'existe pas! if ( ! function_exists('scandir') ) { function scandir ( $dir ) { $dh = opendir($dir); $files = array(); while (false !== ($filename = readdir($dh))) { $files[] = $filename; } return $files; } }
// LA FONCTION RECURSIVE // Parcours un dossier et s'auto-appelle si trouve un sous-dossier function listdir ( $dir ) { // Parcours du dossier, pour trouver la liste de son contenu $files = scandir($dir); // Si vide, on laisse tomber if ( empty($files) ) return; // Ordonne les fichiers/sous-dossiers par ordre "naturel" natcasesort($files);
// Début de la liste echo '<ul>'; foreach ( $files as $file ) { // ne pas tenir compte de ces dossiers if ( $file == '.' or $file == '..' ) continue;
// nom complet du fichier trouvé $fullpath = "$dir/$file";
// Si répertoire if ( is_dir( $fullpath ) ) { echo '<li class="dir">'.$file; // appel recursif listdir ( $fullpath ); echo '</li>'; } // sinon, affichage simple else echo '<li class="file">'.$file.'</li>'; } echo '</ul>'; }
// TEST DE LA FONCTION
// Un peu de style echo <<<STYLE <style type="text/css"> li { list-style: none; } .dir { font-weight: bold; margin-top: 0.5em; margin-bottom: 0.5em; } .file { font-weight: normal; font-style: italic; font-size: smaller; } </style> STYLE;
// On teste le répertoire courant $dir = realpath(dirname(__FILE__)); // BOUM listdir($dir); exit;
A+
|
|
lundi 30 juillet 2007 à 14:34:18 |
Re : amélioration fonction / Tree View

ThoMiNou
|
Merci en bidoullant un peu avec mon script js ca devrait le faire. Bye. 
|
|
lundi 30 juillet 2007 à 14:47:31 |
Re : amélioration fonction / Tree View

ThoMiNou
|
Bon en fait c'est presque parfait sauf que la fonction m'affiche tout mes répertoire d'un coup et pas juste ce que je veux. Je vais cherché mais si quelqu'un à une idée qu'il fasse signe  .
|
|
lundi 30 juillet 2007 à 15:30:14 |
Re : amélioration fonction / Tree View

J_G
|
Et.... tu veux quoi ?
|
|
lundi 30 juillet 2007 à 15:51:43 |
Re : amélioration fonction / Tree View

ThoMiNou
|
Je veux comme une aborescence windows quand je click sur un répertoire il m'affiche les répertoires contenu dedan etc...
Ca c'est ma fonction js c'est peut-être la dedan qu'il faudrait changer quelque chose :
#-------------------------------------------------------------------------------------------------------#
var jav_combo var head="display:''" img1=new Image() img1.src="fold.gif" img2=new Image() img2.src="open.gif"
function change(){ if(!document.all) return if (event.srcElement.id=="foldheader") { var srcIndex = event.srcElement.sourceIndex var nested = document.all[srcIndex+1] if (nested.style.display=="none") { nested.style.display='' event.srcElement.style.listStyleImage="url(images/list_rep/open.gif)" } else { nested.style.display="none" event.srcElement.style.listStyleImage="url(images/list_rep/fold.gif)" } } } document.onclick=change;
#-------------------------------------------------------------------------------------------------------#
Et ici un bout de code de l'apelle de la fonction :
#-------------------------------------------------------------------------------------------------------#
<div id="treeview"> <UL STYLE="margin-left: 2em"> <!-- premier decalage --> <? echo "<LI ID='foldheader'>Projets</li>"; ?> <ul STYLE="margin-left: 1em" id="foldinglist" style="display:none" style=&{head};> <?
$dir = $_POST["montage"]; listdir($dir); ?>
<SCRIPT LANGUAGE="javascript"> jav_combo ="<?echo"$le_combo"?>"; parent.jav_combo = jav_combo; </SCRIPT> </div>
#-------------------------------------------------------------------------------------------------------#
Quandje click sur "Projet" il m'affiche tout d'un seul coup (normal vu la fonction), après certes je peux réduire l'aborescence mais je voudrais que ca le fasse dès le début.(désolé si je suis pas clair )
|
|
lundi 30 juillet 2007 à 17:23:10 |
Re : amélioration fonction / Tree View
|
lundi 30 juillet 2007 à 17:25:41 |
Re : amélioration fonction / Tree View

J_G
|
Salut,
Je n'ai pas lu ton code, mais juste fait une petite modif au mien pour inclure ta demande :
(Le même code sans commentaires)
function listdir ( $dir, $uid = '') { $files = scandir($dir); if ( empty($files) ) return; natcasesort($files);
echo '<ul id="'.$uid.'">'; foreach ( $files as $file ) { if ( $file == '.' or $file == '..' ) continue;
$fullpath = "$dir/$file";
if ( is_dir( $fullpath ) ) { $uid = uniqid(); echo '<li class="dir"><a href="javascript:open_close(\''.$uid.'\');">'.$file.'</a>'; listdir ( $fullpath, $uid ); echo '</li>'; } else echo '<li class="file">'.$file.'</li>'; } echo '</ul>'; }
echo <<<HTML <style type="text/css"> li ul { display:none; } </style> <script type="text/javascript"> function open_close( uid ) { var elt = document.getElementById( uid ); if ( !elt ) return;
if ( elt.style.display == 'block' ) elt.style.display = 'none'; else elt.style.display = 'block'; } </script> HTML;
$dir = realpath(dirname(__FILE__)); listdir($dir);
exit; ?>
Tu vois... C'est toujours aussi simple : j'ai fait ça en 5 min! Bon j'ai qques années de PHP derière moi bien sûr.
Mais c'est pourquoi je refuse de travailler sur tes sources, car il est de ton ressort de comprendre mon exemple et de l'adapter à ton pb.
A toi de jouer !
|
|
Cette discussion est classée dans : while, tab, rep, eviter, nomfichier
Répondre à ce message
Sujets en rapport avec ce message
tri tableau 2 dimensions [ par lebobby ]
Bonjour je voudrais savoir comment je pourrais faire pour trier ce tableau :$tab[0]=array("i"=>"23", "c" => "rge", "date" =>'2002-08-03 12:00:00');$ta
ODBC connection occupé [ par pascalcargouet ]
j'ai une connection ODBC pour attaque une base de type sql serveurMais j'ai une erreur à un moment de type "la connection est occupé avec des résultat
mkdir et droits [ par elanspeech ]
salut, dans ma page php, je fais la commande suivante : mkdir ("rep/", 0777); le repertoire est bien cree mais pas avec les bons droits.... j'obtiens
prob de newbie [ par LeManchot ]
bonjour, je debute en php, je mexcuse de poser une question qui doit vous paraitre trop conne mais ca fait 2 jours que javance pas. Voile Mon probleme
Problème pour trier des données [ par WRom1 ]
Bonjour à tous,J'ai un prb pour trier des données : je récupère le nom des fichiers d'un répertoire, et j'aimerai les classer par ordre alphabétique.
Créer un repertoire et modifier un script [ par ElGaunt ]
Bonjour à tous, Voila ci dessous un script dédié à autorier un visiteur à poster un commentaire. J'aimerais le modifier afin de pouvoir le mettre en p
pb actualisation ds tab [ par kinooo ]
J'ai utiliser des pseudo-frame (grace a un tableau) et mon menu et rechargé a chaque fois. comment fait on pour empecher la reactualistion de mon menu
passage d'un tableau dans l'url [ par jbardet ]
Bonjour,Je voudrais passer un tablo en parametre de mon url. J'ai trouvé des fonctions pour transformer mon tablo en string mais je dois encore faire
Eviter un proxy [ par Dionysos33 ]
Bonjour à tous,J'aimerais savoir s'il est possible de faire un page en php qui afficherait un autre site.Je m'explique : au boulot on a un proxy qui b
Chmod [ par RockmanX ]
Salut,j'ai un petit problèmevoici le code que j'utilise:$nomfichier = "tftsony.pdf";$chmod = "0664";chmod($nomfichier, $chmod);et voici l'erreur qu'on
Livres en rapport
|
Derniers Blogs
GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|