Alphabetische Übersicht auf mehrere Listen verteilen

Es gibt ein Update zum Plugin Alpha List. Dort in den Kommentaren wurde gefragt:

an einer sache scheitere ich aber seitdem und bin mir nicht mal sicher, ob es momentan möglich ist.

ich würde gerne als endergebnis eine art tabelle haben (sprich bsp. a-j in spalte 1 j-s in spalte 2 und s-z in spalte 3. vllt. kannst du mich ja auf den rechten weg führen.

Meine Antwort:

Mit dem Firefox kann man jetzt schon CSS3 nutzen und der Liste die CSS-Anweisung .abc-list {-moz-column-count: 3;} verpassen.

war etwas unbefriedigend. Daher bin ich dem zweiten Lösungsansatz nachgegangen:

Man könnte dem Plugin noch weitere Parameter anfang und ende mitgeben, um dann drei Listen ausgeben zu lassen, die man mit float:left; nebeneinander positioniert.

Mit Hilfe der zwei neuen Parameter $start und $ende kann die Liste auf einen Teilbereich (z.B. Buchstaben A-G) beschränkt werden.

Eine Ausgabe der Liste in drei Spalten geht dann z.B. so:

<!--?php 
if ( function_exists ('alpha_postlist')) { 
  alpha_postlist(0,1,'A','G'); 
  alpha_postlist(0,1,'H','O'); 
  alpha_postlist(0,1,'P','Z'); 
} ?-->

Mit der CSS-Anweisung

.abc-list {float:left;width:150px;}

sind die drei Listen dann nebeneinander…

Download der neuesten Version

alpha-list04.zip

Das könnte Dich auch interessieren...

13 Antworten

  1. jan sagt:

    matthias, großartig. sehe es jetzt gerade und danke dir recht herzlich!!!

  2. jan sagt:

    ich teste es gerade und ist wirklich klasse. vielen dank.
    eine frage beschäftigt mich momentan aber noch. gibt es die möglichkeit, anstatt 1,2,3,4,5,6,7,8,9 jeweils einzeln ausgeben zu lassen, diese als # zusammenzufassen?

    vielen dank!

  3. Matthias sagt:

    Möglich ist das natürlich, aber erst beim nächsten Update 🙂

  4. Gerd sagt:

    Praktisch wäre es, wenn man die zu übergebenden Parameter direkt in den Seitentext schreiben könnte, statt die PHP-Sequenz hardcodiert ins Template schreiben zu müssen. Ich würde gerne pro Buchstabe eine eigene Seite haben (für ein Lexikon). Jetzt muss ich für jeden Buchstaben ein eigenes Template anlegen. Könnte man die Parameter direkt aus den Seitenformularen übergeben, würde ein einziges genügen.

    Man könnte dann z.B. einfach „[[listalpha: 12, true, A, B]]“ in das Formularfeld schreiben. Müsste eigentlich gehen, oder?

    Vielleicht hats du ja beim nächsten Update Lust und Zeit für sowas. 😉

  5. Matthias sagt:

    Möglich wäre das. Ich würde das auf den ersten Blick aber über in der URL übergebene Parameter lösen:

    /glossar?start=A&end=A

    Aufruf dann mit:

    alpha_postlist (12,true,$start,$end)

    Dann braucht man nicht 26 Seiten anlegen 🙂

  6. Gerd sagt:

    Und wie stellt man das an? Wenn ich im Backend eine Seite anlege mit dem Titel „A“, dann ist die URL http://www.example.org/lexikon/a/ Wie gebe ich der dann GET-Parameter mit? Abgesehen davon müsste die ja streng genommen erst validieren, bevor sie vom Script verwurstet werden. Oder überseh ich was?

  7. Gerd sagt:

    „Abgesehen davon müsste die ja streng genommen erst validieren,“ Die GET-Variablen meine ich, die müsste man erst prüfen, damit kein Unfug eingeschleust werden kann..

  8. Matthias sagt:

    Nein, eine Seite ‚lexikon‘ anlegen, die im Seitentemplate so etwas wie den folgenden Code enthält:

    $start=$_REQUEST['start'];
    $end=$_REQUEST['end'];
    if ( is_string($start) AND is_string($end) AND function_exists ('alpha_postlist')) { 
      alpha_postlist (0,false,$start[0],$end[0]);

    Aufruf mit lexikon/?start=A&end=A. Vielleicht reicht die Validierung so schon aus.

    Sicherheitshalber kann man noch

    if (preg_match("([A-Z0-9]+)",$start)) {...

    einbauen. Gerade getestet, scheint zu funktionieren 🙂

  9. Gerd sagt:

    Ja, ok. Aber wie rufe ich die Seiten dann auf? Ich kann ja keine Seiten mit querystring anlegen. Man müsste dann die GET-Variabeln jedesmal per Hand in die Adresszeile tippern. Oder?

  10. Matthias sagt:

    Nein, das ist ja gerade der Vorteil der beschriebenen Variante. Man kann auch die Links per Skript erzeugen. Die folgende Funktion gibt eine alphabetische Navigationsleiste aus (z.B. in der Plugin-Datei oder der functions.php des Theme definieren):

    function alpha_navi () {
      $startchr=48; // chr(48)=0
      $endchr=90; // chr(90)=Z
      echo '<ul class="abc-navi">';
      for ( $j=$startchr;$j<$endchr;$j++ ) {
        if ( preg_match('/^[a-z0-9]+$/iD', chr($j)) ) {
          echo '<li style="display: inline;"><a href="'
            .substr($_SERVER['REQUEST_URI'], 
            0,strpos($_SERVER['REQUEST_URI'], '?'))
            .'?start='.chr($j)
            .'&end='.chr($j).'">'.chr($j).'</a></li>;'."n";
        }
      }
      echo '</ul>';
    }

    Sie muss vor dem Code oben einmal aufgerufen werden:

    if ( function_exists ('alpha_navi') ) {
      alpha_navi();
    }
    $start=$_REQUEST['start'];
    ...

    So ungefähr dachte ich mir das 🙂

  11. Gerd sagt:

    Aaah jaa, jetzt versteh ich, auf was du hinaus willst. Clevere Idee, wenn auch der Codeschnipsel oben einen Syntaxerror bringt. Allerdings hat mein Vorschlag mit dem Hook in Einzelseiten für jeden Buchstaben den Vorteil, dass man auch mal eintragsschwache Buchstaben auf einer Seite zusammenfassen kann. Seite X-Z bspw.

  12. Matthias sagt:

    Syntaxfehler? Liegt vielleicht an dem von WordPress entstellten einfachen Anführungszeichen…

    Hook? Ok, ich denk‘ beim nächsten Update mal drüber nach 🙂

  1. 2. Oktober 2008

    […] Aufteilung in mehrere Teillisten ist seit Version 0.2 […]

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.