Lori: "glob" array aufsplitten

Hallo,
ich lese mittels "glob" den Inhalt von Dateien ein. Soweit alles ok. Ich möchte allerdings noch einbauen, dass nach (dem Inhalt von) jeweils 3 Dateien immer eine Trennung (z.B. mittels Linie) erfolgt. Also nach 3, nach 6, 9 Artikeln usw. Das muss natürlich dynamisch erfolgen, falls ich Dateien hinzufüge, muss natürlich die Trennung mit "springen".

<?php  
            $alle = glob('./content/*.php');  
            rsort($alle);  
  
            //Versuch  
            if(count($alle) % 3 == 0)  
            echo "----------------";  
            //Versuch Ende  
  
            foreach($alle as $datei)  
            include $datei;  
            ?>

Danke
Beste Grüße
Lori

  1. Dein Code für die Trennlinien muss natürlich mit in der Schleife stehen, außerdem wirst du mit count() nicht weit kommen, da das durchlaufen der Schleife nicht die Länge des Arrays verändert. Ich Würde auf eine normale for-Schleife zurückgreifen, dann hast du automatisch einen Zähler.

    1. Tach!

      Ich Würde auf eine normale for-Schleife zurückgreifen, dann hast du automatisch einen Zähler.

      Hat er mit foreach auch, denn in seinem Fall ist der Key eine fortlaufende Zahl.

      dedlfix.

      1. Danke für den Tipp. Leider klappt es auch innerhalb der Schleife (mit diesem Code) nicht. Die Test-Ausgabe "echo (count($datei)" bringt 7x eine "1" für entsprechend 7 Dateien, da müsste ich irgendwie anders zählen.. gut wäre eine Ausgabe 1234567, dann könnte ich die "3" abfragen.. theoretisch ..hmm

          
        <?php  
                    $alle = glob('./content/*.php');  
                    rsort($alle);  
          
                    foreach($alle as $datei)  
          
                    //Versuch  
                    if(count($datei) % 3 == 0)  
                    echo "----------------";  
                    //Versuch Ende  
          
                    include $datei;  
                    ?>]
        

        Beste Grüße
        Lori

        1. Tach!

          Danke für den Tipp.

          Du hast ihn nur nicht verstanden.

          Leider klappt es auch innerhalb der Schleife (mit diesem Code) nicht. Die Test-Ausgabe "echo (count($datei)" bringt 7x eine "1" für entsprechend 7 Dateien, da müsste ich irgendwie anders zählen..

          Die Gesamtanzahl, die du in der Schleife jedes Mal neu zählst, bleibt konstant. Du brauchst stattdessen einen fortlaufenden Zähler. Da der Array-Key bereits ein solcher ist, musst du ihn in der foreach-Schleife ebenfalls mit abfragen - also mit der foreach-Variante, die nicht nur den Wert sondern beides bereitstellt.

          dedlfix.

  2. Hello,

    ich lese mittels "glob" den Inhalt von Dateien ein.

    Das geht nicht. Mit glob() kannst Du nur den Inhalt eines Verzeichnisses auslesen, also die Namen der Dateien :-P

    Ich möchte allerdings noch einbauen, dass nach (dem Inhalt von) jeweils 3 Dateien immer eine Trennung (z.B. mittels Linie) erfolgt. Also nach 3, nach 6, 9 Artikeln usw.

    Das ist dann aber eine Aufgabe der Ausgabeeinheit und nicht einer Eingabeeinheit.

    Das muss natürlich dynamisch erfolgen, falls ich Dateien hinzufüge, muss natürlich die Trennung mit "springen".

    Du betreibst Stapelverarbeitung, wenn auch im Kleinen. Da "springt" nichtsd mehr, da immer mit gesicherten Zwischenergebnissen gearbeitet wird, die allerdings dann zum Zeitpunkt der Ausgabe schon wieder überholt sein könnten.

    Deine (Ausgabe-)Schleife könnte also den HTML-Code folendermaßen erzeugen:

    funktion make_glob_list($_globarray)
    {
        if (!is_array($_globarray)) return false;

    $html = "r\n<ul class="globlist">\r\n>";

    foreach($_globarray as $link)
        {
            $html .= '<li>' . htmlspecialchars(rawurlencode($link),ENT_QUOTES)) . "</li>\r\n";
        }

    $html .= "</ul>\r\n";

    return $html;
    }

    Und nun sollte noch trefflich über den Vorschlag diskutiert werden, denn da könnten nos so Sachen, wie Codierung (ASCII versa UTF), "schöner HTML-Code (Einzug des Blocks), leere Liste, usw. ins Spiel kommen.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://restaurant-zur-kleinen-kapelle.de
    1. Hello,

      und das Wichtigste fehlt ja noch: die Leerzeile oder Trennlinie.
      Die bauen wir dann schnell noch ein:

      funktion make_glob_list($_globarray, $lines=3)
      {
          if (!is_array($_globarray)) return false;

      $html = "r\n<ul class="globlist">\r\n>";

      foreach($_globarray as $link)
          {
              $line ++;
              $html .= '<li class="globlink">'
                    . htmlspecialchars(rawurlencode($link),ENT_QUOTES) . "</li>\r\n";

      if $(line % $lines == 0)
              {
              $html .= '<li class="globline"><hr></li>\r\n";
              }

      }

      $html .= "</ul>\r\n";

      return $html;
      }

      wie ein <li class="globline"><hr></li>\r\n" jetzt aussieht habe ich eben nicht ausprobiert.
      Alternativ solltest Du ohnehin besser ein <dir> anstelle eines <ul> benutzen. Da ist aber dann kein <hr> im Listitem (<li>) erlaubt.

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
       ☻_
      /▌
      / \ Nur selber lernen macht schlau
      http://restaurant-zur-kleinen-kapelle.de
      1. Hello,

        und das Wichtigste fehlt ja noch: die Leerzeile oder Trennlinie.
        Die bauen wir dann schnell noch ein:

        funktion make_glob_list($_globarray, $lines=3)
        {
            if (!is_array($_globarray)) return false;

        $html = "r\n<ul class="globlist">\r\n>";

        foreach($_globarray as $link)
            {
                $line ++;
                $html .= '<li class="globlink">'
                      . htmlspecialchars(rawurlencode($link),ENT_QUOTES) . "</li>\r\n";

        if $(line % $lines == 0)
                {
                $html .= '<li class="globline"><hr></li>\r\n";
                }

        }

        $html .= "</ul>\r\n";

        return $html;
        }

        wie ein <li class="globline"><hr></li>\r\n" jetzt aussieht habe ich eben nicht ausprobiert.
        Alternativ solltest Du ohnehin besser ein <dir> anstelle eines <ul> benutzen. Da ist aber dann kein <hr> im Listitem (<li>) erlaubt.

        Hallo Tom,

        ja du hast Recht, glob liest die Namen der Dateien aus. Durch "include $datei" bekomme ich aber den Inhalt der Dateien angezeigt. In den einzelnen Dateien steht jeweils 1 Artikel, und nach jeweils 3 ausgegebenen Artikeln soll eine Linie stehen [oder ein Umbruch auf die nächste Seite gemacht werden (das macht dann ein anderes Script)].

        Beste Grüße
        Lori

        1. Hello,

          Hallo Tom,

          ja du hast Recht, glob liest die Namen der Dateien aus. Durch "include $datei" bekomme ich aber den Inhalt der Dateien angezeigt. In den einzelnen Dateien steht jeweils 1 Artikel, und nach jeweils 3 ausgegebenen Artikeln soll eine Linie stehen [oder ein Umbruch auf die nächste Seite gemacht werden (das macht dann ein anderes Script)].

          Soll denn Inhalt der Dateien vom PHP-Parser ausgeführt werden? Woher kommen denn die Dateien? Da hat doch hoffentlich kein User seine Finger im Spiel?

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
           ☻_
          /▌
          / \ Nur selber lernen macht schlau
          http://restaurant-zur-kleinen-kapelle.de
          1. Soll denn Inhalt der Dateien vom PHP-Parser ausgeführt werden? Woher kommen denn die Dateien? Da hat doch hoffentlich kein User seine Finger im Spiel?

            Nein, die Dateien mit den Artikeln lege ich selbst an, es soll ein ganz einfaches "Flatfile"-Blogscript werden. Damit ich die Artikel aber nicht mehrmals schreiben muss (für index, jeweilige Kategorie oder jeweiliges Archivjahr) verteile ich die Artikel z.B so

            Inhalt einer Artikeldatei die eingelesen wird:

            <?php  
            if ($thisCategory=="Alle" or $thisCategory=="Buero" or $thisTitle=="Titel des Beitrages") { echo "  
              
                <div class=\"article\">  
                <p>Freitag, 17. März 2012, 21:33 Uhr</p>  
                <h4><a href=\"http://sub.example.de/blog/archiv/titel-des-beitrages.html\">Hier steht der Artikeltext<p>  
                <p>Kategorie: [<a href=\"http://http://sub.example.de/blog/buero.html\">Büro</a>]</p>  
                <hr class=\"underline\" />  
                </div>  
              
            "; }  
            ?>  
            
            

            und lese dann alle Artikel ein. In der index.html steht dann z.B. dieser Code:

            <?php  
                        $alle = glob('./content/*.php');  
                        rsort($alle);  
              
                        foreach($alle as $datei)  
              
                        //Versuch  
                        if(count($datei) % 3 == 0)  
                        echo "----------------";  
                        //Versuch Ende  
              
                        include $datei;  
                        ?>
            

            Klappt soweit super, allerdings fehlt mir der besagte Umbruch noch.