Backend Localization Plugin funktioniert nun auch mit PHP4
Anfang der Woche bekam ich einen Kommentar zu meinem Backend Localization Plugin mit dem Hinweis, dass es nicht mit PHP4 funktioniert. Da ich schon lange PHP5 nutze und auch versuche meinen Quellcode übersichtlich zu gestalten, habe ich in meinem Plugin einige Funktionen und Eigenschaften genutzt, die es für PHP4 noch nicht gab.
Der Kommentator, der den Fehler gefunden hat, konnte auch selbst am nächsten Tag schon eine Lösung finden, die er auf seinem eigenen Blog sowie als weiteres Kommentar hinterlassen hat. An dieser Stelle nochmals vielen Dank an David.
Ich versuche Fehler, die mir mitgeteilt werden immer innerhalb von wenigen Tagen zu beheben. Dazu bin ich natürlich darauf angewiesen, dass mir diese auch mitgeteilt werden. Bei WordPress kann es sehr oft vorkommen, dass sich zwei Plugins nicht zusammen vertragen. Wenn ihr also mit einem meiner Plugins ein Problem feststellen solltet, dann scheut euch nicht mir das mitzuteilen. Ich werde gerne versuchen das Problem zu beheben.
Internet Explorer 6 unter Windows 7 nutzen mit dem Windows XP Mode
Wer sich von euch jetzt fragen sollte “Wieso sollte ich den IE6 unter Windows 7 nutzen?” dem würde ich gerne “Willst du nicht!” antworten. Aber diejenigen unter uns, die Webseiten entwickeln und auch mit dem IE6 eine Website testen müssen, wird dieser Artikel wohl helfen.
Unter Windows kann ja bekanntermaßen immer nur eine Version des Internet Explorers installiert sein. Da der IE8 auch einen Kompatibilitätsmodus für den IE7 besitzt hat man so schon mal zwei Fliegen mit einer Klappe geschlagen. Aber wie soll man unter Windows 7 einen IE6 installieren. Zum Glück gibt es hier eine sehr einfache und sehr benutzerfreundliche Methode. Zum Testen des Chrome Frame für meinem letzen Artikel habe ich noch eine virtuelle Maschine mit Windows XP unter Suns VirtualBox verwendet. Es geht aber sehr viel einfacher und erfordert keine Zeitaufwändige Installation eines XP-Systems, für das man auch noch eine Lizenz benötigt. Wer also keine mehr rumliegen hat und nicht unbedingt eine XP-VM benötigt, kann sich trotzdem den IE6 für Win7 holen.
Der Windows XP Modus
Alles was ihr benötigt ist der sogenannten Windows XP Mode. Dabei handelt es sich um eine spezielle Version von Microsofts Virtual PC. Alle Programme, die dort installiert sind, können auch unter Windows 7 gestartet werden. Und nicht wie man es von VMs gewohnt, indem man die VM startet und dort die Programme ausführt, sondern indem man sie direkt aus dem Startmenü von Windows 7 aufruft und auch direkt in Win7 nutzen kann.
Damit ihr den Windows XP Mode benötigt ihr mindestens eine Windows 7 Professional Lizenz oder höher. Benutzer von Win7 Starter oder Home können den Modus leider nicht nutzen. Zum installieren geht ihr einfach auf die Download-Website für den Windows XP Mode wählt eure Windows 7 Version und die gewünschte Sprache aus und installiert beide Dateien nacheinander. Anschließend könnt ihr die virtuelle Maschine über das Startmenü aufrufen und die nötigen Einstellungen für Windows XP durchführen. Ihr solltet in diesem Zusammenhang auch die Updates installieren aber auf KEINEN FALL das Update für den Internet Explorer 7.
Den Internet Explorer 6 unter Windows 7 nutzbar machen
Damit ihr nun den IE6 auch unter Windows 7 nutzen könnte ist ein sehr simpler Eingriff notwendig. Ihr müsst lediglich eine Verknüpfung zum IE6 in das Startmenü für “Alle Benutzer” kopieren. Dazu klickt ihr einfach mit der rechten Maustaste auf den “Start” Kopf und wählt “Öffnen – Alle Benutzer”:

Alle Verknüpfungen die hier zusätzlich zu den bereits abgelegten hinzugefügt werden sind anschließend in Windows 7 aufrufbar. Ihr könnt nun also hier eine Verknüpfung zum IE6 anlegen. Das geht wiederrum recht schnell, wenn ihr einfach die Verknüpfung auf dem Desktop per Drag-and-Drop hierher zieht:

Nun solltet ihr zur Sicherheit die Virtuelle Maschine einmal neustarten. Es funktioniert vielleicht auch ohne Neustart, aber bei mir war er notwendig (eventuell wegen der installierten Updates).
Den IE6 in Windows 7 aufrufen
Wenn alles richtig eingerichtet wurde, solltet ihr im Startmenü unter Windows 7 einen Unterordner in “Windows Virtual PC” mit der Bezeichnung “Windows XP Mode-Anwendungen” vorfinden. Dort sollte dann der Internet Explorer 6 aufrufbar sein:

