IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[PHP-JS] Arborescence : remonter d'un répertoire


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut [PHP-JS] Arborescence : remonter d'un répertoire
    Bonjour a tous
    voici ma situation, j'ai un répertoire nommé Bibliotheque (D:\Bibliotheque\)
    cette bibliotheque contient une multitude de sous-répertoires et chacun contient des sous-répertoire ainsi de suite, le niveau de profondeur n'est pas définit
    Je me suis fait une fonction récursive qui affiche toute l'arborescence d'une sous-répertoire (ex: D:\Bibliotheque\Assureur\) le sous répertoire est assureur, ma récursive affiche l'arborescence de sous-dossier.

    Le but visé étant d'aller rapidement au dossier dans lequel on veut ajouter un document...

    Le client me demande la suivante, il voudrait que, lorsqu'il est dans un sous-répertoire (ex: D:\Bibliotheque\Assureur\Niv1\Niv2\Niv3\Niv4\) dans le Niv4 d'avoir un bouton qui le ferait remonter dans le niveau 3...rendu là un bouton dans le niveau2....

    LE probleme est que c'est dynamique et c'est dans la meme page il me faut un moyen de remonter et de mettre dans le bouton le dossier dans lequelle il veut aller, soit le niveau avant...complexe un peu à mon avis

    Ce que j'ai fait jusqu'a maintenant: Je fais afficher le chemin d'accès dans lequel il se trouve, afin que ce soit un peu plus facile de voir visuellement notre location... La solution qui me parrait la plus évidente est de mettre un lien sur chaque sous-niveau ainsi il peut, une fois enfoncé un 6e niveau, aller directement au niveau 3 sans avoir à retourner à la racine (Bibliotheque) comme c'est le cas actuellement.

    Je ne sais pas trop comment faire le tout par contre...j'en arrache un peu...je vous demande si vous avez déjà été confronté a une situation pareil et si c'est le cas, la manière dont vous vous en êtes tiré...
    De plus, est-ce que ma logique est bonne de vouloir faire cela ainsi?

    Ce que j'ai à ma disposition:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    $_SESSION['path_dir'] //Qui est le path absolu dans lequel on se situe
     
    //Une fonction javascript pour le changement de page
    <script type="text/javascript" language="javascript">
    /*
    @param url: la page vers laquelle on se dirige
    @param dossier: le répertoire vers lequel on veut se diriger
    */
    function changePage(url,dossier){
    	alert(dossier);
    	document.frmListingBibliotheque.txtFolder.value = dossier;
    	document.frmListingBibliotheque.action = url;
    	document.frmListingBibliotheque.submit();
     
    }
    </script>
    Question ou interrogation ou besoin d'autre code demandé
    merci pour l'aide

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Ce que j'ai fait jusqu'a maintenant: Je fais afficher le chemin d'accès dans lequel il se trouve, afin que ce soit un peu plus facile de voir visuellement notre location... La solution qui me parrait la plus évidente est de mettre un lien sur chaque sous-niveau ainsi il peut, une fois enfoncé un 6e niveau, aller directement au niveau 3 sans avoir à retourner à la racine (Bibliotheque) comme c'est le cas actuellement.
    C'est une très bonne solution.

    Maintenant je n'ai pas compris le code posté. En fait si tu connais le chemin courant, par exemple /dossier1/toto/.

    Tu peux faire quelque chose comme cela.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    <?php
    $cheminCourant = "/dossier1/toto/";
    $navigation = "";
    $cheminTemporaire = "";
     
    foreach( split("/",$cheminCourant) as $index => $dossier )
    {
    	if( $dossier != "")
    	{
    		$cheminTemporaire .= "/".$dossier;
    		$navigation .= "<a href='toto.php?dossier=".$cheminTemporaire."'>".$dossier."</a> | ";
    	}
    }
    $navigation = substr($navigation,0,strlen($navigation)-3);
    echo $navigation;
     
    ?>
    bye

  3. #3
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Vite fait, j'ai pas le temps de développer et je ne sais pas si ça te conviendrais, mais je ferais bien un objet $objNav.

    Alimenté par ta fonction récursive à chaque changement de dossier.

    La classe de cette objet aurait une propriété "Niveaux" de type tableau.

    Avec une méthode AjouterNiveau lorsque tu changes de dossier, qui alimente le tableau des niveaux avec en clé le niveau ( 0 pour la racine ) et en valeur le path.

    Ensuite une méthode AfficherNiveau ou Atteindre niveau, au choix, prenant en paramètre le niveau voulu et retournant le path correspondant.

    Pour pouvoir faire du déplacement relatif, tu ajoutes une propriété NiveauActuel, remise à jour à chaque changement de dossier.

    Ainsi, tu peux faire $objNiveaux->AtteindreNiveauRelatif(-1).

    Ou un truc dans le genre...

    C'est générique et un peu fouillis, je n'ai jamais implémenté ce truc, mais cette inspiration qui me vient me plait bien. Je crois que j'essaierais un jour.
    So good to be me !

  4. #4
    Membre éprouvé
    Avatar de ozzmax
    Inscrit en
    Novembre 2005
    Messages
    977
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Novembre 2005
    Messages : 977
    Points : 959
    Points
    959
    Par défaut
    Merci pour les réponses et les idées
    j'ai réussi avec ce que je pensais etre la solution la plus logique
    en fait ca fonctionne tres bien aussi
    je vous laisse un peu de code si ya des intéressé ou si vous etes curieux
    bonne journée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    ....
     
    else if(isset($_POST['txtFolder'],$_GET['arbo']) && $_SESSION['pageProvenance'] == "listingBibliotheque.php" && $_GET['arbo'] == "back"){
    //Si on a appuyé sur un lien de retour en arrière	
    	$tmp = explode('/',$_SESSION['path_dir']);
    	$path = "";
    	$c = 0;
    	$out = false;
    //Parcrourir la session pour savoir c'est quel dossier cliqué
    	while($c < (count($tmp)-1) && $out == false){
    		$path .= $tmp[$c].'/';
    		if($tmp[$c] == $_POST['txtFolder']){
    			$out = true; //Trouvé, on sort de la boucle
    		}
    		$c++;
    	}
    //une fois trouvé on modifie la variable de session pour le reste de l'affichage
    	$_SESSION['path_dir'] = $path;
    	$dossier = $_POST['txtFolder'];
    }
     
    //Chemin d'accès avec des liens sur les dossiers, appel la meme page
    $actualRep = "/";
    for($c = 1;$c < (count($tmp)-2); $c++){
    	$actualRep .= '<a href="#" class="subF" title="Aller au dossier '.$tmp[$c].'" onclick="changePage(\'optionBibliothequeSuite.php?arbo=back\',\''.$tmp[$c].'\')";>'.$tmp[$c].'/'.'</a>';  
    }
    //Dernier répertoire, soit, celui actuel est en caractère gras
    $actualRep .= '<b>'.$tmp[(count($tmp)-2)].'</b>/'; 
    ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/07/2013, 15h36
  2. [PHP-JS] arborescence des dossiers
    Par hacksi dans le forum Langage
    Réponses: 4
    Dernier message: 12/06/2008, 09h09
  3. Arborescence des fichiers et répertoires d'un disque dur
    Par bennyben77 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 30/05/2008, 10h59
  4. [XSL include]chemin relatif qui remonte d'un répertoire
    Par snoop dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 05/09/2007, 23h05
  5. dispatcher des fichiers dans l'arborescence sans ecraser les répertoires (tar?)
    Par elbronziero dans le forum Administration système
    Réponses: 3
    Dernier message: 17/03/2007, 15h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo