Jahresarchiv:

2010

Etwas fürs Archiv (2):
Mehrfachauswahl von Schlagwörtern

TagsWie kürzlich angekündigt, gibt’s jetzt den Code für die zweite Sonderfunktion meiner Archivseite, die Mehrfachauswahl von Schlagwörtern.1 Auch dies ist wieder so ein Fall, wo man sich fragen mag, ob es überhaupt allzu häufig verwendet wird, sind doch schon gewöhnliche Schlagwort-Wolken mancherorts dahingehend in der Kritik. Aber andererseits mag es auch mal nützlich sein, also warum nicht?

WordPress bietet nämlich von Haus aus die Möglichkeit, mehrere Tags (neudeutsch: Schlagwörter2) – aber nicht Kategorien – in der Abfrage per UND und ODER zu verknüpfen (wenn auch nicht beides gleichzeitig), d.h. dass entweder nur die Beiträge kommen, die alle gewählten Schlagwörter enthalten (UND) oder die mindestens eines enthalten (ODER). Dazu werden sie in der URL mit + bzw. , aneinandergehängt – was sich ohne weiteres auch durch manuelle Eingabe nutzen lässt, wenn keine komfortablere Möglichkeit wie der hier vorgestellte Code vorhanden ist.

Die Schlagwortauswahl

Wie der beim letzten Mal erwähnte Monatsarchiv-Code steht dieser auch direkt im Inhalt der Seite (im HTML-Editor) – dank des Exec-PHP-Plugins. Mehr dazu dort. Hier dier Tag-Code:

<form id="tagform" action="/" method="get">
<select id="tagsel" multiple="multiple" size="20">
    <?php 
$tags = get_tags(''); 
foreach ($tags as $t) {
  echo '<option value="'.$t->slug.'">'.$t->name.' <small style="color:#777;">('.$t->count.')</small></option>'."\n";
}
?>
</select>
<style type="text/css"> 
#tagand + label + br { display:none; }
</style>
Bei Mehrfachauswahl (max.10): <input type="radio" name="tagcomb" id="tagand" value="+" checked="checked"/><label for="tagand">UND</label> <input type="radio" name="tagcomb" id="tagor" value=","/><label for="tagor">ODER</label>
<script type="text/javascript"><!--
function dotags () {
  var tagcomb = (document.getElementById("tagand").checked ? "+" : ",");
  var selected = '';
  var cnt = 0;
  ob = document.getElementById("tagsel");
  for (var i = 0; i < ob.options.length; i++) 
    if (ob.options[i].selected) {
      if (cnt<10) {
        if (selected!="") selected += tagcomb;
        selected += ob.options[i].value;
        cnt++;
      }
    }
  if (selected=="") {
    alert ("Kein Schlagwort ausgewählt!");
  } else {
    document.location.href = "/tag/"+selected+'/';
  }
}
function cleartags() {
  ob = document.getElementById("tagsel");
  for (var i = 0; i < ob.options.length; i++) 
    ob.options[i].selected = false;
}
//--></script>
<input type="button" onclick="javascript:dotags();" value=" Aufrufen " style="font-weight:bold;"/> &nbsp; <a href="javascript:cleartags();">Auswahl aufheben</a>
<noscript style="color:red;">Für diese Funktion ist JavaScript erforderlich.</noscript>
</form>

Diesmal benötigen wir nichtmal eine eigene Datenbank-Abfrage, denn die WordPress-Funktion get_tags() liefert uns schon, was wir benötigen, nämlich alle Schlagwörter, die wir als options einer Auswahlliste (select multiple) ausgeben, gefolgt von den Radiobuttons für UND und ODER. Die eine Zeile CSS-Style mit #tagand + label + br verhindert, dass der Zeilenumbruch, den WordPress automatisch hinter dem ersten Label einfügt, angezeigt wird, da ich die beiden Radiobuttons gerne nebeneinander hätte.

Es folgen dann zwei kleine JavaScript-Funktionen, die bei Klick auf den „Aufrufen“-Button (function dotags()) bzw. den „aufheben“-Link (function cleartags()) aufgerufen werden. Letzterer hebt einfach die Auswahl auf, naheliegenderweise, und bedarf wohl keiner näheren Betrachtung.

dotags() ermittelt zunächst das für die URL zu verwendende Verknüpfungszeichen + für UND und , für ODER, wie sie WordPress erwartet, und geht dann die options durch, um die ausgewählten in der Variablen selected aneinanderzuhängen – der Übersicht halber beschränkt auf maximal 10 Schlagwörter – und schließlich den Browser zu veranlassen, die entsprechende Seite à la /tag/schlag1+wort2/ aufzurufen. (Wer eine andere URL-Struktur verwendet, muss dies natürlich anpassen; für „unschöne“ wäre das etwa ?tag=schlag1+wort2.)

Die Überschrift des Ergebnisses

