WordPress als Blog-Plattform im Unternehmen

Der Einsatz von Webtechnologien wie Wikis oder Blogs in Unternehmen setzt sich zur Zeit immer mehr durch (siehe z.B. im CIO Weblog, bei bueltge oder bei basicthinking).
Und da wir in unserem Unternehmen bereits ein umfangreiches Intranet und auch ein Wiki pflegen, war der nächste Schritt für mich die Umsetzung einer Blog-Plattform. Daher habe ich bereits vor einiger Zeit eine Software zur Umsetzung einer Blog-Plattform gesucht. Mittlerweile ist diese Blog-Plattform umgesetzt und läuft seit einigen Monaten produktiv. Und zwar unter WordPress.

Was ich dabei für Plugins verwendet habe und was ich sonst so tun musste, beschreibe ich in diesem Artikel.

Einleitung

Zunächst einmal möchte ich meine Anforderungen an die zu erstellende Plattform vorstellen:

  • Mehrbenutzerfähigkeit
    • Mehrere Benutzer mit unterschiedlichen Rollen (Admin, Editor etc.)
    • (RSS-)Feeds je Autor
  • Einfach zu benutzen
    • WYSIWYG-Editor
    • Keine Anmeldung durch die Benutzer erforderlich (bzw. automatische Anmeldung)
    • Aufgeräumte, auf das Wesentliche reduzierte Editor-Oberfläche
  • Einfach zu erweitern/anzupassen
    • Gute Dokumentation
    • Viele Plugins verfügbar
    • An das Corporate Design anpassbar
  • Stabilität
    • Ausgereifte Software
    • Auch unter Last fehlerfrei lauffähig

Alle Blog-Systeme, die ich mir angeschaut habe (u.a. LifeType nach einem Tipp aus dem webdesignblog, Drupal und WordPress MU) erfüllten diese Anforderungen teilweise nicht. Am Häufigsten scheiterte es jedoch an der automatischen Anmeldung der Benutzer. Um die Einstiegshürden möglichst niedrig zu legen, wollte ich nämlich ein automatisches Login via IP-Adresse implementieren, wie ich es auch für unsere anderen Intranet-Systeme (TYPO3, MyBB) umgesetzt habe. Doch dazu später mehr…

Die logische Konsequenz aus der Anforderung “Mehrbenutzerfähigkeit” wäre gewesen, WordPress MU einzusetzen, das extra zu diesem Zweck entwickelt wurde. Live-Tests zeigten jedoch (zumindest damals) derbe Schnitzer beim Design der Anwendung. So wurden z.B. für jeden Benutzer eigene Tabellen in der Datenbank angelegt. Ein absolutes Ausschlusskriterium für mich. Letztlich landete ich bei LifeType, dass eigentlich alles bot, was ich brauchte. Sehr nett fand ich z.B. die Möglichkeit, je Benutzer unterschiedliche Layouts zu verwenden. Nur ein zentraler Punkt klappte nicht: das IP-Auto-Login. Ich versuchte zwar selbst ein entsprechendes Plugin zu schreiben, aber leider gab es augerechnet für die Benutzeranmeldung keinen passenden Ansatzpunkt (vielleicht hat sich das inzwischen geändert!?).

Lange Rede, kurzer Sinn: Ich habe das Ganze nun mit WordPress umgesetzt 🙂

Mehrbenutzerfähigkeit

WordPress bietet von Haus aus bereits eine sehr gute Unterstützung für mehrere Benutzer und verschiedene Benutzerrollen. Hier musste ich also letztlich nichts ändern oder hinzufügen. Lediglich im Frontend wollte ich separate Seiten bzw. Feeds für jeden Benutzer anbieten, wie man es auch von”großen” Plattformen kennt, damit die Leser nicht ständig die Beiträge aller Autoren angezeigt bekommen, sondern gezielt auswählen können.

