Mein Lieblings-Skript für Greasemonkey

Greasemonkey ist ein praktisches Add-On für Firefox das es erlaubt, auf einfache Weise etwas Javascript auf einer Webseite auszuführen, nachdem sie geladen wurde.
Zu meinen Lieblings-Skripts gehört „Jasper’s Google Reader subscribe“ …und was macht es?
Jedes Blog, fast jede Nachrichtenseite und viele andere Websites besitzen einen RSS-Feed. Sie sind sehr praktisch, allerdings ist es häufig schwierig, den entsprechenden Link zu finden oder er wird auf der Seite gar nicht dargestellt. Dann ist die einzige Chance, den Link zu finden, eine Suche im Sourcecode. Den Code durchsuchen, während man vor einem Rechner sitzt? Lächerlich! Die Maschine soll das machen und genau dafür gibt es das Skript.
Es sucht nach Zeichenketten die „rss, „atom“ oder „rdf“ enthalten und stellt es kleines Icon am oberen rechten Rand des Browsers dar:

Bewegt man den Mauszeiger über das Icon werden Links zu allen gefundenen Feeds angezeigt:

Wie man sieht wird nicht der der Haupt-Feed angezeigt, sondern auch der Kommentar-Feed sowie mögliche andere.

Einfachere Plugin-Entwicklung durch Verschieben des Plugin-Verzeichnisses

Als erfahrener Plugin-Programmierer testet man seine Plugins nicht nur mit der allerneuesten WordPress-Version, sondern auch mit vorherigen Versionen, denn es gibt eine Menge älterer WordPress-Installationen. Man hat also die verschiedensten Versionen auf dem Entwicklungsserver installiert und möchte sein neuesten Codeänderungen mit jeder dieser Versionen testen. [Read more…]

Die geheimnissvolle Selectbox in WordPress

Neulich wollte ich auf der Optionsseite eines Plugins eine Selectbox mit 5 Einträgen erstellen. Nicht einfacher als das:

<select size="5">
  <option "test1" />
  <option "test2" />
  <option "test3" />
  <option "test4" />
  <option "test5" />
  <option "test6" />
</select>

Jeder, einschließlich mir, erwartet folgende Ausgabe:

Tatsächlich wird aber folgendes angezeigt:

Das Geheimnis liegt im stylesheet des Admin-Bereichs:

#wpcontent select {
	padding: 2px;
	height: 2em;
	font-size: 12px;
}

Dadurch wird jede Selectbox auf einen Eintrag reduziert. Warum dies so definiert ist bleibt mir schleierhaft. Zu diesem Thema existiert auch ein Ticket im WordPress-Trackingsystem, in dem das Problem seit zwei Jahren diskutiert wird.

Die Lösung des Problems ist relativ einfach:

<select style="height:auto" size="5">

Sieht einfach aus, hat mich aber eine Stunde meiner Lebenszeit gekostet.

Barcamp Mainz 2011, Erlebnisse eines Anfängers (2. Tag)

Auftakt

(Foto: netzkultur)

Die Anfahrt zum Camp war heute noch einfacher als gestern, denn Sonntags morgens um 8:15 Uhr ist nicht wirklich viel auf den Straßen los. Parkplatz war auch wieder fast leer und so war der abschließende Fußweg sehr kurz.

(Foto: netzkultur)

Beim Frühstück war es heute wesentlich ruhiger als am Vortag, die meisten klammerten sich an einen Becher Kaffee, starrten auf ihren Monitor oder saßen einfach nur rum. Der erste Tag schien vielen noch in den Knochen zu stecken. Mir ging es nicht anders, 9 Uhr am Sonntag morgen ist auch nicht unbedingt meine bevorzugte Zeit, um wach zu sein. Nach zwei Bechern Kaffee (der wirklich lecker war) und drei halben Brötchen war ich dann bereit für die Sessionplanung.
[Read more…]

Barcamp Mainz 2011, Erlebnisse eines Anfängers (1. Tag)

(Foto: netzkultur)

Das Barcamp Mainz war mein erstes „richtiges“ Barcamp, dass das WordCamp Köln ja schon alle Sessions im Voraus geplant hatte. Ich hatte also keine Ahnung, was auf mich zu kam.

Die Anfahrt war auf jeden Fall schon mal sehr angenehm, da ich nur 20 km vom Veranstaltungsort, der Uni Mainz, entfernt wohne. Also um kurz nach Acht auf die Autobahn, in Mainz zwei-, dreimal abgebogen und schon war ich da. Parken war kein großes Problem, da sich ein großer (und vor allem kostenloser) Parkplatz direkt vor dem Gebäude befand. Der Tag fing also schon mal gut an. [Read more…]

WordPress: Neuladen von Skripts und Stylesheets erzwingen