Nachdem ihr den Internet Explorer gestartet habt könnt ihr ihn so verwenden, als wäre er direkt in Windows 7 installiert. Da aber nicht nur der IE6 sondern das gesamte System gestartet wird kommt es manchmal zu kuriosen Meldungen. So wird euch z.B. auch ab und zu auf Updates hingewiesen oder darauf, dass ihr keinen Virenscanner in der VM installiert habt. Wenn euch die Meldungen stören, solltet ihr einfach die erforderlichen Schritte in der VM durchführen.
Hier noch ein kleines “Beweisfoto” der Familienzusammenführung, für alle, die daran Zweifel haben, dass es so einfach ist:
Fazit
Mit dem Windows XP Mode ist es sehr einfach alte Programme unter Windows 7 zu nutzen. Es ist dabei sogar möglich mit der erweiterten Version von Virtual PC mehr als eine virtuelle Maschine zu betreiben. Wenn auch eine der anderen VMs eine Windows Installation ist, könnt ihr hier auch die Programme unter Win7 nutzbar machen. Wer also einen “echten Internet Explorer 7″ haben möchte, könnte z.B. eine weitere XP-VM aufsetzen oder eine Vista-VM nutzen. Ihr könnte in den VMs dann z.B. auch ältere Version von anderen Browsern installieren um diese gleichzeitig unter Win7 nutzen zu können. Zwar kann man viele andere Browser auch in mehreren Versionen auf einem System installieren, aber z.B. beim Firefox gibt es dabei immer mal wieder Probleme mit den Profilen.
Hat jemand von euch noch andere sinnvolle Anwendungen des Windows XP Mode gefunden? Vielleicht um ein paar Spieleklassiker zum Laufen zu bringen? Über Kommentare würde ich mich wie immer sehr freuen.
Blog oder Website fit machen für den IE6
Wie auf vielen News-Seiten zu lesen ist stellt Google ab Mitte des Jahres offiziell den Support für den Internet Explorer in der Version 6.0 ein. Unter den Besuchern meines Blog befindet sich zwar nur ein verschwindend geringer Prozentsatz an IE6 Nutzern, aber auch diese sollten meine Website einigermaßen ansehnlich präsentiert bekommen.
Das größte Problem ist oft, dass die schönen Themes nicht auf den IE6 angepasst wurden und daher zu sehr unschönen Darstellungen führen. Ich habe in einer virtuellen Maschine noch eine Installation vom Internet Explorer 6 laufen und damit mal selbst meinen Blog getestet. Das Ergebnis sah leider wie folgt aus:
Wie ihr hier sehen könnt sind die transparenten PNG Bilder im IE6 nicht transparent, da dieser nur transparente GIF Bilder unterstützt. Viel schlimmer war aber, dass die Sidebar mit den Widgets komplett nach unten gerutscht war. Um das zu beheben hätte ich sehr viele Dinge im CSS Layout und vermutlich auch im HTML-Quellcode ändern müssen. Daher habe ich überlegt, was man stattdessen tun könnte.
Die Lösung: Google Chrome Frame
Schon vor längerer Zeit hatte ich etwas vom Google Chrome Frame gelesen, der die Webkit Rendering Engine und die JavaScript Engine des Chrome Browsers in den Internet Explorer bringt. Dazu muss der Benutzer lediglich ein Plugin für den Internet Explorer installieren und der Website-Betreiber muss dem Plugin mitteilen, dass der Inhalt automatisch damit gerendert werden soll.
Den Browser zum Rendern mit dem Chrome Frame veranlassen
Alles was der Website-Betreiber tun muss, ist folgenden Meta-Tag in seinen Quellcode einzufügen:
<meta http-equiv="X-UA-Compatible" content="chrome=1" />
Das X-UA-Compatible Meta-Tag sorgt dafür, dass das Plugin aktiviert wird und der Benutzer den Inhalt richtig dargestellt bekommt, vorausgesetzt natürlich er hat es auch installiert. Um einen Benutzer des Internet Explorers dazu zu bewegen das Plugin zu installieren, hat Google ein kleines JavaScript-Snippet bereitgestellt, mit dem der Benutzer einen Link zur Download-Seite des Plugins bekommt:
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/chrome-frame/1/CFInstall.min.js"></script>
<div id="placeholder"></div>
<script type="text/javascript">
CFInstall.check({
node: "placeholder",
destination: "http://www.waikiki.com"
});
</script>
Damit die Aufforderung zum Download auch nur Benutzern des IE6 angezeigt wird, habe ich zusätzlich ein Conditional Comment benutzt, um das Snippet nur auf IE6 Benutzer anzuwenden, damit Benutzer des Internet Explorer 7 und höher keine Aufforderung bekommen. Außerdem müssen damit auch alle Nutzer eines andern Browsers nicht die JavaScript-Datei vom Google Server laden.
Der Blog nach der Installation des Plugins
Für diejenigen von euch, die etwas skeptisch sind, ob der ganze Aufwand lohnt, habe ich hier nun das “nachher” Bild, damit ihr sehen könnt, dass es wirklich funktioniert:
Wie ihr sehen könnt, sieht der Blog nun wieder richtig aus. Als kleinen Bonus des Plugins könnt ihr auch den Inspektor nutzen, wie man ihn von Chrome oder Safari gewöhnt ist. Aber die Besucher eures Blog werden das wohl eher nicht nutzen.
Ich hoffe, dass euch dieser Tipp helfen konnte. Mich würde interessieren, was ihr vom Google Chrome Frame haltet oder was für euch dagegen spricht. Hat ihn vielleicht jemand auch im Einsatz und schon echte Probleme oder Nachteile damit feststellen können? Über Kommentare würde ich mich wie immer sehr freuen … über ein baldiges Aussterben des IE6 aber noch viel mehr
Kundenservice wie er sein sollte: Akkutausch bei Lenovo
Einige Modellreihen von ThinkPad Akkus weisen einen Defekt auf der dazu führt, dass die Akkus nach kurzen Zeit nur noch eine geringe verfügbare Kapazität aufweisen. Bei dem Akku eines ThinkPads war genau so ein Akku verbaut und er wies nach nicht einmal einem Jahr nur noch 33% seiner ursprünglichen Kapazität bei vollständiger Ladung auf.
Da ich in den letzten Wochen recht viel um die Ohren hatte fand ich keine Zeit mich mit dem Austausch zu beschäftigen, was ja in der Regel nicht so schnell von statten geht. Gestern habe ich mich dann aber doch einmal dazu durchgerungen das Thema anzugehen. Nach einer kurzen Suche bei Google über die Typnummer des Akkus kam ich dann auch direkt auf die Seite von Lenovo, auf der der Austauschvorgang beschrieben wurde.
Akkutausch in 2 Minuten
Die ganze Sache hat dann ca. 2 Minuten gedauert. Auf der Website zum Akkutausch konnte man sich ein kleines Diagnoseprogramm runterladen, das einem anzeigt, ob der Akku für den kostenlosen Austausch in Frage kommt. Das Tool bestätigte mir dann, dass mein Akku bei den defekten Modellen dabei ist und nach einem Klick auf einen Link kam ich direkt auf ein Formular, in das schon die Seriennummer und die Typnummer eingetragen waren. Nun musste ich nur schnell meinen Namen und die Adressdaten eintragen und das Formular absenden.
Ich bekam sofort die Meldung, dass der Akku mir schnellstmöglich auf dem Postweg zugeschickt wird. Das hat mich erst einmal überrascht. Bei vielen anderen Herstellern bekommt man erst einmal eine RMA Nummer, mit der man dann, meist auf eigene Kosten (die aber manchmal erstattet werden), das defekte Gerät einschicken muss. Erst dann wird das neue Gerät zurückgeschickt. Nicht so bei Lenovo, denn hier habe ich ein paar Stunden später schon eine Mail mit dem Tracking-Code für das UPS Paket bekommen. Ich kann mich also schon bald über den neuen Akku freuen.
Liste der betroffenen Akkutypen
Hier eine kleine Liste der betroffenen Akkus. Wer also selbst ein ThinkPad besitzt sollte kontrollieren, ob der eigene Akku zu den betroffenen gehört:
| ThinkPad Modelle | Akku FRU Teilenummer |
|---|---|
| R60, R60e, R60i R61, R61e, R61i, T60, T60p, T61, T61p | 42T4546, 42T4566, 92P1141 |
| X60, X60s, X61, X61s | 42T4550, 42T4567, 42T4568, 92P1169, 92P1173, 93P5028, 93P5030 |
Fazit
Es gibt also doch noch kundenfreundliche und unbürokratische Verfahren zum Austausch von defekten Komponenten. Andere Notebook Hersteller sollten sich daran ein Beispiel nehmen. Denn die unbürokratischen Hürden sorgen einerseits bei Benutzter zu Frust über den Hersteller, was zur Folge haben kann, dass der nächste Laptop bei einem anderen Hersteller gekauft wird. Andererseits kostet es denn Hersteller auch viel mehr, da in diesem Fall die Service-Mitarbeiter damit beschäftigt sind die Anfragen zu beantworten und die eingeschickten Teile selbst noch einmal zu testen.
Hattet ihr auch schon einmal ein so positives Erlebnis mit Herstellern? Oder seid ihr immer an den Garantiebedingungen und bürokratischen Abläufen verzweifelt? Über Kommentare würde ich mich wie immer sehr freuen.
Update: Gestern war der Akku schon da. Das nenne ich mal wirklich eine zügige Zustellung. Dienstag Abend beauftragt und am Freitag schon da!
Arrays und andere komplexe Daten mit PHP in einer MySQL-Datenbank speichern
Viele von euch werden wohl schon einmal vor dem Problem gestanden haben, dass sie ein Array oder ein Objekt in der Datenbank speichern mussten. Hier möchte ich ein paar Vorschläge unterbreiten, wie man das Problem nicht lösen sollte und wie es besser gehen kann.
Der schlechte Weg
Die einfachste und gleichzeitig auch schlechteste Methode wäre es, für jeden Index eines Arrays oder jede Eigenschaft eines Objekts eine neue Spalte zu erzeugen. Bei diesem Ansatz werden unter Umständen viele Zeilen erzeugt, die nicht immer einen Wert enthalten. Das ist zwar nicht so gravierend, aber durch diesen Ansatz erhöht sich auch die Anzahl der Spalten schnell auf eine unübersichtliche Anzahl. Zuletzt ist es hierbei bei jeder Änderung des Arrays oder Objekts notwendig die Datenbanktabelle anzupassen.
Eine bessere Lösung gefällig?
Etwas besser Lösung, die fast immer funktioniert aber nicht für alle Fälle optimal ist, wäre eine Serialisierung des Arrays oder Objekts. Hierbei werden die Daten mit der serialize() Funktion in einen String konvertiert und können somit direkt in eine VARCHAR oder TEXT Spalte speichert werden. Dabei muss der String natürlich noch durch die Funktion real_escape_string() (in diesem Beispiel von der MySQLi Klasse) “escaped” werden.
Speichern der Daten
// Das zu speichernde Array
$array = array('vorname' => 'Max', 'name' => 'Mustermann');
// Serialisieren der Daten
$string = serialize($array);
// Speichern der Daten
$mysqli->query('INSERT INTO table_name (array) VALUES ("'.$mysqli->real_escape_string($string).'")'))
Das Beispiel setzt natürlich voraus, dass die Variable $mysqli eine Instanz der MySQLi Klasse mit einer gültige Verbindung zu einer Datenbank enthält. Wir haben hier ein einfaches assoziatives Array, das serialisiert wird und anscheinend gespeichert wird. Die serialisierten Daten sehn in diesem Beispiel wie folgt aus:
Der zu speichernde String
a:2:{s:7:"vorname";s:3:"Max";s:4:"name";s:10:"Mustermann";}
Das Auslesen der Daten wird mit der Funktion unserialize() durchgeführt, die aus dem String wieder ein assoziatives Array erzeugt. Dazu lesen wir zuerst die Daten mit einem gewöhnlichen Query aus und konvertieren anschließend die Daten:
Auslesen der Daten
// Auslesen der Daten
$result = $mysqli->query('SELECT array FROM table_name');
$row = $result->fetch_assoc();
$string = $row['array'];
// Unserialisieren der Daten
$array = unserialize($string);
Diese Methode zum Speichern von komplexen Daten funktioniert recht gut, aber der serialisierte String benötigt dabei mehr Speicherplatz als für ein normales assoziatives Array eigentlich nötig wäre. Wie es eleganter geht zeige ich euch im nächsten Beispiel.
Die elegante Lösung mit JSON
Das Format JSON entspringt zwar der Skriptsprache JavaScript, aber es wird zu Zeiten von AJAX sehr oft auch serverseitig verwendet und erzeugt. Da die meisten serverseitigen Sprachen also auch JSON unterstützen bietet es sich auch für die Speicherung von komplexeren Datenstrukturen an. Die Anpassung des vorherigen Quellcodes beschränkt sich dabei auch auf eine einzige Zeile. Wir ersetzen lediglich die serialize() durch die json_encode() Funktion. Die Zeile 6 aus dem vorherigen Quellcode sieht dann folgt aus:
Speichern der Daten
... $string = serialize($array); ...
Hierbei werden die Datei des assoziativen Arrays in die JSON Notation konvertiert. Hierbei ist der resultierende String kompakter als bei der Serialisierung, da die Länge der einzelnen Arraywerte nicht und Datentypen nicht gespeichert werden:
Der zu speichernde String
{"vorname":"Max","name":"Mustermann"}
Beim Lesen der Daten aus der Datenbank müssen sie dann selbstverständlich auch wieder in das ursprüngliche Format zurück konvertiert werden. Dabei kommt wie ihr schon vermutet die Funktion json_decode() zum Einsatz. Diese erzeugt aber normalerweise ein Standard-Objekt. Um das in unserem Beispiel verwendete assoziative Array zu erhalten, wird als zweiter Paramater “true” übergeben. Der Änderung am Quellcode aus dem vorherigen Beispiel sieht dann wie folgt aus:
Auslesen der Daten
... $array = json_decode($string, true);
Die Verwendung von JSON sichert nicht nur die Daten sondern auch die Schlüssel eines Arrays. Dabei spielt es keine Rolle, ob das Array assoziativ ist oder Zahlen als Schlüssel verwendet. Auch wird die Sortierung dabei nicht verändert. Wer lediglich die Werte eines Array speichern möchte, also keine Schlüssel benötigt, kann auch einen noch einfacheren Weg gehen.
Array in der Datenbank light
Der einfachste Werte mehrere Daten eines Array in einer Datenbank zu speichern sind die Funktionen explode() und implode(). Hierbei werden die einzelnen Werte des Arrays durch den “Delimiter”, den man als ersten Parameter angibt voneinander getrennt bzw. miteinander verbunden. Auch bei dieser Variante müssen in den beiden Beispiel-Quellcodes nur die Funktionen für die Umwandlung ausgetauscht werden. Zu beachte ist hierbei, dass der “Delimiter” nicht in den Werten vorkommen darf. Wer also beispielsweise ein Array mit Datumsangaben im Format 2010-01-23 mit implode verbinden möchte, darf nicht den Bindestrich als “Delimiter” verwenden.
Die Werte können wie auch zuvor in einer VARCHAR oder TEXT Spalte gespeichert werden. Sehr hilfreich sind die beiden Funktionen aber auch beim Speichern in einer Spalte mit dem Spaltentyp SET. Da hierbei aber die Werte zusätzlich von Anführungsstrichen umgeben sein müssen, muss der “Delimiter” auch die Anführungsstriche enthalten. Die implode Funktion würde in der Speicherfunktion dann wie folgt eingesetzt:
Speichern der Daten in einer SET Spalte
...
$string = implode('", "', $array);
...
Fazit
Wie ihr also seht, gibt es viele Wege komplexere Daten in einer Datenbank zu speichern. Das Beispiel mit JSON als Repräsentation sollte in jeder serverseitigen Skriptsprache funktionieren, die JSON unterstützt. Solltet ihr PHP verwenden müsst ihr natürlich auch sicherstellen, dass JSON bei euch aktiviert ist. Am einfachsten geht das wie immer mit Hilfe der phpinfo() Funktion, die in der Ausgabe einen “json” Abschnitt haben sollte.
Diejenigen von euch, die einen WordPress Blog haben und sich schon einmal die Datenbanktabelle angesehen haben, werden vermutlich die JSON Strings schon gesehen haben. Den WordPress speichert z.B. Arrays eines Plugins automatisch in der JSON Notation in der “options” Tabelle ab. Das macht es einem Pluginentwickler sehr einfach das Array zu speichern.
Ich hoffe, dass euch das kleine Tutorial weiterhelfen oder auf neue Ideen bringen konnte. Über Anregungen würde ich mich wie immer sehr freuen.
Spam oder kein Spam? Mit Akismet keine Frage!
Jeder der einen WordPress Blog installiert, bekommt automatisch das Akismet Plugin mitgeliefert. Dabei handelt es sich um ein Plugin zum Erkennen von Spam-Kommentaren. Wer es nutzen möchte, benötigt allerdings einen API-Key, den jeder Benuzter von WordPress.com kostenlos bekommt. Wer so wie ich seinen Blog selbst hostet, sollte sich trotzdem bei WordPress.com anmelden um einen API Key zu bekommen.
Ich selbst habe Akismet nach ca. einer Woche aktiviert. Am Anfang gab es noch so gut wie keine Kommentare auf meinem Blog. Allmählich sind dann aber diverse Spam-Bots auf meinen Blog aufmerksam geworden. Von Pflichangabe wie E-Mail wollte ich eigentlich absehen und auch ein Captcha finde ich persönlich sehr nervig, wenn ich auf einem Blog oft einen Kommentar hinterlasse. Daher habe ich Akismet getestet uns bin seither sehr zufrieden damit. Alle Mails zu Medikamente, Casinos, Geld verdienen und so manch nicht jugendfreiem Thema werden dadurchz wirksam geblockt. Für den unwissenden Blogbetreiber ist es auch manchmal recht schwer die gut getarnten Kommentare zu entlavern, die z.B. den Blog loben, nur um damit einen Backlink zu setzen und den Blogbesucher dann auf eine zweifelshafte Seite zu lenken.
Ich kontrolliere alle als Spam markierte Kommentare mit Hilfe meines Kommentar-Feed Plugins per Outlook. Das dauert pro Tag nur ein paar Sekunden und ich kann damit Kommentare finden, die von Akismet fälschlicherweise als Spam markiert wurden, was aber extrem selten passiert.
Mein Spam/Ham Verhältnis, wie es die Akismet-Statistiken anzeigen ist zur Zeit bei ca. 1:22 was also bedeutet, dass auf einen guten Kommentar 22 Spam Kommentare kommen. Mein Aksimet “Yummy Pie” sieht also zur zeit wie folgt aus:
Wem dieser Kuchen genauso wenig schmeckt wie mir, der kann gerne etwas dagegen unternehmen, indem er mal das ein oder andere Kommentar hinterlässt. Die Hürden dazu habe ich wie gesagt sehr niedrig gesetzt.
Allen Lesern, die selbst einen Blog betreiben und noch kein Akismet einsetzen, kann ich dies nur nochmals empfehlen. Es benötigt keinen großen Aufwand und erspart einem viel Zeit beim aussortieren des Spams. Die nächste Plugin Empfehlung wird wohl über WPtouch sein, dass ich seit Anfang des Jahres einsetze. Der ein oder andere Handy-Surfer wird es wohl schon bemerkt haben.
Spendenaufruf für Haiti mal anderes
In meinem WordPress Dashboard (der Administrations-Startseite) war heute ein interessanter Artikel mit dem Titel Ich will euer Geld aufgeführt. So ein Artikel macht mich natürlich neugierig.
Es handelt sich um einen Spendenaufruf für die Kindenothilfe, die sich auch um die Opfer der Erdbebenkatastrophe von Haiti kümmert. Frank Bültge, der Autor der Seite, spendet hierbei den zweifachen Betrag aller seiner Paypal-Spenden des letzen Jahres an die Kindernothilfe. Ich finde die Idee richtig gut. Auch ich hatte vor einen Betrag zu spenden, aber da auf meinem Paypal-Account bisher noch nicht ein Cent an Spenden eingegangen ist, habe ich mich dazu entschieden meine AdSense Einnahmen zu verdoppeln und diese zu spenden.
Auch Google ruft auf seiner Startseite zum Spenden auf und jeder von uns wird ja noch den ein oder anderen Euro übrig haben. Das Spenden per Paypal ist ja auch keine allzu große Sache und jeder Euro hilft.
Wenn hierdurch jemand zusätzlich dazu ermutigt wurde mir auch mal einen kleinen Betrag zu spenden, weil er z.B. mit einem meiner Plugins zufrieden ist, umso besser. Aber die Menschen auf Haiti benötigen diese zur Zeit sehr viel dringender. Eine Liste mit Hilfsorganisationen, die Spenden für Haiti sammeln hat tagesschau.de zusammengestellt.
UPDATE: Habe soeben meine Überweisung an Plan International vorgenommen. Dort bin ich zusammen mit meinen beiden Brüdern schon seit über 10 Jahren Pate. Wer sich auch dafür engagieren möchte, sollte sich einfach mal dort informieren.
Einen WordPress Blog mehrsprachig anbieten mit dem qTranslate Plugin
Wie bereits angekündigt folgt hier nun ein weiterer Artikel über eines der von mir verwendeten Plugins. Heute geht es um das Plugin qTranslate, das die Grundlage für die Mehrsprachigkeit meines Blogs bildet. Ich habe im Vorfeld viele Plugins für mehrsprachige WordPress Blogs getestet, aber keines war nur annähernd so umfangreich und zuverlässig wie qTranslate.
Installation und grundlegende Einstellungen des Plugins
Das Plugin kann genauso einfach installiert werden wie jedes andere auch. Es ist prinzipiell auch keine Anpassung irgendwelcher Zugriffsrechte notwendig und es müssen auch keine Änderungen am Theme vorgenommen werden. Das hat mich zuerst etwas überrascht, aber es hat auf anhieb funktioniert.
Bevor ihr das Plugin verwendet, solltet ihr ein paar grundlegende Einstellungen über das Adminmenü, das ihr über den Link “Sprachen” erreicht, vornehmen. Als erstes solltet ihr natürlich festlegen, welche Sprachen ihr in eurem Blog anbieten möchtet und welche davon die Standardsprache ist. Die Sprache, die ihr hier einstellt wird aber nicht in jedem Fall verwendet. Nehmen wir z.B. an, dass einer eurer Besucher in seinem Browser Englisch als Standardsprache ausgewählt hat. Dieser Besucher bekommt dann automatisch den Blog in englischer Sprache präsentiert, vorasugesetzt, ihr bietet ihn auch in englisch an. Sollte aber ein Besucher z.B. Spanisch gewählt haben, und ihr bietet die Sprache nicht an, dann wird die zuvor gewählte Standardsprache präsentiert.
Die zweite wichtige Option betrifft die Links, die für die anderen Sprachversionen verwendet werden sollen. Diese Option findet ihr unter “Erweiterte Einstellungen”. Ich verwende für meinen Blog den Query-Modus, da ich bei den beiden andern Modi Probleme mit verschiedenen Plugins hatte.
Zuletzt solltet ihr euch noch die übrigen erweiterten Funktionen ansehen und überlegen, welche davon für euch sinnvoll wäre. Sehr wichtig könnte hier die “Datum / Zeit Konvertierung” sein, da je nach verwendeter Datumfunktion in euerm Tempalte sonst keine korrekten Zeit- und Datumsangaben ausgegeben werden können.
Verwendung des Plugins
Sobald ihr einen neuen Artikel verfassen möchtet, werden euch vermutlich zuerst die zusätzlichen Titel-Eingabefelder auffallen. Pro Sprache kann hier ein eigener Titel eingegeben werden. Wenn ihr den Blogtitel auch für eure Permalinks verwendet, wird allerdings immer der Titel der Standardsprache für den Permalink verwendet zzgl. Modifikation durch den zuvor eingestellen Modus.