So, damit kann man also eure Schlagwortarchive nach Belieben aufrufen – ein kleines Manko bleibt aber noch: die Überschrift der Archivseite. Denn euer Theme wird i.d.R. die WordPress-Funktion single_tag_title() benutzen (im entspr. Zweig der archive.php) und dadurch nur das erste Schlagwort ausgeben, im generischen Beispiel schlag1+wort2 also „Schlagwortarchiv: Schlag 1“ und nicht „Schlagwortarchiv: Schlag 1 UND Wort 2“. (Die eigentlichen Beiträge darunter sind trotzdem die richtigen.)

Natürlich hab ich auch dafür eine Funktion – diesmal wieder in der functions.php des Themes, aufgerufen mit <?php echo ag_multi_tag_title();?> in archive.php für die schön formatierte Überschrift und mit ag_multi_tag_title (false) für das title-Tag im HTML-head, damit auch das Browserfenster die passende Überschrift hat.

<?php
function ag_multi_tag_title ($pretty = true) {
    $tag_slug = get_query_var('tag');
    $tag_slug = str_replace(" ","+",$tag_slug);
    if (strpos($tag_slug,",")===false) {
        $tags = explode ("+", $tag_slug);
        $tagcomb = __('and');
    } else {
        //bei , wird aus + bzw. Leerz. auch ODER
        $tags = explode (",", str_replace("+",",",$tag_slug));
        $tagcomb = __('or');
    }
    if ($pretty) $tagcomb = ' <small style="font-weight:normal; font-variant:small-caps;">'.$tagcomb.'</small> ';
        else $tagcomb = ' '.$tagcomb.' ';
    $tagstr = '';
    foreach ($tags as $t) {
        $tag = get_term_by ("slug",$t,"post_tag",OBJECT);
        if ($tagstr!='') $tagstr .= $tagcomb;
        if ($tag) $tagstr .= $tag->name;
        else $tagstr .= ($pretty?'<acronym title="unbekanntes Schlagwort" style="color:red;">'.htmlspecialchars($t).'</acronym>' : htmlspecialchars($t));
    }
    if ($tagstr=='') return single_tag_title(); else
    return $tagstr;
}
?>

Hier wird zunächst der tag-Parameter aufgedröselt, d.h. an + bzw. , getrennt und dabei auch das ausgeschriebene Wort vorbelegt ($tagcomb). In der Schleife darunter wird mittels der WordPress-Funktion get_term_by() der schöne Name (z.B. „Schlag 1“) zur slug, dem URL-Bestandteil (z.B. „schlag1“), ermittelt und das ganze aneinandergehängt und am Ende zurückgegeben. (Falls irgendwas schiefgelaufen sein sollte, rufen wir halt doch single_tag_title() auf, man kann ja nie wissen…)

Und das war’s dann auch mit dem zweiten Archiv-Code. Wie immer: Wer Fragen, Anregungen, Verbesserungsvorschläge o.ä. hat, darf sie ruhig äußern…

  1. Die Sache mit WP.com-Stats für die beliebtesten Beiträge muss noch etwas warten… []
  2. oder andersrum ;) []

Schwung? (Zitat des Tages 24)

Auf die Frage, ob die fehlende absolute Mehrheit für den schwarz-gelben Kandidaten Christian „#notmypresident“ Wulff für die heutigen Bundespräsidentenwahl in den ersten beiden Wahlgängen eine Niederlage für die Koalition und die Kanzlerin sei, meinte CSU-Wahlmann Andreas Scheuer (gezeigt in der BR-Rundschau):

Es ist völlig eine Fehleinschätzung zu sagen, das wäre ein Schaden für eine Fraktion oder eine Koalition oder eine Regierung, sondern wir nehmen das als Schwung mit, und Christian Wulff wird dann als Bundespräsident zeigen können, dass er der richtige Bundespräsident für Deutschland ist.

Er hat offenbar eine interessante – aber eher persönliche – Definition von „Fehleinschätzung“. Oder von „Schaden“. Und ob der Schwung tatsächlich in die ihm genehme Richtung geht – wenn man darunter denn überhaupt den Anstieg von 600 auf 615 Stimmen verstehen will? Ich sehe aber eher darin, dass auch im zweiten Wahlgang der sommerlich heiße Gegenwind fest ins schwarz-gelbe Gesicht wehte, einen Schwung gegen unsere heißgeliebte Kanzlerin.

Nun, wir werden sehen, in welche Richtung das Pendel schließlich schwingt und wie es vom Handtuchwurf der Linken-Kandidatin beeinflusst wird…

Update: Soso, das Schwüngchen hat im 3. Wahlgang gar für die absolute Mehrheit gereicht – 625 von 1244. Dass die Linken so konsequent und parteilinientreu mit ihrer Gauck-Ablehnung sind und sich 121-fach enthalten1 (bei 124 Mitgliedern), verwundert schon ein bisschen…

  1. die Annahme, dass die allermeisten tatsächlich Linke sind, scheint nicht allzu weit hergeholt []