Diese Funktion bietet WordPress von Haus aus. An die URL des Blogs kann man einfach /author/name-des-autors anhängen und man bekommt eine Liste mit den Artikeln des Autors (hier z.B. der Link für mein Blog, obwohl es hier natürlich nur einen Benutzer gibt: http://blog.stefan-macke.de/author/stefan).

Eine recht einfache Lösung zum Erstellen einer Liste aller Autoren bietet die WordPress-Funktion wp_list_authors(), die sogar lediglich die aktiven Autoren (also die mit veröffentlichten Beiträgen) auflistet. Diese Funktion habe ich dann in ein Seiten-Template eingebunden und dieses als Grundlage für eine statische Seite verwendet und schon hatte ich die Möglichkeit, alle Beiträge eines Autors gezielt anzeigen zu lassen und auch als Feed abonnieren zu können. Dieses Template sieht (gekürzt um Kopf und Fuß etc.) so aus: <?php if(get_query_var('author_name')) { $curauth = get_userdatabylogin(get_query_var('author_name')); echo '<h1>Alle Beiträge von ' . $curauth->display_name . ' <a href="feed" title="RSS-Feed"><img src="/wp-content/themes/default/images/feed-icon.png" alt="RSS-Feed" /></a></h1>'; if (have_posts()) { while (have_posts()) { the_post(); echo '<h2><a href="'; the_permalink(); echo '">'; the_title(); echo '</a></h2>'; echo '<small>'; the_time('d. F Y, H:i'); echo ' Uhr</small>'; the_content('Den kompletten Beitrag lesen &raquo;'); echo '<p class="postmetadata">'; comments_popup_link('Keine Kommentare &raquo;', '1 Kommentar &raquo;', '% Kommentare &raquo;'); echo '</p>'; } } else { echo ' <p>Bisher keine Beiträge von diesem Autor.</p>'; } } else { ?> <h1>Liste aller aktiven Autoren</h1> <ul> <?php wp_list_authors('show_fullname=true&feed=Feed&feed_image=/wp-content/themes/default/images/feed-icon.png'); ?> </ul> <?php } ?>

Das erzeugt dann eine Seite wie in folgendem Screenshot zu sehen, bzw. listet halt die Beiträge des gegebenen Autors auf (hier muss natürlich jeder selbst wissen, wie er diese darstellen will). Durch das simple hinzufügen von /feed/ zur URL einer solchen Autoren-Seite, kann man auch direkt den zugehörigen Feed verlinken (z.B. http://blog-url/authors/macke/feed/).

listeaktiverautoren.jpg

IP-Auto-Login

Um die Benutzer anhand ihrer IP-Adresse anzumelden, ist es zunächst einmal erforderlich, diese in die WordPress-Datenbank zu schreiben. Wie gut, dass es hierfür bereits eine geeignete Tabelle gibt: wp_usermeta. Ich mache das Ganze während der Windows-Anmeldung im Startskript des Benutzers und trage einfach die aktuelle IP-Adresse zur User-ID des Benutzers mit ipaddress für das Feld meta_key ein. Das Ganze wird mittels eines eigens entwickelten Webservices erledigt.

Um den Benutzer nun automatisch anzumelden, sobald er die Seite besucht, ist das entsprechende Plugin erforderlich. Dieses gibt es inkl. (englischer) Beschreibung hier: WordPress-Login via IP-address.

Noch kurz ein Satz zum Login via IP: Über die Sicherheit des Ganzen lässt sich sicherlich streiten. Für kritische Informationen sollte man dieses Verfahren nicht einsetzen. Allerdings lag mein Schwerpunkt wie gesagt auf der weitestgehenden Vereinfachung für die Benutzer und es werden auch keine sensiblen Daten veröffentlicht.

Eingesetzte Plugins

Ich habe lediglich die folgenden Plugins eingesetzt. Wahrscheinlich gibt es aber noch eine Reihe weiterer Funktionen, die für Unternehmens-Blogs eingesetzt werden können. Für Anregungen habe ich immer ein offenes Ohr 😉

Anpassung des Editor-Bereichs

Wie gesagt: Der Benutzer soll einen aufgeräumten, übersichtlichen Editor-Bereich vorfinden. Daher habe ich zunächst die RSS-Feeds aus dem “Tellerrand” entfernt und des Weiteren nur die Links zum Schreiben und Verwalten der eigenen Beiträge übriggelassen. WordPress bietet ja von Haus aus WYSIWYG, sodass ich mich weiter um nichts kümmern musste…

Anpassung des Themes

Das Theme habe ich natürlich an die Corporate Identity angepasst, was aber nicht weiter schwer sein dürfte. Es gibt im Netz genug Tutorials, wie man seine eigene WordPress-Oberfläche erstellt, sodass ich darauf hier nicht näher eingehen werde.

Finden von Informationen

Die Blog-Plattform dient bei uns vorerst nur der zeitnahen Information der Mitarbeiter über interessante Themen (vorrangig aus dem EDV-Bereich), aber es werden durchaus auch längere Artikel verfasst, deren Inhalte auch später einmal relevant sein werden. Daher ist die Möglichkeit des Wiederauffindens von Informationen ein wichtiger Punkt. Zwar bietet WordPress auch eine interne Suche an, aber diese habe ich durch unsere Intranet-Suchmaschine ersetzt (was recht einfach als kleine Änderung im Theme möglich ist). Somit kann ich die Vorteile der eingesetzen Suchmaschinen-Software mnoGoSearch direkt aus der Blog-Oberfläche heraus nutzen.

Auslagerung der Benutzerverwaltung nach TYPO3

Als einen letzten Schritt habe ich die Benutzerverwaltung von WordPress komplett nach TYPO3 ausgelagert. Hierzu habe ich eine Erweiterung für TYPO3 programmiert, die die dort erstellten/geänderten Benutzer mit WordPress synchronisiert. Dadurch haben die Administratoren lediglich eine Oberfläche zum Bearbeiten der Benutzer. Dies ist natürlich nur für mein Unternehmen praktikabel, da wir TYPO3 für den Hauptteil des Intranets einsetzen und dies unsere zentrale Plattform ist, auf der alle wichtigen Änderungen gemacht werden. Vielleicht schreibe ich in einem späteren Beitrag noch einmal genau, wie ich die Synchronisation umgesetzt habe…

Fazit

Zum Abschluss kann ich sagen, dass man mit WordPress durchaus eine Blog-Plattform für ein Unternehmen aufsetzen kann, die sämtliche Anforderungen an eine leicht zu bedienende Oberfläche und gut integrierte und flexible Struktur umsetzt.

Ob die Mitarbeiter die Plattform dann letztlich nutzen, steht natürlich auf einem ganz anderen Blatt… Ich bin jedenfalls bislang sehr gut mit meiner Umsetzung zurechtgekommen und die übrigen Benutzer haben sich bislang auch nicht beschwert 😀

Webservices mit PHP und VBScript

Gestern abend habe ich die Lektüre des Buches Webservices mit PHP abgeschlossen. Ich habe es mir aus der Landesbibliothek Oldenburg ausgeliehen, in der Hoffnung einige Anregungen zur Umsetzung von Webservices mit PHP zu bekommen. Allerdings hätte ich bei der Datumsangabe stutzig werden sollen… 2004 ist schon laaange her 🙂 Daher sind die angegebenen Implementierungen nicht mehr ganz so aktuell.

Im Buch werden PEAR::SOAP und NuSOAP verwendet. In der Firma habe ich aber schon mit der PHP-Extension php_soap rumgespielt, die recht einfach über den Linux-Paketmanager installiert werden kann. Dabei müssen dann auch keine PHP-Dateien inkludiert werden, sondern die SOAP-Funktionen stehen direkt zur Verfügung.

Mit seinen 200 Seiten ist das Buch auch nicht allzu umfangreich. Es liefert nur einen oberflächlichen Einstieg in das Thema Webservices (was aber auch von den Autoren gewollt ist) und bietet als “Abschlussprojekt” aus der Praxis die Umsetzung eines sehr (!) einfachen Blog-Systems mit Hilfe von Webservices. War zwar interessant zu sehen, was mit PHP 2004 möglich war, aber für meine heutige Arbeit hat mir das Buch recht wenig gebracht. Da verlasse ich mich dann doch lieber auf aktuelle Internetquellen…

Ich habe auch schon meinen ersten funktionierenden Webservice mit PHP5 aufgesetzt: die Anmeldung von Benutzern am Intranet. Läuft sehr gut und kann vor allem auch aus dem Windows-Startscript (Batch und VBScript) aufgerufen werden. Vorher musste ich immer auf der Kommandozeile PHP-Code ausführen… Pfui! Jetzt geht es halt schicker mit lediglich ein paar Zeilen Code: Dim SoapClient Set SoapClient = CreateObject("MSSOAP.SoapClient") On Error Resume Next Call SoapClient.mssoapinit("WSDL_URL", "Webservice_Name", "Webservice_Port")

Mehr zum Konsumieren von Webservices mit VBScript gibt es hier: Web Services einfach konsumieren.

Verknüpfungen zu Powershell-Scripts mit Leerzeichen im Pfad

Gar nicht so einfach, eine funktionierende Verknüpfung zu einem Powershell-Script anzulegen, das Leerzeichen im Dateinamen oder -pfad hat. Ich habe aber nach etlichen Versuchen nun rausbekommen, wie das funktioniert.

Ich möchte ein Script auf meinem Desktop verknüpfen, das unter dem folgenden Pfad liegt: E:\Backup Server\Backup Server.ps1 Um dieses Script mit einem Doppelklick ausführen zu können, musste ich den folgenden Befehl als Verknüpfung eintragen: powershell.exe -Command "& 'E:\Backup Server\Backup Server.ps1'"

Die umschließenden Anführungszeichen um den Befehl sind noch nachvollziehbar. Aber wichtig ist das kaufmännische Und (&) und das Umschließen des Scriptpfades mit einfachen Anführungszeichen. Sonst interpretiert die Powershell den String nicht korrekt als Dateinamen. Ein wenig bei der Lösung geholfen hat mir dieser Beitrag: Grundlagen zur PowerShell.

Thunderbird 2.0

…ist draußen und ich habe es mir gleich mal über meine alte Version drüberinstalliert: Funktioniert einwandfrei (natürlich habe ich vorher trotzdem eine Datensicherung gemacht 😉 ) Nur leider sind die meisten Add-Ons (noch) nicht kompatibel. Aber das wichtigste funktioniert tadellos: enigmail

Die Oberfläche ist ein wenig gewöhnungsbedürftig, aber aufgeräumt und doch recht schick anzuschauen. Und so viel hat sich ja nun auch nicht verändert. Halt eine Menge neuer Symbole, an die man sich erstmal gewöhnen muss. Allerdings finde ich das neue Spam-Symbol irgendwie unpassend.

thunderbird_spam_icon3.jpg

Aber es gibt halt auch viele neue Funktionen (z.B. Tags für Mails), die man sich hier sehr gut anschauen kann: Was ist neu in Thunderbird 2?

Trotzdem verweise ich natürlich selbstverständlich auf die Download-Seite des Programms. Denn gute, und zusätzlich noch offene Software muss unterstützt werden! Hier geht’s zum Download: Download Thunderbird 2.0

Stasi 2.0

Heute wird im Bundeskabinett der Gesetzesentwurf zur Vorratsdatenspeicherung diskutiert (kann man sich danach bei Phoenix anschauen). Was es für uns alle heißt, wenn dieses Gesetz in Kraft tritt, kann man sich sehr nett ausmalen (man denke an 1984 als extremes Beispiel für die Ausprägung eines Überwachungsstaates). Für alle, die das nicht können, gibt es hier aber auch eine sehr gute Erklärung zum Thema: 5-Minuten-Info: Vorratsdatenspeicherung. Und auch die Wikipedia bietet einige Informationen: Vorratsdatenspeicherung.

Ich schließe mich mit diesem Beitrag direkt mal der Aktion von netzpolitik.org an und versuche die Öffentlichkeit (bzw. meine Leser 😉 ) über die Brisanz dieses Gesetzes zu informieren und kann nur alle aufrufen ebenfalls ihre Stimme zu erheben. Eine nette Aktion bzgl. 1984 gibt es auch schon: [AKTION] 1984 – für ein besseres Deutschland. Und für Einsteiger ins Thema Datenschutz sei hier noch eine Broschüre des AStA der FH Münster empfohlen: “What the fuck is informationelle Selbstbestimmung!?”.

stasi20-schablone.png

In diesem Sinne: Hoffen wir auf eine bessere Zukunft…

Update: Passend zum Thema Datenschutz/Datensicherheit: Ein Schokoriegel und Lächeln für das Passwort

Unibibliothek Oldenburg

So. Seit gestern bin ich auch berechtigt, aus den Bibliotheken in Oldenburg Bücher auszuleihen 🙂 Für schlappe 5 EUR Anmeldegebühren bekommt man Zugriff auf das reichhaltige Informatik-Angebot. Naja, vorausgesetzt man findet überhaupt den Raum, in dem die Informatik-Bücher stehen. Der ist nämlich alles andere als groß im Vergleich zum BWL-Bereich, der einen riesigen Saal einnimmt. Durch diesen muss man erstmal durch, bis man dann ganz versteckt hinter den Sozialwissenschaften in der Ecke einen winzigen Raum entdeckt, der aber ganz gute Bücher enthält (und z.B. auch ein Archiv der iX und der c’t, aber die habe ich eh zu Hause 😉 ).

Leider waren die meisten für mich interessanten Werke (aus den Themenbereichen SOA, Webservices und Geschäftsprozesse) entweder ausgeliehen, im “Handapparat”, der nicht ausgeliehen wird, oder in der Bibliothek des OFFIS, das seine Bücher wohl auch nicht rausgibt 🙁

Dennoch konnte ich einige recht interessante Bücher mitnehmen, die ich mir nun erstmal den Rest der Woche anschauen werde. Muss nämlich langsam mal was für meine Diplomarbeit tun…

Verdammte Canon-Patronen

Also langsam geht mir mein (eigentlich sehr guter) Canon-Drucker MP510 ziemlich auf den Sack!

Schon zum zweiten Mal erkennt er eine (noch halbvolle!) Patrone nicht mehr. Ist leider noch die Cyan-Patrone, die ursprünglich beim Drucker dabei war (den ich online bestellt habe), sonst wäre ich schon längst im Laden gewesen um das Mistding umzutauschen. Grr… 🙁

Ich kann ja verstehen, dass Canon auch mal langsam mit Tinte Geld verdienen will. Für meinen früheren S200-Drucker konnte ich bei eBay 10 Patronen für 10 EUR kaufen 😉 Aber dass die so einen Müll auf den Markt werfen, finde ich unverschämt. Immerhin kosten die Originalpatronen mal eben 12 EUR (für die CLI-8M/Y/C) bzw. 6 EUR (für die PGI-5BK). Und inzwischen ist es wie gesagt schon die zweite Patrone, die nicht mehr erkannt wird. Beim ersten Mal war die (Schwarz-)Patrone noch randvoll, als sie in den Müll wanderte.

Zum Kotzen!

UPDATE (19.07.2010):
Inzwischen gibt es auch vernünftige Nachbau-Patronen inkl. Chip für den Canon MP510! Die funktionieren super und das Druckbild ist genauso gut wie mit den Originalpatronen. Ich habe die hier ausprobiert und verwende sie ab jetzt immer:

5 x Tintenpatrone kompatibel zu CANON PGI-5BK CLI-8BK CLI-8C CLI-8M CLI-8Y – mit Chip.

UPDATE (19.05.2011)
Hier gibt es noch günstigere Patronen, die genauso gut laufen:

1x Satz kompatible Patronen PGI-5/CLI-8 Canon

Neues Design

Die letzten Tage habe ich damit verbracht, ein neues Design für diese Seite zu erstellen. Und wie man sieht, ist es nun fertig.

In der nächsten Zeit werden noch Stück für Stück weitere kleine Nettigkeiten hinzukommen, aber das Aussehen bleibt auf jeden Fall so…

Kommentare zum neuen Design werden natürlich gerne gesehen 😉

Hier ist nochmal ein Screenshot meines alten Themes.

Screenshot meines alten WordPress-Themes

Den Tellerrand von WordPress anpassen (Feeds entfernen)

Normalerweise werden im Backend von WordPress direkt auf der Startseite RSS-Feeds von wordpress.com angezeigt. Das ist ja ganz nett, erhöht aber die Ladezeit ziemlich. Obwohl die Entwickler in einer der letzten Versionen dieses Laden wohl auf AJAX umgestellt haben, was ein schnelleres Anzeigen des Tellerrands bewirkt, finde ich die Feeds immer noch ein wenig nervig. Für ältere WordPress-Versionen gibt es hier eine Anleitung, um die Feeds zu entfernen: Warum lädt der Tellerrand so lang? (Und wie beschleunige ich ihn?)

Allerdings funktionierte das in meiner Version (2.1.3) schon nicht mehr. Dennoch kann man die Feeds auch hier abschalten, indem man die beiden DIV-Container entfernt (z.B. auskommentiert), die dynamisch mit den Feeds gefüllt werden. So habe ich einfach in der Datei wp-admin/index.php die folgenden Zeilen auskommentiert: <div id="devnews"></div> <div id="planetnews"></div>

Die Zeilen sehen bei mir jetzt so aus: <? /* <div id="devnews"></div> <div id="planetnews"></div> */ ?>