Bei der Entwicklung von WordPress-Themes oder -Plugins taucht immer wieder das Problem auf, dass Skripte oder Stylesheets nicht direkt von der Quelle sondern aus einem Cache geladen werden, weil sie irgendwo auf dem Weg vom Server zum Browser zwischengespeichert werden. Es gibt verschiedenee Möglichkeiten dieses zu unterbinden, indem man z.B. den Browsercache in den Optionen ausschaltet oder ein Webentwicklungs-AddOn benutzt. Manchmal funktioniert das allerdings nicht, weil es die verschiedensten Möglichkeiten des Cachings gibt und man vielleicht nicht alle ausgeschaltet hat.
[Read more…]

WordPress: Benutzern das Passwort-Feld entziehen

Du hast also einen Benutzer erstellt und ihm ein gutes Passwort gegeben, damit die Sicherheit Deines Blogs nicht gefährdet wird? Leider kannst Du aber nicht sicher sein, dass der Benutzer dieses gute Passwort beibehält, denn er kann es ganz einfach auf seiner Profilesiete ändern.
Dieses Problem kann allerdings mit einem Filter gelöst werden:
[Read more…]

WordPress: Titel kürzen

Eine Frage, die immer wieder in WordPress-Foren auftaucht, ist, wie man den Titel auf eine bestimmte Anzahl Zeichen kürzen und ein „…“ anfügen kann.

Das Problem ist mit einigen Zeilen PHP schnell gelöst:

1
2
3
4
5
6
7
8
9
add_filter( 'the_title', 'short_title' );
function short_title( $title ) {
  $chars = 20;
  if ( strlen( $title ) > $chars ) {
    $title = substr( $title, 0, $chars );
    $title .= " &hellip;";
  }
  return $title;
}

Die Variable $chars muss auf die Anzahl Zeichen gesetzt werden, die man maximal anzeigen möchte und in Zeile 6 muss der Platzhalter für den ausgelassenen Text eingefügt werden (&hellip; ist typografisch richtige Version für drei Punkte, Ellipse genannt).

Nachteilig an dieser Lösung ist, dass der Titel mitten in einem Wort abgeschnitten werden könnte. Wenn man möchte, kann man die Funktion entsprechend erweitern:

1
2
3
4
5
6
7
8
9
10
add_filter( 'the_title', 'short_title' );
function short_title( $title ) {
  $chars = 20;
  if ( strlen( $title ) > $chars ) {
    $title = substr( $title, 0, $chars );
    $title = substr($title, 0, strrpos( $title, ' ' ) );		    $title .= " &hellip;";
  }
  return $title;
}

Kopiert man diese Funktion in die funtions.php des Themes werden alle Aufrufe von the_title den eingefügten Angaben entsprechend gekürzt.

PHP/HTML: einfache und doppelte Anführungszeichen

Wenn ein PHP-Programmierer einen Link aus Variablen erstellt, kann man häufig folgenden Code sehen:

echo '<a href="' . $link . '" id="' . $id .'" class="' . $class . '">' . 
       $linktext . '</a>';

oder

?>
<a href="<?php echo $link; ?>" id="<?php echo $id; ?>" 
   class="<?php echo $class; ?>"<?php echo $linktext; ?>"</a>
<?php

oder

echo "<a href=\"$link\" id=\"$id\" class=\"$class\">$linktext</a>";

Abgesehen vom persönlichen Stil des Programmierers haben die Code-Beispiele eines gemeinsam: sie sind schlecht zu lesen.
„Klar!“, werden jetzt die Programmierer sagen, „In HTML müssen die Attribute in doppelten Anführungszeichen stehen und in PHP muss man eine der oben gezeigten Methoden verwenden“. Sicher? Müssen Attribute wirklich in doppelten Anführungszeichen stehen? Die einfache Antwort ist: Nein!
Ein Blick in die Spezifikation bringt Folgendes an den Tag:

[…]Standardmäßig verlangt SGML, dass alle Attributwerte entweder von doppelten Anführungszeichen (ASCII dezimal 34) oder einfachen Anführungszeichen (ASCII dezimal 39) begrenzt werden. Einfache Anführungszeichen können im Attributwert enthalten sein, wenn der Wert durch doppelte Anführungszeichen begrenzt ist und umgekehrt.[…]

Doppelte oder einfache Anführungszeichen. Das macht die Sache doch viel übersichtlicher:

echo "<a href='$link' id='$id' class='$class'>$linktext</a>";

Wie man sieht ist der Code viel leichter zu lesen und das, weil man einfach die Spezifikation gelesen hat.

WordPress: Paginierung der Plugintabelle ausschalten

Seit der Version 3.0 wird die Plugintabelle standardmäßig in Seiten aufgeteilt, 20 Einträge pro Seite. In meinen Augen ist die Funktion vollkommen nutzlos, denn sie bedeutet, das ich mich mühsam durch die Seiten klicken muss, anstatt mich einfach mit dem Mausrad durch die Einträge zu scrollen. Es gibt aber eine mehr oder weniger „versteckte“ Einstellung, um alle Plugins auf einmal anzuzeigen.
[Read more…]