Bonjour à tous,
Je suis actuellement en stage en entreprise et je dois developper une appli web permettant de voir
les dossiers et les sous dossiers des clients et des employé (voir plus bas pour les explications)
et donc je voudrais un coup de main pour améliorer un script php que j'ai voici le script :
<?php function exploration_dossier($dossier_chemin)
{
echo "<ul>";
$dossier = opendir ($dossier_chemin);
while ($fichier_nom = readdir ($dossier)) {
if ($fichier_nom != "." && $fichier_nom != "..")
{
$fichier_chemin = $dossier_chemin.'/'.$fichier_nom;
echo "<li>$fichier_nom</li>";
if(filetype($fichier_chemin) == 'dir')
{
exploration_dossier($fichier_chemin);
}
}
}
closedir ($dossier);
echo "</ul>";
}
?>
//et je l'utilise comme ca :
<?php
exploration_dossier("/home/ftp"); ?> //avec plus declinaison du repertoire du style /home/ftp/*
ou /home/ftp/nom_utilisateur/client
Déjà j'ai un problème pour cette condition :
if(filetype($fichier_chemin) == 'dir')
{
exploration_dossier($fichier_chemin);
}
en gros si dans un dossier je n'ai pas de fichier il m'affiche un warning que voici :
warning filetype () Lstat failed for dossier_ou_est_contenu_mon_script
de plus un autre souci ergonomique (et oui etant en entreprise faut faire des jolis choses) se pose je m'explique
le programme fait ceci :
<pre>
->dossier1
*fic1
*fic2
*fic3
->dossier2
-->dossier4
-->dossier5
**fich1
**fich2
**fich3
->dossier3
-->dossier6
--->dossier7
***fichier1
***fichier2
->dossier8
</pre>
comprenez que si j'ai 30dossiers comprenant 10 sous dossiers et +50 fichiers l'arborescence dans ma page php
va faire 200kms
donc j'aimerai avoir un script javascript adapté à mon code php (quitte a faire quelque modif) pour pouvoir déroulé et enroulé les dossiers, le problème c'est que javascript ca fait de belle chose mais moi je ne sais pas faire,
donc si y a des personne pour m'aider à faire cette appli :-)
je les remercie d'avance :-)
Salut et bienvenue à toi !
Si tu souhaites te présenter / faire connaissance avec la communauté n'hésite pas à faire un petit tour dans la section "Présentations"
Citation :warning filetype () Lstat failed for dossier_ou_est_contenu_mon_script
En théorie, on se fiche des warnings.
Ensuite, concrètement ton truc doit permettre seulement de visualiser l'arborescence et/ou les fichiers ou il doit permettre des actions dessus aussi ?
Car s'il doit permettre à terme d'exploiter / agir sur les fichiers, autant utiliser un script de webftp plutôt que de tout recoder.
Sinon si tu n'as besoin que de choses basiques et que tu veux coder toi-même, donc, je te mets en pièce jointe ce que je pense que tu cherches pour le "menu déroulant".
J'avais récupéré ça il y a un moment en me disant que ça servirait sûrement un jour...
je ne veux pas faire d'action particulière juste que si j'ai bcp de dossiers et de sous dossier cela ne me fasse pas des pages a déroulé! donc je vais regarder ton script merci
Edit :
je viens de regarder ton code surtout la partie java script et en faite tu note en dur le nom des dossiers que tu veux
que se soit affiché or moi je ne connais pas le nom des dossiers à l'avance, je ne connais pas le nombre exact de dossier non plus donc ca va pas...
apres y a une ligne que je ne comprend pas :
onload="FP_preloadImgs(/*url*/'../../../../boutons/button9.gif', /*url*/'../../../../boutons/buttonA.gif')"
donc au chargement tu demandes de chargé /*url*/'../../../../ avc l'image button9 ok
mais ca : /*url*/'../../../../ concretement c'est quoi???
y a vraiment personne pour m'aider???
Salut Nell95,
Alors, tout d'abord, le code javascript n'est pas de moi.
Je te l'ai passé parce qu'il fait ce que tu cherches à faire. Après je ne peux pas te faire tout le boulot...
Ensuite je ne vois pas ce que tu appelles "en dur" : le fichier que je n'ai passé est un .html, évidemment que rien n'est dynamique !
Pour le fait que tu dises que tu ne connaitras pas les dossiers en avance, je ne vois pas pourquoi, il faut bien évidemment que tu sépares la récupération des données (c'est-à-dire tous les noms des répertoires etc... ) du traitement (mise en forme) et de la sortie (affichage).
Donc je te conseille de récupérer l'arborescence à l'aide de tableaux dynamiques imbriqués. Puis de générer le code HTML / Javascript adapté. Puis de l'afficher.
Après sinon tu peux aussi utiliser le principe des display:none;
Ou par exemple utiliser la librairie jQuery avec la fonction hide() :
http://docs.jquery.com/Hide
Tu crées par exemple pour chaque répertoire contenant des sous répertoire tu crées un div "conteneur" du contenu du répertoire, avec un identifiant unique. Tu mets en evènement "onclick" la fonction hide() de jQuery sur le div conteneur. Et ainsi de suite...
Si ce n'est pas très clair dis-moi ce que tu ne comprends pas et j'essaierai de détailler.
Troll a écrit :Pour le fait que tu dises que tu ne connaitras pas les dossiers en avance, je ne vois pas pourquoi, il faut bien évidemment que tu sépares la récupération des données (c'est-à-dire tous les noms des répertoires etc... ) du traitement (mise en forme) et de la sortie (affichage).
c'est justement la séparation des informations que j'arrive pas à faire...
c'est pour ca que je demande de l'aide...
parce que j'ai un programme php qui récupère les données (nom des répertoires etc) c'est comment l'incorporé dans ce que tu m'as données que j'arrive pas à faire...
quand je dis en dur : bah c'est que le nom est écrit à l'avance (donc en statique) moi j'ai besoin de dynamique
Troll a écrit :Donc je te conseille de récupérer l'arborescence à l'aide de tableaux dynamiques imbriqués. Puis de générer le code HTML / Javascript adapté. Puis de l'afficher.
Je veux bien mais on fait comment???
c'est là qu'est le problème je comprend tout ce que tu me dis, mais c'est la manière de faire que j'arrive pas
la programmation c'est pas mon fort, et les tableaux php j'ai du mal à m'en servir (et c'est pas faute d'avoir lu des trucs dessus...)
mais bon si j'arrive pas à faire tant pis je laisserai comme c'est...
Salut Nell95,
Le problème c'est que si tu génères à la volée (en même temps que tu récupère les données) c'est le gros bazar car faut d'abord que tu saches s'il y a des sous dossiers dans le dossier que tu parcours... Chose que tu ne sauras qu'une fois que tu auras fini le parcourir le dossier...
La structure de stockage des données que je te propose :
$data = array (
dossier_racine => array (
files = array (
fichier1,
fichier2,
fichier3,
...),
folders = array (
sousdossier1 = array( files = array(...), folders = array(...) ),
sousdossier2 = array( files = array(...), folders = array(...) ),
...
)
)
);
Voilà, et pour l'exploiter, en fait tu vas faire les fonctions comme suit :
Une fonction ExploreFolder() qui liste les fichiers d'un répertoire et les mets dans le tableau.
Dans cette fonction, tu vas vérifier à chaque entrée de la liste des objets contenus dans le répertoire si c'est un répertoire, auquel cas tu lance ExploreFolder dessus (utilisation récursive) etc...
Une fonction CreateFolderStructure(); qui renvoit la structure en tableau d'un dossier. Comme ca tu fais un code du genre :
function CreateFolderStructure() { ... }
function ExploreFolder($path) {
$data = CreateFolderStructure();
...
if (is_folder($objet)) {
$data['xxx']['folders'][$objet_name] = ExploreFolder($path);
}
...
}
Et tu n'auras qu'à lancer la fonction ExploreFolder sur le dossier racine pour obtenir toutes les données d'un coup (vu que c'est récursif) :
$arborescence = ExploreFolder('/racine');
Et hop $arborescence aura la structure décrite au début de mon post.
Ensuite tu n'as plus qu'à afficher à coup de for / foreach / while (à ta convenance).
Evidemment il faudra sûrement raffiner un peu.
Déjà merci pour cette ébauche, mais il y a une chose que je ne comprend pas très bien c'est concernant la structure tu met :
$data = array (
dossier_racine => array (
files = array (
fichier1,
fichier2,
fichier3,
...),
folders = array (
sousdossier1 = array( files = array(...), folders = array(...) ),
sousdossier2 = array( files = array(...), folders = array(...) ),
...
)
)
);
mais sousdossier1, sousdossier2 tu crées les dossiers mais y a encore le problème du fais que je ne sais pas combien il y aura de sous dossiers à l'avance...
ensuite dans ton 2eme bout de code function CreateFolderStructure() { ... } tu met quoi dans les pointillé? la structure que tu m'a donné au dessus?
et la partie la : if (is_folder($objet)) {
$data['xxx']['folders'][$objet_name] = ExploreFolder($path);
en gros si le fichier est un objet dans le tableau $data je me ??? le fichier et le nom de l'objet en gros : $data['xxx']['folders'][$objet_name] ca correspond à quoi?
et apres je vois pas comment l'intégrer au javascript...
je crois que je vais laisser tomber tant pis...
Désolé pour l'attente...
Citation :mais sousdossier1, sousdossier2 tu crées les dossiers mais y a encore le problème du fais que je ne sais pas combien il y aura de sous dossiers à l'avance...
Et alors ? En PHP les tableaux n'ont pas de taille statique.
La fonction CreateFolderStructure renvoit un tableau contenant la structure de base :
$data = array (
dossier_racine => array (
files = array (
fichier1,
fichier2,
fichier3,
...),
folders = array (
sousdossier1 = array( files = array(...), folders = array(...) ),
sousdossier2 = array( files = array(...), folders = array(...) ),
...
)
)
);
Je veux bien t'aider, mais le but c'est pas que j'écrive le script à ta place non plus...
Chaque dossier est un tableau qui contient une partie (clé) qui est un tableau contenant les fichiers de ce dossier et une autre partie (clé) qui est un tableau contenant les sous-dossiers de ce dossier.
Ces sous-dossiers étant eux-même des dossiers, ils auront la même structure que le dossier parent...et donc on réapplique la fonction d'exploration d'un dossier dessus.
Ca s'appelle la récursivité (on encapsule), si tu ne connais pas ça, je ne peux que te conseiller de te documenter sur la notion de récursivité (comme les suite récurrentes un peu).