Thomas: Dateien sortieren, mit link wiedergeben und bei Klick im Zielframe anzeigen

problematische Seite

Hallo,

ich habe leider keine Ahnung von php, hatte aber für die Homepage meiner Schule einen kleinen Code zusammengesucht, der soweit auch funktioniert.

Vertretungspläne

Hierbei werden die Dateien eines Verzeichnisses aufgelistet und mit Hyperlinks versehen. Beim Anklicken werden diese im Zielframe angezeigt.

    <?php
    $verzeichnis = "./vertretungsplaene/";
    $inhalt = scandir($verzeichnis);
         foreach ($inhalt as $datei)
           {if($datei != "." and $datei != "..")
             {echo "<h1><a href=\"".$verzeichnis."/".$datei."\" target=\"vertretungsplaene\">".$datei."</a><br>\n";}
           }
    ?>

Nun hätte ich gerne noch, dass die angezeigten Dateien nach Datum sortiert werden.

Ist das ohne viel Umstände möglich?

  1. problematische Seite

    Hallo Thomas,

    Ist das ohne viel Umstände möglich?

    Kommt darauf an.™

    filemtime liefert dir den Zeitpunkt der letzten Änderung. Dann könntest du die Ausgabe in einer sortierbaren Tabelle vornehmen und die Spalte mit dem timestamp über CSS ausblenden.

    Zugegeben, es ist ein bisschen von hinten durch die Brust ins Auge.

    Bis demnächst
    Matthias

    --
    Du kannst das Projekt SELFHTML unterstützen,
    indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.
  2. problematische Seite

    @@Thomas

    Vertretungspläne

    Willst du uns noch die Zugangsdaten dafür verraten?

    Von deinem Sortierungsproblem abgesehen ist dein HTML nicht in Ordnung. h1 sollte nur einmal auf einer Webseite vorkommen und den Seitentitel angeben, also nicht in einer Schleife mehrmals generiert werden.

    Für die Auflistung der Pläne bietet sich eine Liste an. (Wer hätte das gedacht?) Die Frage nach der Sortierung legt nahe, dass es eine geordnete ist: ol.

    Markup sollte nicht mit PHP echo generiert werden. Nicht HTML in PHP schachteln, sondern PHP in HTML – mit der alternativen Syntax für Kontrollstrukturen.

    So gut wie alle Ausgaben müssen mit htmlspecialchars() behandelt werden.

    Dein Code sollte so aussehen:

    <?php
      $verzeichnis = './vertretungsplaene/';
      $inhalt = scandir($verzeichnis);
    ?>
    <h1>Vertretungspläne</h1>
    <ol>
    <?php foreach ($inhalt as $datei): ?>
      <?php if($datei != '.' and $datei != '..'): ?>
        <li>
          <a href="<?= htmlspecialchars($verzeichnis) ?>/<?= htmlspecialchars($datei) ?>" target="vertretungsplaene">
            <?= htmlspecialchars($datei) ?>
          </a>
        </li>
      <?php endif; ?>
    <?php endforeach; ?>
    </ol>
    

    <?= ist die Kurzform für <?php echo, was du natürlich auch schreiben kannst.

    😷 LLAP

    --
    „Sag mir, wie Du Deine Maske trägst, und ich sage Dir, ob Du ein Idiot bist.“ —@Ann_Waeltin
    1. problematische Seite

      Hallo Gunnar Bittersmann,

      @@Thomas

      Vertretungspläne

      Willst du uns noch die Zugangsdaten dafür verraten?

      Das solltest du nicht tun, @Thomas. Vertretungspläne enthalten persönliche Daten (auch durch Nichtnennung) und sollen deshalb nicht veröffentlicht werden.

      Bis demnächst
      Matthias

      --
      Du kannst das Projekt SELFHTML unterstützen,
      indem du bei Amazon-Einkäufen Amazon smile (Was ist das?) nutzt.
      1. problematische Seite

        Willst du uns noch die Zugangsdaten dafür verraten?

        Das solltest du nicht tun, @Thomas.

        Natürlich nicht. Ich hoffe doch, Thomas hat die Frage so verstanden wie sie gemeint war: Welchen Sinn macht es, hier eine Webseite zu verlinken, die niemand sehen kann?

        Oder ist sich Thomas gar nicht bewusst, dass wir sie nicht sehen können und auch nicht sehen können sollten?

        Die nächste Frage ist dann: Wäre es möglich, die (bzw. eine entsprechende) Seite mit Testdaten zu zeigen?

        😷 LLAP

        --
        „Sag mir, wie Du Deine Maske trägst, und ich sage Dir, ob Du ein Idiot bist.“ —@Ann_Waeltin
    2. problematische Seite

      Vielen Dank für die Mühe.

      wie gesagt, ich habe bislang überhaupt keine Ahnung von PHP und nur ansatzweise etwas HTML und CSS. Angefangen hab ich mit Magix Web Designer. Dadurch, dass ich aber einiges mehr wollte (z.B. ein Akkordion), hatte ich begonnen mit HTML rumzutüfteln.

      Ich habe den Code entsprechend korrigiert. h1 hatte ich auch nur genommen, weil ich sonst ständig (trotz <font size=...> </font> ) eine sehr kleine Schrift hatte. Irgendwie hab ich das nun gelöst.

      Aber, um das Sortieren hinzubekommen, müsste ich wohl erstmal einen ordentlichen Programmierkurs belegen. Also werd ich die einfachste Variante wählen und meiner Cheffin sagen, sie solle die Dateien im Format yyyy-mm-dd speichern. So sind sie zumindest chronologisch sortiert, auch wenn andersherum besser wäre.

      Sicherlich ist mir klar, dass ich die Zugangsdaten nicht verraten darf. Es sei denn, hier ist jemand ein Elternteil eines unserer Schüler.

      Vielen Dank also noch einmal für eure Mühe. Ich bewundere euer Know How und vor allem euer Engagement hier im Forum.

      1. problematische Seite

        Hallo Thomas,

        erstmal einen ordentlichen Programmierkurs belegen

        Kann nie schaden, aber unterschätze den Zeitaufwand nicht. Und beachte, dass eine aktive Seite im Web mindestens 3 Sprachen braucht: HTML, CSS und PHP. JavaScript und SQL sind optional, aber sobald Du über Dateien hinausgehst und eine Datenbank bestücken willst, brauchst Du auch SQL.

        Rolf

        --
        sumpsi - posui - obstruxi
  3. problematische Seite

    @@Thomas

    ich habe leider keine Ahnung von php

    (Nicht nur) dann ist die PHP-Doku was für dich. In dem Fall die Beschreibung von scandir().

    Nun hätte ich gerne noch, dass die angezeigten Dateien nach Datum sortiert werden.

    Schau dir da mal den Kommentar von Stan P. van de Burgt an.

    😷 LLAP

    --
    „Sag mir, wie Du Deine Maske trägst, und ich sage Dir, ob Du ein Idiot bist.“ —@Ann_Waeltin
    1. problematische Seite

      Hallo,

      In dem Fall die Beschreibung von scandir().

      kannte ich noch nicht, aber ich kann da auch keinen Mehrwert gegenüber glob() erkennen. Eine Sortierung nach einem anderen Kriterium als dem Namen bietet weder glob() noch scandir().

      Nun hätte ich gerne noch, dass die angezeigten Dateien nach Datum sortiert werden.

      Man müsste also in beiden Fällen die gefundenen Einträge durchgehen und nach ihrem Timestamp umsortieren. Das heißt, erstmal für jeden Eintrag den Timestamp ermitteln.

      Schau dir da mal den Kommentar von Stan P. van de Burgt an.

      Sag ich doch. 😉

      Live long and pros healthy,
       Martin

      --
      Paradox: Wieso heißen die Dinger Kühlkörper, obwohl sie höllisch heiß werden?