Ordner auslesen und Inhalt nebeneinander anzeigen lassen

fredolin

Erfahrenes Mitglied
#1
Moin, Moin

ich habe ein kleiners Problem, was mich aber schon eine gewisse Zeit nerv und ich keinen Anhaltspunkt finde, wie ich es umsetzen kann.

Folgendes: Ein Ordner in dem PDFs gespeichert werden möchte ich auslesen. Wenn ich den Inhalt habe, möchte ich, das dieser Inhalt dann untereinander sagen wir mal 10 Stück sind und dann automatisch recht oben neben den ersten wieder anfängt den Inhalt dazu stellen.

Das Auslesen das bekomme ich nun hin..
Bis hier hin komme ich:
PHP:
if($handle = opendir($dirpdf)){
                            while(false !== ($inhalt = readdir($handle))) {
                                if($inhalt != "." && $inhalt != ".." && $inhalt != "_notes") {
                                    $files[] = $inhalt;
                                    }
                                }
                            closedir($handle);
                            }
                           
                            $max = count($files);
                           
                            $pdf_info = pathinfo($dirpdf.'/'.$files);
                            echo '<pre>'.print_r($files).'</pre>';
                            $pdf_size = ceil(filesize($dirpdf.'/'.$files)/1024);
                            $pdf_name = $pdf_info['filename'];
                            $pdf_vollname    = $pdf_info['basename'];
                            $pdf_ext = $pdf_info['extension'];
                           
                            foreach ($files as $key => $value){
                                //echo '<p>'.$key.'</p><p>'.$value.'</p>';
                                                               
                                $pdf_inhalt = '<a id="'.$key.'" href="'.$dirpdf.'/'.$value.'" alt="'.$pdf_info['basename'].'" title="'.$pdf_info['basename'].'" class="list-group-item">
                                        <span class="badge">'.$pdf_size.'</span> '.$value.'</a>';
                               
                            }
                           
                            //echo "Anzahl im Array = " .$max;
                            //echo '<pre>'.print_r($files).'</pre>';
                            $maxrowssoll = 6; // Menge für Untereinander stehend
                            $maxcolssoll = 3; // Menge für Nebeneinander stehend
                           
                            $maxcolsgesamt = ceil($max / $maxrowssoll); // Berechnet hier wieviele nebeneinander passen
                            $arrayergebnis = 0;
                           
                            for ($maxcols = 1; $maxcols <= $maxcolsgesamt;  $maxcols++){
                                echo '<div class="col-xs-12 col-sm-4 col-md-4"><div class="list-group">';
                                for($maxrows = 1; $maxrows <= $maxrowssoll; $maxrows++){
                                    if($max >= 1) {
                                        echo $pdf_inhalt;
                                    }
                                    $max--;
                                    $arrayergebnis++;
                                }
                                echo '</div></div>';
                                if($maxcols %3 == 0) echo '<div style=\"clear:both;\"></div>';   
                            }
                    echo'
Zum Teil sieht es schon nicht schlecht aus. So soll es es aber aussehen und dann sollen alle PDF Dokument von 2004 bis 2018 in den Kästchen und die Größenangabe dazu stehen. Wo ist der Fehler?

Ich bedanke mich für Eure Mithilfe...
 

Anhänge

Sempervivum

Erfahrenes Mitglied
#2
Der Fehler liegt hier:
Code:
$pdf_info = pathinfo($dirpdf.'/'.$files);
und hier:
Code:
$pdf_size = ceil(filesize($dirpdf.'/'.$files)/1024);
Eigentlich sagt die Fehlermeldung alles: $files ist ein Array und Du versuchst, den Pfad zu der Datei mit diesem Array aufzubauen, indem Du dieses Array mit dem Verzeichnisnamen concatenierst.

BTW: Das Array mit den Dateinamen kannst Du viel einfacher mit der Funktion glob() ermitteln:
PHP:
$dirpdf = 'pdf';
$files = glob($dirpdf . "/*.pdf");
foreach ($files as $filename) {
    $pdf_size = ceil(filesize($filename)/1024);
    $filesizes[$filename] = $pdf_size;
}
var_dump($files);
var_dump($filesizes);
?>
 
Zuletzt bearbeitet:

fredolin

Erfahrenes Mitglied
#3
Moin Sempervivum,

erst mal danke schön für deine schnell Rückantwort..Mit dem was Du mir da gegeben hast, habe ich den Fehler beseitig, doch nun klappt es mit dem Layout nicht. Es soll ja maximal untereinander 6 stk. und dann da nach eine neue Reihe rechts daneben. Insgesamt 3 Reichen nebeneinander und dann geht es unterhalb der 1sten Reiche mit einer neuen weiter...

Wie bekomme ich das nun hin?
Und habe ich immer noch die Möglichkeit Infos wie basename, extension und Dateigrößen zu bekommen?
 

Sempervivum

Erfahrenes Mitglied
#4
Versuche dies:
PHP:
<?php
$dirpdf = 'pdf';
$files = glob($dirpdf . "/*.pdf");
$colsperrow = 3;
$itemspercol = 6;
$itemsperblock = $colsperrow * $itemspercol;
for ($i = 0; $i < count($files); $i++) {
    if ($i % $itemspercol == 0) echo '</div>';
    if ($i % $itemsperblock == 0) echo '</div>';
    if ($i % $itemsperblock == 0) echo '<div class="row">';
    if ($i % $itemspercol == 0) echo '<div class="col">';
    $filename = $files[$i];
    $pdf_size = ceil(filesize($filename) / 1024);
    $filesizes[$filename] = $pdf_size;
    $pdf_info = pathinfo($filename);
    $pdf_name = $pdf_info['filename'];
    $pdf_vollname = $pdf_info['basename'];
    $pdf_ext = $pdf_info['extension'];
    $pdf_inhalt = '<a id="item' . $i . '" href="' . $filename . '" alt="' . $pdf_vollname;
    $pdf_inhalt .= '" title="' . $pdf_vollname . '" class="list-group-item">';
    $pdf_inhalt .= '<span class="badge">' . $pdf_size . '</span> ' . $filename . '</a>';
    echo $pdf_inhalt;
}
echo '</div></div>';
?>
Aufteilung in Zeilen und Spalten sollte so sein, wie Du es beschrieben hast. $pdf_inhalt habe ich grob gesehen von dir übernommen. Die Klassen für die Gestaltung musst Du selbst hinzu fügen. Mir scheint, Du benutzt Bootstrap?
 
Zuletzt bearbeitet: