Inhaltsverzeichnis A-Z mit Links

Ich hatte im ersten Ansatz die Funktion drupal_get_path_alias($node) verwendet, noch g’wandter aber gehts mit url($node). Da die gesamte Inhaltsverzeichnis-Funktion nicht besonders kompliziert ist, hier mal der komplette Code:

function ivz_kompakt(){
    
    $alfa = array(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z);
    foreach ($alfa as $akt_buchstabe){
    
            $buchstabe = $akt_buchstabe;
            
            $anzahl = db_query("SELECT nid, title, type, status from node where title like '".$buchstabe."%' order by title");
            $records = $anzahl->fetchAll();
            $gefunden = count($records);
            
            if ($gefunden == 1) {
            echo "<h2>".strtoupper($buchstabe)." ".$gefunden." Rezept</h2><br>";
            }
            
            if ($gefunden > 1) {
            echo "<h2>".strtoupper($buchstabe)." ".$gefunden." Rezepte</h2><br>";    
            }
            
            if ($gefunden > 0){
                        
                foreach ($records as $record) {
            
                      $akt_id = $record->nid;
                      //echo $record->title."<br>";
                      $url = url('node/' . $akt_id);
                      //echo $url."<br>";
                      echo "<a href = '".$url."'>".$record->title."</a><br>";
                                        
                } //end foreach
            } // end gefunden > 0
    }    // end alfa
    
} //end function ivz_kompakt

Was hab ich gemacht? Ich bastel mir zuerst mal ein Array mit allen Buchstaben des Alfabets. Durch dieses Array steppe ich mit einem foreach durch, und der aktuelle Buchstabe kommt jeweils in unsere Query, und mit count() wird die Anzahl der gefundenen Datnsätze abgefragt:

 $anzahl = db_query("SELECT nid, title, type, status from node where title like '".$buchstabe."%' order by title");
$records = $anzahl->fetchAll();
            $gefunden = count($records);

Dann frage ich mit if ab, ob einer oder mehr als ein Artikel gefunden wurde und gebe dementsprechend aus „1 Rezept“ oder „X Rezepte“.
Wenn ich mehr als 0 Beiträge mit meiner Query gefunden habe, steppe ich durch diese wieder mit einem foreach durch. Ich hole mir mit der nid aus der Query die URL des aktuellen Beitrags:

$akt_id = $record->nid;
$url = url('node/' . $akt_id);

Und bastle mir daraus den Link zum Rezept.

echo "<a href = '".$url."'>".$record->title."</a><br>";

Das wars! Ich hab jetzt mal in der Query noch nicht die Einschränkung auf Where status=1 und type = blog gemacht, weil ich ein bisschen Material zum Ausgeben haben wollte und so einfach alle Nodes alfabetisch ausgebe, die Where-Klausel kann sich jeder selber anpassen. Mein Output sieht ganz sauber so aus:

ivz_kompakt
ivz_kompakt

Schicke Sache, nicht wahr? Das ist 1:1 mein Inhaltsverzeichnis wie im Original-Inselfisch-Kochbuch. Jetzt lege ich mir noch einen neuen Menüpunkt vom Typ einfache Seite an, stelle den Textfilter auf PHP-Code und platziere dort meinen Funktionsaufruf:

<?php ivz_kompakt();?>

Fertig! Also, ich muss sagen, das mit dem Einbinden eigener Funktionen über das simple Modul nach diesem Muster macht einem die Arbeit echt einfach, das gefällt mir sehr gut.

Jetzt wärs natürlich schick, wenn wir mehr Rezepte zum Ausgeben hätten, aber ich hack die nicht per Copy&Paste rein. Ich geh mal suchen, wie es mit den Import-Fähigkeiten von Drupal aussieht, und melde mich dann wieder mit einem neuen Beitrag.

 

Schreibe einen Kommentar

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