Bilderrätsel 39

Bienvenida und 歓迎 zum neuesten Bilderrätsel. Wenn ihr wollt, stellt euch hier noch eine supertolle längere Einleitung vor, ansonsten können wir gleich loslegen:

Was zeigt dieser Ausschnitt?

br39a

Wie immer gibt’s bei Bedarf andere und/oder größere Ausschnitte und Antworten und Tips in den Kommentaren. Hoffentlich ist’s nicht zu leicht…

(17:55) Anderer Ausschnitt:

br39b

Gelöst von Yjgalla (und kurz darauf auch von rolak): Ein Kühlkörper (einer Grafikkarte):

br39s

Danke fürs Mitmachen und bis zum nächsten Mal…

Projekt 52 Halbzeit-Blogparade – und eine Frage

der Pinguin Zur Halbzeit der diesjährigen Ausführung des Projekts 52 veranstaltet Sari eine kleine Blogparade mit ein paar Fragen für die Teilnehmer u.a. zwecks Feedback für sie selbst:

  1. Wer bist Du? Und wer ist Dein Begleiter dieses Jahr beim Projekt 52? Und vor allem: Warum hast Du Dich für gerade DIESEN Begleiter entschieden?
    Ich bin ich. Namens Andreas. Mein Begleiter, der kanten­hockende Pinguin, hat keinen Namen – und genau dazu möchte ich meine Leser fragen: Wie soll mein Pinguin heißen? Oder braucht er gar keinen Namen, soll er weiterhin „der Pinguin“ genannt werden? Schreibt einfach eure Meinung in die Kommentare!

    Wieso dieser Begleiter? Nun, ich hab mich umgesehen, welche Figur (und einen nicht­figürlichen Gegenstand wollte ich dann auch nicht) ich nehmen sollte, da war der Pinguin nicht nur am ehesten, sondern sehr gut geeignet.

  2. Wie läuft es bisher für dich? Gab es schon ein Thema, das Dich in den Wahnsinn getrieben hat? Wenn ja, welches und welches hat Dir bisher besonders gut gefallen?
    In den Wahnsinn getrieben sicher nicht, da bin ich doch schon lange. ;) Nur zu „… steht im Walde“ wollte mir noch nichts hinreichend Gutes einfallen… Ein spezielles Lieblingsthema kann ich da jetzt nicht nennen.
  3. Wie lange brauchst Du im Schnitt, um ein Thema umzusetzen und wie gehst Du an das Problem ran?
    Unterschiedlich. Erst gilt’s natürlich eine Idee zu haben – was mal schnell geht, mal längeres Grübeln über Bedeutungen und Arrangement-Möglichkeiten erfordert, mal direkt, mal um die Ecke gedacht. Dann dauert’s meist nicht mehr lange; je nach Art der Umsetzung sind aber auch mehrere Versuche nötig: was ist die Perspektive, stört irgendwas, u.s.w.
  4. Gibt es Themen, die Dir bisher gefehlt haben? Hast Du noch Vorschläge, die Deiner Meinung nach unbedingt in den Thementopf sollten?
    Ich stimme dem Wortman zu, der meint: „Was unbedingt hinein sollte, wären mal freche Themen aus den Bereichen wie z.B. schwarzer Humor, Frivolität, Zweideutigkeit oder ähnlichem.“ Ruhig auch mal was Kontroverses oder was Nachdenklich­(machend)es à la „Armut“ o.ä.

    Verzichten kann ich hingegen auf „Die Farbe X“ – zumindest die Wörter „Die Farbe“ könnte man da weglassen, um die hoffentlich vorhandene Mehr­deutigkeit (z.B. blau → betrunken, blau machen; grün → …hinter den Ohren, umweltbweusst etc.) nicht unter den Teppich fallen zu lassen1.

  5. Hast Du Wünsche speziell an das Projekt 52? Zukunftsvisionen? Würdest Du im nächsten Jahr wieder dabei sein wollen? Unter welchen Vorraussetzungen?
    Ja, ich wäre wieder dabei – ich würde sagen, wir können noch ein Jahr so weiter machen mit derselben Figur (wobei es den Teilnehmern auch freigestellt sein sollte, zum Jahreswechsel die Figur zu wechseln), es gibt ja noch viele mögliche Themen.
  6. Zeige uns doch nochmal Dein (bisher) liebstes Beitragsfoto, dass Du in diesem Jahr zum Projekt 52 geschossen hast.
    Auf ein einziges kann ich mich nicht festlegen – hier also drei Bilder zu den beiden Themen Zahlen und Licht und Schatten:

    Zahlen (a) Zahlen (b) Licht und Schatten

  1. oder unter den Tisch zu kehren ;) []