Wir basteln uns ein Blog - Teil 3

Schwachpunkt eines jeden Blogs ist seine Navigation. Das wird bei jedem größeren Blog deutlich. Spätestens ab einer dreistelligen Anzahl von Artikeln ist eine herkömmliche Themenliste zur Navigation völlig überfordert. Als Krücken werden Tag Clouds oder kalendarische Navigationen hinzugefügt, die jedoch in den meisten Fällen völlig sinnfrei sind.

Eine Tag Cloud ist im Grunde genommen nichts anderes als eine weitere Themenliste und damit schon ziemlich fragwürdig. Ihr einziges Unterscheidungsmerkmal besteht darin, dass die Themen nicht alphabetisch sortiert sind, sondern in verschiedenen Schriftgrößen kunterbunt zusammengewürfelt sind. Vermeintlich wichtige Begriffe werden optisch hervorgehoben während vermeintlich unwichtige Begriffe nahezu untergehen. Somit kriegt der Leser das angeboten, was die meisten anderen Leser interessiert hat. Doch was ist, wenn der Leser seine eigene Vorstellung von dem hat, was er gerne lesen möchte?

Noch unsinniger sind kalendarische Navigationshilfen, denn außer dem Autor dürfte wohl niemand genau wissen, wo er im Zeitstrang nach einem Artikel suchen muss. Was interessiert den Leser, wann ein Artikel geschrieben wurde und was soll er mit dieser Navigation anfangen, wenn er die Erscheinungsdaten der Artikel nicht auswendig kennt?

Im zweiten Teil haben wir daher die grundsätzliche Möglichkeit geschaffen, mehrere Themen aus der Themenliste zugleich anzuwählen und eine Schnittmenge zu bilden. Sprich: Wir suchen nur Artikel, die Thema 1 und Thema 2 und Thema 3 zugeordnet sind. Verglichen mit einer Baumstruktur entspricht das drei Hierarchie-Ebenen, wobei wir einen Artikel beliebig vielen Themen zuordnen können und damit auch beliebig viele virtuelle Hierarchie-Ebenen abbilden können.

Die Navigation dafür ist denkbar einfach: Statt die Themen als Links aufzulisten, werden sie mit Checkboxen versehen. So ist möglich, eine Mehrfachauswahl zu treffen, die sich auch optisch kontrollieren lässt.

Eine einfache Auflistung gestaltet sich zunächst recht einfach, da wir aus der Datenbank lediglich die Tabelle der Themen auslesen und in einer Schleife ausgeben müssen. Doch interessant wird diese Liste erst, wenn deutlich gemacht wird, ob und wie viele Artikel einem Thema zugeordnet sind. Bei einer herkömmlichen Themenliste würde man einfach alle aktiven Artikel pro Thema zählen und die Anzahl in eine Klammer hinter das jeweilige Thema setzen.

Da wir mehrere Themen anwählen können, sind die Zahlen jedoch variabel. Wählen wir ein Thema aus, interessiert uns nur noch, wie viele der ausgewählten Artikel noch weiteren Themen zugeordnet sind. Alle durch die Themenanwahl ausgeschlossenen Artikel sind ab diesem Augeblick für uns als Leser uninteressant.

Praxis:
In Teil 2 hatten wir die im URI übergebenen Themen in einer Schleife ausgelesen und jeweils zwei Variablen zur Bildung unserer Datenbankabfrage erstellt:

$themen = explode(' ', $thema);
$anzahl = count($themen);

for ($x=0; $x<$anzahl; $x++) {
  // Thema-ID anhand des Themen-Namens ermitteln
  $tid = "select themaID from thema where name='$themen[$x]'";

  // Bestandteile in Variablen speichern
  $teil1 .= ", zuordnung as z$x";
  $teil2 .= " and (z$x.artikelID=a.artikelID and z$x.themaID=($tid))";
}


Die beiden Variablen $teil1 und $teil2 nutzen wir nun in einer Funktion, um die jeweils aktuelle Anzahl der Artikel zu einem Thema auszulesen:

function artikel_zahl($dieses_thema) {
  global $teil1, $teil2;

  $query = "select count(a.artikelID) from artikel as a $teil1, zuordnung as z  where a.aktiv='1' and (z.artikelID=a.artikelID and z.themaID='$dieses_thema') $teil2";

  return $query;
}


Wir müssen der Funktion also lediglich die jeweilige ID des Themas übergeben und erhalten basierend auf der augenblicklichen Themenwahl eine Anzahl, wie viele der aktuell ausgewählten Artikel dem Thema mit der übergebenen ID zugeordnet sind.

Von Tilman Pietzsch am 31. Juli 2009, 03:03 Uhr veröffentlicht | 459 mal gelesen
Thema: Code

Kommentar schreiben


Kommentare


Noch keine Kommentare vorhanden.
Schreiben Sie doch den ersten Kommentar.


Kommentar schreiben