Mittwoch, 2. September 2009

PHP - Aufklappmenü für Ordner des Webservers

Auf meinem Webserver habe ich eine Ordnerstruktur. In den Ordnern liegen Dateien, die Besucher meiner Website herunterladen - oder im Fall von Bildern und PDF´s ansehen dürfen.
Nun habe ich im Netz nach einer Anzeige für die Ordner und Dateien gesucht, die ich in meine Website einbauen wollte.
Die Ordner sollten dabei auf- und zuklappbar sein, um die Übersicht zu behalten und damit es nicht eine riesige Liste wird.
Außerdem kommen immer mal wieder Ordner oder Dateien dazu. Es sollte also so sein, dass die Ordner und Dateien zur Laufzeit vom Webserver ausgelesen werden, damit ich nicht ständig das Aufklappmenü überarbeiten muss.

Leider habe ich nicht das richtige gefunden.

Also habe ich mir etwas zusammengebastelt, das ihr hier in Aktion sehen könnt.

Im Head der HTML-Datei:
<script language="javascript">
function init(){
}
var imagefolder = '.'; // hier bitte die URL zum image Ordner angeben

// name = ID des zu schließenden 'Dings' (div, tr, td, was auch immer)
// iconname = ID des zu ändernden Bildes
// prefix = 1. Teil vom Elementname
// num = Anzahl der Unterelemente in einem Ordner
function verstecken(ordner, prefix,iconname, num)
{
if (document.getElementById(ordner).style.overflow == 'visible')
{
document.getElementById(ordner).style.overflow = 'hidden';
document.getElementById(ordner).style.width = '240px';
document.getElementById(ordner).style.height = '30px';
} else {
document.getElementById(ordner).style.overflow = 'visible';
document.getElementById(ordner).style.width = 'auto';
document.getElementById(ordner).style.height = 'auto';
}
var name = '';
for (var i = 1; i <= num; i++) {
name = prefix + '-' + i;
if (document.getElementById(name).style.display == 'block') // Wenn es bereits geschlossen ist, dann öffnen wir es hier
{
document.getElementById(iconname).src = imagefolder + '/plus.gif'; // Wechseln des Bildes
document.getElementById(iconname).alt = '+'; // Wechseln des alt Tags
document.getElementById(name).style.display = 'none';
}else // Wenn sie geöffnet ist, dann schließen wir sie eben
{
document.getElementById(iconname).src = imagefolder + '/minus.gif'; // Wechseln des Bildes
document.getElementById(iconname).alt = '-'; // Wechseln des alt Tags
document.getElementById(name).style.display = 'block'; // Scließen
}
}
// return false;
}
</script>



Und hier der Inhalt der HTML-Datei:

<?PHP
function openOrdnerDateien($ordner) {
$handle = opendir($ordner);
$fileArray[] = "";
while ($file = readdir ($handle)) {
if($file{0} != '.' && $file{0} != '..') { //Versteckte Dateien nicht anzeigen
if(!is_dir($ordner.'/'.$file)) {
$fileArray[] = $file;
}
}
}
closedir($handle);
return $fileArray;
}
function openOrdnerUnterordner($ordner) {
$handle = opendir($ordner);
$i = 0;
$folderArray = array();
while ($file = readdir ($handle)) {
if($file{0} != '.' && $file{0} != '..') { //Versteckte Dateien nicht anzeigen
if(is_dir($ordner.'/'.$file)) {
$folderArray[$i][0] = $file;
$folderArray[$i][1] = date ("YmdHis", filemtime($ordner."/".$file));
$i++;
}
}
}
closedir($handle);
foreach($folderArray as $key => $array) {
$sortArray[$key] = $array[1];
}
array_multisort($sortArray, SORT_DESC, SORT_NUMERIC, $folderArray);
foreach ($folderArray as $fn) {
$ausgabe[] = $fn[0];
}

return $ausgabe;
}

$folderArray = openOrdnerUnterordner('.');
//Erst die Ordner ausgeben
if(isset($folderArray)) {
//asort($folderArray);
$count = 1;
foreach($folderArray as $row) {
$fileArray = openOrdnerDateien($row);
$num = sizeof($fileArray);
echo "<DIV id=Ordner".$count." style='height: 30px; width: 240px; overflow:hidden; border: 1px solid #000000; background-color: #F0F0F0'><a href=# onClick=\"return verstecken('Ordner".$count."','Text_".$count."','Icon_".$count."',".$num.");\"><img src=plus.gif border=0 alt=+ id=Icon_".$count." /> ".$row."</a>\n";
$intCount = 1;
foreach($fileArray as $line) {
$link = $row."/".$line;
$link = str_replace("ä","%E4", $link);
$link = str_replace("ö","%F6", $link);
$link = str_replace("ü","%FC", $link);
$link = str_replace("ß","%DF", $link);

echo "<DIV style='display:none' id=Text_".$count."-".$intCount."><a href='".$link."' target=_blank>".$line."</a></DIV><br>\n";
$intCount++;
}
echo "</DIV><p>\n";
$count++;
}
}
?>

Keine Kommentare:

Kommentar veröffentlichen