Ebenfalls hinzugekommen ist ein Umschalter für den Inhalt des Artikels, hier könnte ihr jede Sprache in einem eigenen “Tab” bearbeiten. Ich erstelle in der Regel einen Artikel zuerst in deutsch und kopiere dann den gesamten Inhalt in den englischen Tab und ihn dort Absatz für Absatz zu übersetzen. Somit kann ich Links, Bilder und Quelltexte an der Stelle direkt wiederverwenden. Einige der Bilder oder Quelltexte werden von mir aber auch in der englischen Version ausgetauscht bzw. ersetzt.
Übersetzung von Schlagwörtern und Kategorien
Ein wenig versteckt ist die Möglichkeit auch die Schlagwörter (Tags) und die Kategorien zu übersetzen. Wenn man beim Verfassen eines neuen Artikels ein neues Schlagwort oder eine neue Kategorie anlegt, dann wird erst einmal für jede Sprache der Wert für die Standardsprache verwendet. Ihr könnt aber sehr einfach über die Verwaltung der Schlagwörter und Kategorien im Adminmenü alles für die anderen Sprachen übersetzen. Diese Übersetzung gilt dann für denen Bereich, in dem die Schlägwörter eingesetzt werden. Auch Plugins für Suchmaschinenoptimierung, die eventuell die Schlagwörter für den META-Tag “keywords” verwenden, bekommen so den übersetzen Wert geliefert.
Den Umschalter nicht vergessen
Damit eure Benutzer auch zwischen den verschiedenen Sprachen hin- und herschalten können, dürft ihr natürlich den Umschalter nicht vergessen. Am einfachsten geht das mit dem von qTranslate bereitgestellten Widget, dass ihr in eine eurer Seitenleisten einbauen könnt. Platziert es am besten sehr weit oben, damit ein Benutzer, der die Sprache eures Blogs nicht sofort versteht, direkt erkennen kann, dass es den Blog auch in anderen Sprachen gibt.
Ich wünsche euch nun viel Spaß beim Testen von qTranslate. Wenn ihr Fragen oder Anmerkungen zum Artikel habt würde ich mich wie immer über einen Kommentar sehr freuen.
Mehrere WordPress Blog-Feeds an Google Feedburner weiterleiten
Ich habe eine Zeitlang das FD Feedburner Plugin for WordPress auf meinem Plugin eingesetzt, um meinen Artikel-Feed sowie meinen Kommentar-Feed auf Feedburner weiterzuleiten. Jetzt ist mir aber aufgefallen, dass das keine optimale Lösung war. Der Hauptgrund war, dass ich meinen Blog mit Hilfe des qTranslate Plugins in zwei Sprachen anbiete. Somit kann auch der Feed in diesen zwei Sprachen abonniert werden. Genau hier stört allerdings das Plugin. Der englische Feed wird durch den Parameter ?lang=en aufgerufen, das Plugin beeinflusst allerdings alle Feed, also auch solche mit Parametern.
Da es keine Möglichkeit gab dies über das Plugin zu lösen, habe ich mir eine eigene, aber gleichzeitig auch sehr einfache und erweiterbare Möglichkeit überlegt. Die Lösung für das Problem ist die Anpassung der .htacces Datei. Dies hat auch den Vorteil, dass dazu alle Links zum Feed umgeleitet werden, unabhängig davon, wo sie auftauchen. Die .htaccess sieht in meinem Fall wie folgt aus:
# BEGIN Feedburner feed rewrites
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} !FeedBurner
RewriteCond %{QUERY_STRING} ^lang=en$
RewriteRule ^feed$ http://feeds.feedburner.com/Kau-boysBlog_en [L]
RewriteCond %{HTTP_USER_AGENT} !FeedBurner
RewriteRule ^feed$ http://feeds.feedburner.com/Kau-boysBlog [L]
RewriteCond %{HTTP_USER_AGENT} !FeedBurner
RewriteCond %{QUERY_STRING} ^lang=en$
RewriteRule ^comments/feed$ http://feeds.feedburner.com/CommentsForKau-boysBlog [L]
RewriteCond %{HTTP_USER_AGENT} !FeedBurner
RewriteRule ^comments/feed$ http://feeds.feedburner.com/Kommentare-Fuer-Kau-boys-Blog [L]
</IfModule>
# END Feedburner feed rewrites
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Interessant ist hier der erste Abschnitt der .htaccess, der untere wurde automatisch von WordPress erzeugt und kann sich von eurem unterscheiden, je nachdem welche Permalink Struktur ihr gewählt habt. Wichtig zu erwähnen ist hierbei auch, dass mein Blog nicht in einem Unterordner wie “wordpress” oder “blog” liegt, sondern auf höchster Ebene der Domain, also direkt im “httpdocs” Order sollte euer Blog in einem Unterordner liegen, müsst ihr diesen entsprechen in den Zeilen 7, 9, 12 und 14 angeben. Sehr wichtig ist auch das “^” am Anfang der RewriteRule, damit nicht jeder Feed-Link durch Zeile 9 umgeleitet wird. Auch das “[L]” am Ende solltet ihr nicht vergessen, damit das Rewriting nach der entsprechenden RewriteRule abgebrochen wird und nicht durch eure Permalink-Rules nachträglich beeinflusst wird.
UPDATE: Wie ich heute auf der Feedburner Website erfahren habe, muss zusätzlich die Zeile RewriteCond %{HTTP_USER_AGENT} !FeedBurner vor jeden Rewrite eingefügt werden, da Feedburner selbst auch den Feed lesen können muss. Somit darf der User-Agent FeedBurner natürlich nicht auf sich selbst weitergeleitet werden.
Die Feed selbst müsst ihr natürlich noch bei Feeburner “burnen”, damit ihr sie hier auch verwenden könnt. Die RewriteRule könnte in abgewandlet Form auch für andere Parameter verwendet werden. Wenn ihr beispielsweise pro Kategorie einen Feed anbieten möchtet, wäre folgende Zeile sinnvoll:
RewriteRule ^category/(.*)/feed$ http://feeds.feedburner.com/YourFeed_$1 [L]
Mit dieser Zeile könnt ihr dann alle zukünftigen Kategorien von eurem WordPress Blog an Feedburner weiterleiten. Selbstverständlich müsst ihr auch hier zuvor jeden Feed bei Feedburner “burnen” und dabei dann einen Namen wie z.B. YourFeed_Allgemein verwenden. Die Links zu den Kategorie-Feeds könnt ihr dann über euer Template entsprechend zusammenstellen lassen.
Ich hoffe, dass euch der Tipp weiterhelfen konnte. Wenn ihr Fragen dazu habt oder ihr vielleicht ein Plugin kennt, das die beschriebene Funktionalität ohne eine Änderung der .htaccess bietet, würde ich mich wie immer über einen Kommentar freuen.
Microsoft tritt der W3C SVG Working Group bei
Wie Microsoft gestern auf seinem IEBlog mitgeteilt hat, werden sie der W3C SVG Working Group beitreten. Dies bedeutet, dass SVG für Microsoft in Zukunft einen höheren Stellenwert hat und sie sich damit nicht mehr auf VML beschränken.
Für uns als Webentwickler wird damit das Thema in Zukunft wohl interessanter werden. Bisher musste man einen Nutzer, der den Internet Explorer verwendent stets dazu nötigen sich ein Plugin von Adobe zu installieren, zu welchem aber im letzen Jahr die Weiterentwicklung eingestellt wurde.
All denjenigen von euch, die bisher noch kein SVG eingesetzt haben, würde ich empfehlen es einfach mal auszuprobieren. Aus vielen Vektorprogrammen lässt sich direkt der SVG Quellcode erzeugen. Dieser kann dann entweder direkt in einem unterstützdenden Browser geöffnet werden, oder aber in eine Website eingebunden werden. Hier habe ich mal ein kleines Beipspiel integriert. Wer aber keine SVG fähigen Browser hat, wird das Bild leider nicht sehen können. Diejenigen müssen dann wohl bis zum IE9 warten, bis es ohne Plugin angezeigt werden kann:
Quelle: Wikipedia.de
Wikipedia verwendet schon seit längerem SVG Grafiken für verschiedene Bilder. Wer mehr über SVG und das manuelle Erstellen einer Verktorgrafik lernen möchte, findet z.B. auf der Seite selfsvg.info eine recht ausführliche Beschriebung der einzelnen Elemente und deren Eigenschaften.
Habt ihr SVG schon einmal eingesetzt? Welche Tools nutz ihr zur Erstellung und wo seht ihr die Grenzen von SVG? Über Kommentare würde ich mich wie immer freuen.













