[RESOLU] Mettre en forme une arboresence de dossier

Eléphant du PHP | 418 Messages

26 nov. 2013, 20:13

Salutation à tous

J'ai un script qui me permet de lister un dossier et de lister les vidéos contenu dans chaque sous-dossier ou sur le dossier parent.

J'aimerais faire en sorte qu'on puisse mettre les dossier primaires en titre h3 et les autres dossier en titre h4
Du style:
Dossier primaire
  • Dossier secondaire 01
    • video01
      video02
    • Dossier tertiaire
      • video02
  • Dossier secondaire 02
...
...
Merci à vous

Cordialement

Voici le script que j'ai actuellement, qui fonctionne, mais qui ne reconnais pas la hiérarchie des dossiers
<?php
    function mkmap($dir){
        echo "<ul>";   
        $folder = opendir ($dir);
        $authextension = 'mp4';
        // on boucle le dossier
        while ($file = readdir ($folder)) {
            if ($file != "." && $file != "..") {
                $pathfile = $dir.'/'.$file;
                $extension=strrchr($file,'.');
                $extension=substr($extension,1) ;
                /*
                 * on vérifie l'extention du fichier
                 */
                // si il n'y en a pas, alors il s'agit d'un dossier
                if ($extension == $authextension) {
                    $namef=preg_replace("`(.+)\_Grafikart - Tutoriel `isU", "", $file);
                    echo '<li><a href="'.$pathfile.'" target="_blank">'.$namef.'</a></li>';
                // sinon c'est u fichier
                } else {
                    $namef=preg_replace("`(.+)\_`isU", "", $file);
                    echo '<li><h4>'.$namef.'<h4></li>'."\n"; 
                    if(filetype($pathfile) == 'dir'){            
                        mkmap($pathfile);
                    }
                }
            }
        }
        closedir ($folder);    
        echo "</ul>";
    }
?>

Eléphant du PHP | 418 Messages

26 nov. 2013, 20:32

Je refait un message d'une part pour signaler que j'ai refait l'exemple d’arborescence dans le sujet principale et d'autre part pour stipuler un option.

En effet, j'aimerais afficher l’icône du dossier si il y en a.

Par exemple, si j'ai un dossier php dans le quelle il y à un icône nommée icon.png, j'aimerais l'affichée à gauche du nom du dossier en question

Exemple:

Code : Tout sélectionner

<img src="icon.png" alt="" />Php
Merci à vous

Cordialement

Eléphant du PHP | 418 Messages

01 déc. 2013, 08:44

Help please

Thanks ^^

ViPHP
xTG
ViPHP | 7331 Messages

01 déc. 2013, 10:53

Il faudrait rajouter à ta fonction récursive(en paramètre) le niveau de profondeur du dossier sollicité.
Avec cette nouvelle information tu pourrais décider d'appliquer un h3 ou un h4.

Pour l'icône cela reste assez simple :
if( file_exists($pathfile . "/icon.png") )
  echo '<img src="" />';
:)

Eléphant du PHP | 418 Messages

03 déc. 2013, 09:02

Il faudrait rajouter à ta fonction récursive(en paramètre) le niveau de profondeur du dossier sollicité.
Avec cette nouvelle information tu pourrais décider d'appliquer un h3 ou un h4.
J'ai pensé à un système comme ça, mais je ne vois pas comment lui donner le niveau de profondeur afin de faire cel.

Comment puis-je m'y prendre.
Je demande un exemple, pas me le faire, j'ai besoin d'apprendre ^^

Merci beaucoup

Cordialement

ViPHP
xTG
ViPHP | 7331 Messages

03 déc. 2013, 12:21

function niveau($niveau)
{
  echo $niveau;
  niveau($niveau + 1);
}
niveau(0);
Attention ce code fait une boucle infinie, mais le principe que tu cherches est là. ;)

Eléphant du PHP | 418 Messages

08 déc. 2013, 15:59

Super ça fonctionne nikel

voici le code final, merci beaucoup

Cordialement
<?php
header('Content-Type: text/html; charset=iso-8859-1');
    function mkmap($dir,$niveau=1){
    global $adresse;
        echo "<ul>";
        $dossier=$_GET['s'];
        $folder = opendir ($dir);
        // on boucle le dossier
        while ($file = readdir ($folder)) {
            if ($file != "." && $file != "..") {
                $pathfile = $dir.'\\'.$file;
                // $urlFolder = str_replace("D:\\Videos\\", "", $pathfile);
                // $urlFolder = str_replace("\\", "/", $urlFolder);
                $adresseVideo = str_replace("D:\\Videos\\", "", $pathfile);
                $adresseVideo = str_replace("\\", "/", $adresseVideo);
                $urlFolder = $adresseVideo;
                $path = str_replace("\\", "/", $pathfile);
                $extension=strrchr($file,'.');
                $extension=substr($extension,1) ;
                $urlIcon = $adresse.$urlFolder.'/';
                $icon = 'icon.png';
                $image = file_exists($pathfile . "/icon.png") ? '<img style="width:18px;height:18px;" src="'.$urlIcon.'icon.png" />' : '';
                /*
                 * on vérifie l'extention du fichier
                 * on dois pouvoir vérifier des extentions pour les vidéos et les pdf et afficher un lien différent si il s'agit d'un pdf
                 */
                if ($extension=="mp4" || $extension=="mov" || $extension=="avi" || $extension=="mkv") {
                    $namef=preg_replace("`(.+)\_Grafikart - Tutoriel `isU", "", $file);
                    echo '<li><a href="index.php?s='.$dossier.'&v='.$adresseVideo.'">'.$namef.'</a></li>';
                } else if ($extension=="pdf") {
                    echo '<li><a href="index.php?s='.$dossier.'&pdf='.$adresseVideo.'">'.$file.'</a></li>';
                } else {
                    $namef=preg_replace("`(.+)\_`isU", "", $file);
                    $namef=str_replace("icon.png", "", $namef);
                    // on affiche l'icone si il y'en a
                    if ($niveau==1){
                        echo '<li><span class="titre">'.$image.' '.ucfirst($namef).'</span></li>';
                    }else if ($niveau==2){
                        echo '<li><span class="soustitre">'.$image.' '.ucfirst($namef).'</span></li>';
                    }
                    else{
                        echo '<li><span class="dossier">'.$image.' '.ucfirst($namef).'</span></li>';
                    }
                    if(filetype($pathfile) == 'dir'){            
                        mkmap($pathfile,$niveau+1);
                    }
                }
                // echo $url3.$url2.$url1;
            }
        }
        closedir ($folder);    
        echo "</ul>";
    }
?>