Autor Zpráva
MartinW
Profil *
Ahoj,

používám skript, který vypisuje složky, podsložky a soubory do struktury stromu. Všechno funguje perfektně, ale problém je v tom, že výsledný výpis nemá položky seřazené podle názvu.

Měl bych tedy první loop vložit do pole a poté srovnat pomocí sort();.
Soubory v poli mám, a tak ty srovnat dokážu.

Ale nezvládnu dát do pole první složky tak, aby všechny funkce fungovaly.

Prosím, pomůže mi s tím někdo zkušenější?

    function createDir($path = '/home/www/mydomain/www/') {

      if ($handle = opendir($path)) {
        echo "<ul>";
        $queue = array();     
        // pole pro slozky bych mel pridat sem… napr. $slozky = array();        
        while (false !== ($file = readdir($handle))) {
          if (is_dir($path.$file) && $file != '.' && $file !='..') {    
            // a pak pridat sem $slozky[] = ……. ale kam pak dat printSubDir?
            printSubDir($file, $path, $queue);
            }
          else if ($file != '.' && $file !='..') {
            $queue[] = $file;
            }
          }
        printQueue($queue, $path);
            echo "</ul>";
        }
      }
    
    function printQueue($queue, $path) {
      asort($queue);  // Pridanim tohoto jsou srovnane soubory a podslozky
      foreach ($queue as $file) {
        printFile($file, $path);
        }
      }
    
    function printFile($file, $path) {
      echo "<li><a href=\"".$path.$file."\">$file</a></li>";
      }
    
    function printSubDir($dir, $path) {
      echo "<li><span class=\"toggle\">$dir</span>";
      createDir($path.$dir."/");
      echo "</li>";
      }
    
    createDir();

Dekuju moc, Martin
Keeehi
Profil
Doufám že nevadí, že jsem to celé přepsal.
function printTreeStructure($path)
{
    echo "<ul>\n";
    $items = scandir($path);

    foreach ($items as $item) {
        if (in_array($item, ['.', '..'], true)) {
            continue;
        } 
        
        if (is_dir($path.'/'.$item)) {
            echo "<li><span class=\"toggle\">$path/$item</span></li>\n";
            printTreeStructure($path.'/'.$item);
        } else {
            echo "<li><a href=\"$path/$item\">$item</a></li>\n";
        }
    }

    echo "</ul>\n";
}

printTreeStructure(__DIR__);

Pokud bys to chtěl mít s preferencí nejdříve složky seřazeně a pak až teprve soubory seřazeně, tak na řádek 5 přidej
    usort($items, function ($a, $b) use ($path) {
        if(is_dir($path.'/'.$a)) {
            if(is_dir($path.'/'.$b)) {
                return $a <=> $b;
            } else {
                return -1;
            }
        } else {
            if(is_dir($path.'/'.$b)) {
                return 1;
            } else {
                return $a <=> $b;
            }
        }
    });
MartinW
Profil *
Keeehi:
:-D to opravdu nevadi, ze jsi to cele prepsal - Tvoje verze je dokonala a funguje naprosto perfektne.
Navic je pro me mnohem jednodussi pro pochopeni a pripadne upravy. Dokonce se v tom vyznam i ja, ktery PHP resi pouze vyjimecne.

Hluboce se klanim a velice dekuji za pomoc! :-)
lionel messi
Profil
MartinW:

Alternatívou k vlastnej funkcii môže byť použitie vstavaných tried RecursiveDirectoryIterator a RecursiveIteratorIterator.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0