Archiv der Kategorie: Webentwicklung

WordPress-Suchmaschine für Entwickler

Kürzlich habe ich eine auf WordPress spezialisierte Suchmaschine namens WPSeek.com für Plugin-Entwickler und Theme-Autoren entdeckt. Hier kann man in ein Suchfeld WordPress-Funktionen, Filter, Aktionen und Konstanten eingeben, zu denen man nähere Informationen wünscht.

Nun ist es bloß leider so, dass einem ja die genauen Namen meistens nicht geläufig sind. Doch die Suchmaschine findet natürlich auch etwas, wenn man nur ein Wort eingibt, zum Beispiel category. Dann klappt unter dem Eingabefeld eine Liste der gefundenen Begriffe auf – und schließt sich nach kurzer Zeit wieder. Dumm, wenn man so schnell nicht auf einen der verlinkten Begriffe geklickt hat. Und komischer Weise passiert nichts, wenn man dann rechts neben dem Suchfeld das Lupensymbol anklickt; betätigt man allerdings die Eingabetaste, während der Cursor im Textfeld steht, wird unter dem Suchfeld eine Liste mit Vorschlägen ausgespuckt. Dieses Bedienkonzept ist meiner Meinung nach verbesserungswürdig. Doch auf jeden Fall findet man hier eine ganze Menge an Informationen und Quellcodes.

Meine ersten Anlaufstellen werden aber vermutlich immer die offizielle WordPress-Code-Dokumentation namens Codex sowie die Code-Referenz bleiben. Auf diesen beiden Plattformen findet man eigentlich alles, was man sucht und braucht.

Pulse CMS in neuen Händen

Mark und Ulli, die bisher das datenbanklose Content-Management-System Pulse CMS programmiert und vertrieben hatten, haben am 12. Dezember 2015 verkündet, dass sie ihr CMS jetzt an einen neuen Besitzer übergeben haben. Ich hatte vorher schon gelesen, dass sie ihr CMS mitsamt der Domain verkaufen wollten.

Der neue Besitzer ist Michael Frankland, von dem Dropkick CMS stammt. Ich war froh zu hören, dass Mark und Ulli sich für ihn als Käufer entschieden haben, denn sein Dropkick CMS habe ich vor gar nicht langer Zeit entdeckt und bin auch von diesem CMS sehr angetan. Da ich Fragen zu Dropkick hatte, habe ich per E-Mail Kontakt zu ihm aufgenommen und schnell und freundlich Antwort bekommen. Deswegen gehe ich davon aus, dass er auch Pulse gewissenhaft weiter entwickeln und vertreiben wird. Er hat außerdem geäußert, beide Systeme bestehen zu lassen, sie also nicht miteinander verschmelzen zu wollen. Das ist eine gute Entscheidung, denn beide Content-Management-Systeme sind doch recht unterschiedlich.

Da ich neben concrete5 und WordPress neuerdings auch Pulse für Kunden-Websites einsetze, werde ich zukünftig hier im Blog auch immer mal wieder über dieses CMS schreiben.

MarkdownPad: Live-Vorschau klappte nicht

MarkdownPad ist ein Editor für das Windows®-Betriebssystem, mit dem man Markdown-Dateien erstellen und bearbeiten kann (Markdown ist eine Textauszeichnungssprache mit einfacher Syntax). Eine sehr schöne Funktion von MarkdownPad ist es, links den Text zu schreiben und rechts sich eine HTML-Vorschau anzeigen zu lassen – um zu sehen, wie der Text später in einem Webbrowser aussehen wird. Und diese Vorschau klappte auf einmal nicht mehr.

This view has crashed
(Aufs Bild klicken zum Vergrößern)

Unter Windows 7 hatte diese Vorschau tadellos funktioniert, doch nach dem Upgrade auf Windows 10 tat sie das nicht mehr. Dieses Phänomen soll schon unter Windows 8 gelegentlich aufgetreten sein, und die entsprechende Lösung klappte bei mir auch in Windows 10. Man soll das Awesomium-SDK (Software Development Kit) installieren, außerdem Microsofts DirectX End-User Runtimes (June 2010). Das tat ich beides, und anschließend klappte die Vorschau wieder. Allerdings nicht sofort – ich musste im Texteingabebereich des Editors ein bisschen hin und her scrollen und mit der Maus in den Text klicken, und irgendwann sprang die Vorschau im rechten Bereich der Programmoberfläche wieder an. Klingt verrückt, war aber so. Vermutlich hätte auch ein Neustart des Programms geholfen.

Concrete5: Vereinfachtes Bloggen in 5.7

Das Bloggen war in concrete5 früher ziemlich umständlich, und auch sonst war die Bedienung des Systems nicht ganz intuitiv. Aber das CMS ist ja im Jahr 2014 von Grund auf neu programmiert worden. Mit den ersten Versionen des Entwicklungszweiges 5.7 war ich äußerst unzufrieden, sie waren – mit Verlaub gesagt – unbrauchbar. Doch die aktuelle Version 5.7.5.1 (Stand: November 2015) ist richtig klasse. Was mir besonders gut gefällt: Endlich kann man auf einfache Weise mit concrete5 bloggen. Klar, auch in 5.6 war ein im Kern eingebautes Blogmodul vorhanden – allerdings war die Handhabung, wie gesagt, alles andere als benutzerfreundlich. Jetzt geht das einfacher. Loggen wir uns ins Backend einer Standardinstallation ein und schauen uns das an!

Im rechten Bereich der oberen Menüleiste klickt man auf das Seitensymbol und dann auf Blogeintrag.

Concrete5: Vereinfachtes Bloggen in 5.7 (Bild 1)
(Aufs Bild klicken zum Vergrößern)

Daraufhin öffnet sich automatisch der Composer und erlaubt es, auf einfache Weise einen Blogartikel zu verfassen. Oben gibt man die Meta-Daten ein, die für die Suchmaschinen von Bedeutung sind: Seitentitel und Beschreibung. Der Seitentitel ist gleichzeitig die Hauptüberschrift des Artikels. Der freundliche URL wird aus dem vergebenen Titel automatisch generiert, aber er lässt sich auch von Hand ändern.

Concrete5: Vereinfachtes Bloggen in 5.7 (Bild 2)
(Aufs Bild klicken zum Vergrößern)

Rollt man nach unten, erscheint der Texteditor zur Eingabe des Inhalts. Darüber gibt es ein Eingabefeld zur Auswahl eines Beitragsbildes, das in den Blogartikel eingefügt werden soll; das heißt, man gelangt zur Dateiverwaltung, wo man ein bestehendes Bild auswählen kann, oder man lädt dort erst einmal eins hoch.

Über dem Eingabebereich für den Inhalt und das Beitragsbild sieht man noch einen Kasten, der in der deutschen Sprachversion mit Themen betitelt ist – in anderen Blogsystemen wird das oft als Kategorien bezeichnet. So etwas ist nützlich für Blogs, die sich mit verschiedenen Themenbereichen befassen, sodass die Leser die Einträge nach ihren eigenen Interessen filtern können.

Concrete5: Vereinfachtes Bloggen in 5.7 (Bild 3)
(Aufs Bild klicken zum Vergrößern)

Ist man mit dem Erstellen des Artikels fertig, klickt man auf Veröffentlichen, und der Artikel reiht sich an oberster Position auf der Blogartikel-Übersichtsseite in die vorhandenen Beiträge ein.

Veröffentlichungsdatum in Nibbleblog nachträglich ändern

Wie kann man das Veröffentlichungsdatum eines Artikels im Blogsystem Nibbleblog nachträglich ändern? Diese Frage ist bei einem meiner Leser aufgetreten. Der Grund, warum das Datum überhaupt geändert werden soll, soll uns hier nicht interessieren, sondern allein die Frage, wie so eine Änderung zu bewerkstelligen ist.

Nibbleblog zeigt ja im Frontend das Veröffentlichungsdatum der Blogbeiträge an. Auch im Backend sieht man dieses Datum. Nur – wie kann man dieses nachträglich ändern? Denn eine Einstellungsmöglichkeit ist zunächst nicht vorhanden, das heißt, standardmäßig nicht voreingestellt (die mir vorliegende Version ist Nibbleblog 4.0.5 vom September 2015).

Nun, man muss dazu eine bestimmte Einstellung ändern. Man setzt ein Häkchen unter Dashboard > Einstellungen > Erweiterte Blogoptionen > Erweiterte Optionen für Posts. Fertig, das war’s. Jetzt erscheinen im Bearbeitungsmodus eines Blogartikels zusätzliche Optionslisten für das einzustellende Jahr, den Monat usw.

Nibbleblog: Erweiterte Otionen für Posts (1)

Nibbleblog: Erweiterte Otionen für Posts (2)

Kann man also auch Artikel vorfertigen, sodass sie erst zu einem späteren Zeitpunkt veröffentlicht werden? Die Antwort lautet: Nein. Denn erstens werden die Optionen zum Einstellen des Veröffentlichungszeitpunkts erst dann angezeigt, wenn ein als Entwurf gespeicherter oder bereits veröffentlichter Artikel erneut zum Bearbeiten geöffnet wird. Und zweitens nützt es auch gar nichts, das Datum vorzuverlegen, da der Artikel trotzdem gleich dann veröffentlicht wird, wenn man auf Veröffentlichen klickt. Das empfinde ich als Manko, weil ich es zum Beispiel von WordPress her gewohnt bin, mehrere Artikel auch schon mal an einem Stück zu schreiben, aber erst zeitversetzt veröffentlichen zu lassen.

Einbruchsversuche in WordPress-Blogs

In letzter Zeit (September 2015) bemerke ich wieder verstärkt Einbruchsversuche (Brute-Force-Attacken) in eigene oder von mir betreute WordPress-Blogs von unzähligen IP-Adressbereichen weltweit.

Die Benachrichtigungen bekam ich über das installierte Plugin Login Security Solution. Das Seltsame ist nur, dass ich per .htaccess-Datei den Zugriff auf die Datei wp-login.php auf den von meinem Internet-Service-Provider vergebenen IP-Adressbereich beschränkt habe (im Beispiel durch x symbolisiert):

# --- Adminbereich absichern ---
<Files wp-login.php>
Order Deny,Allow
Deny from all
Allow from xx.xxx.
</Files>

Also sollte doch ein Bot, der von einem anderen IP-Bereich aus angreift, gar nicht bis zur Login-Datei gelangt sein dürfen. Falls jemand eine Idee oder einen Hinweis hat, wäre es nett, dies in den Kommentarbereich zu schreiben.

Ich habe jetzt eine zusätzliche Sicherheit in die .htaccess-Datei geschrieben (wobei für domainname natürlich der richtige, eigene Domainname einzutragen ist):

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{HTTP_REFERER} !^http://(.*)?domainname\.de [NC]
RewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)$ [OR]
RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$
RewriteRule ^(.*)$ - [F]
</IfModule>

Hoffen wir mal, dass dies bewirkt, dass nun kein Bot mehr von entfernten Domains aus die Blogs angreifen kann.

Eine weitere Möglichkeit wäre folgender Code (die vielen x stehen auch hier für die eigene IP-Adresse, von der aus man sich in sein Blog einloggt):

<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REQUEST_URI} ^(.*)?wp-login\.php(.*)$ [OR]
RewriteCond %{REQUEST_URI} ^(.*)?wp-admin$
RewriteCond %{REMOTE_ADDR} !^xxx\.xxx\.xxx\.xxx$
RewriteRule ^(.*)$ - [R=403,L]
</IfModule>

Und was man noch darüber hinaus tun könnte, wäre, den Adminbereich durch eine weitere Authentifizierung abzusichern.

PHP 7 in der Beta-Phase

Eine PHP-Version 6 war mal geplant, ist aber nie erschienen. Nun geht es nach den Fünfer-Versionen mit Zweig 7 weiter. PHP 7 befindet sich seit 2014 in der Entwicklung und liegt nun bereits als Beta 2 vor (Stand: Ende Juli 2015). Es soll eine drastisch erhöhte Ausführungs-Geschwindigkeit gegenüber 5.6 bringen, nämlich eine bis zu doppelt so hohe. Außerdem wurde alter Müll rausgeschmissen, es gibt neue Operatoren und einige andere Verbesserungen. Zum Testen kann man sich PHP 7.0.0 Beta 2 herunterladen, sogar schon als Windows-Binary, aber man sollte es auf keinen Fall schon in einer Produktivumgebung einsetzen.

EverEdit, ein Texteditor für Programmierer und Webautoren

EverEdit ist ein Texteditor für das Windows-Betriebssystem, der sich an Programmierer und Webautoren richtet. Er bietet Syntax-Hervorhebung und eine Codebibliothek bzw. Codeschnippsel für HTML, CSS und verschiedene Programmiersprachen, zum Beispiel C/C++, Perl, PHP, Java, JavaScript, Python und Rails.

EverEdit
Bild: © everedit.net

Die Oberfläche lässt sich über Vorlagen an den eigenen Geschmack anpassen, und natürlich kann man Schriftart, Schriftgröße und anzuzeigende Leisten und Werkzeuge einstellen.

Was mir persönlich immer wichtig ist:

  • Klickt man auf ein öffnendes HTML-Tag, wird es zusammen mit dem schließenden markiert, ebenfalls werden Klammerpaare markiert.
  • Codeblöcke lassen sich zusammenfalten, sodass man bei längeren Quelltexten den Überblick behält.
  • Mit Hilfe von Snippets lassen sich längere Codepassagen, die öfters benötigt werden, abspeichern und wiederverwenden.

Das können viele andere Texteditoren auch, aber EverEdit bietet einige Besonderheiten:

  • Durch sehr lange Quellcodes lässt sich über eine verkleinerte Ansicht rechts oben im Fenster schnell scrollen.
  • Es lassen sich zwei Dateien miteinander vergleichen und so zum Beispiel Unterschiede einer älteren und einer neueren Version leicht ermitteln.
  • Die Statusleiste bietet neben verschiedenen Informationen auch die Möglichkeit, direkt zu einer bestimmten Zeile zu springen, die Syntax-Hervorhebung zu ändern, die Tabulator-Weite zu ändern und anderes.
  • In einer vertikalen Leiste im rechten Fensterbereich kann man, unabhängig von der generellen Einstellung, die Textgröße vergrößern oder verkleinern.

Gelungen ist auch die Vorschau von HTML-Dateien im internen Browser. Und für Markdown gibt es ebenfalls eine eingebaute Vorschau.

EverEdit: Markdown-Vorschau
Bild: Screenshot von EverEdit

Dies sind nur einige Features, und das Programm ist damit noch längst nicht vollständig beschrieben. Es kann sich aber jeder Windows-Benutzer selbst ein Urteil über die Software bilden, denn man kann sie zum Testen für 30 Tage herunterladen. Das Programm ist erhältlich in 32 und 64 Bit, außerdem jeweils zum Installieren oder als portable Version. Leider ist die Programmoberfläche nicht in deutscher Sprache, sondern wahlweise in Englisch, Französisch, Japanisch und Chinesisch.

Der Preis liegt bei 35 $. Das ist für eine lebenslange Lizenz nicht viel, und es sollen bei neuen Programmversionen keinerlei Upgrade-Gebühren fällig werden.

Ein solcher universeller Editor ist eine feine Sache, wenn man oft in vielen verschiedenen Sprachen programmiert. Wenn man aber vorwiegend in nur einer Sprache entwickelt, zum Beispiel in PHP, empfiehlt sich eher ein spezialisierter Editor.

Witziges Promo-Video für den Texteditor Atom

Atom 1.0 ist ein konfigurierbarer und erweiterbarer Texteditor zum Programmieren für OS X, Windows 7 und 8, RedHat Linux und Ubuntu Linux, der auf JavaScript basiert. Er ist quelloffen und steht unter der MIT-Lizenz. Ich habe mir die Windows-Version heruntergeladen, bin aber noch nicht zum Testen gekommen.

Atom-Editor
Illustration von der Website https://atom.io

Witzig finde ich jedenfalls ein Promotion-Video, das den Editor vorstellt. Dieser wird zwar in den Texten als besonders modern bezeichnet – das Video allerdings ist extra auf Retro gemacht. Es spielt in den sechziger Jahren des letzten Jahrhunderts. Die Farben, die Hintergrundmusik, der Sprecher – alles ist stimmig. Gut gemacht!

Man findet das Video auf der Atom-Website, kann es sich aber auch auf YouTube ansehen.

Atom-Editor
Screenshot aus dem Video Introducing Atom 1.0! auf https://atom.io

Das fehlende zweite Argument für wpdb::prepare()

Für eine Kunden-Website mit WordPress-Unterbau hatte ich einmal eine kleine Daten­bank­anwendung gebaut: Die Pfade zu den Logos der angeschlossenen Mitgliedsunternehmen wurden automatisch aus den Datensätzen einer Datenbanktabelle ausgelesen und an eine JavaScript-Slideshow weitergereicht. Bei einer Änderung eines Firmenlogos oder bei neu hinzugekommenen oder ausgeschiedenen Unternehmen wird ja sowieso die Datenbank geändert, und nun muss man nicht auch noch von Hand die Diaschau pflegen.

Das klappte auch lange Zeit sehr gut, aber vor einiger Zeit erschien eine Fehlermeldung über der Diaschau: Warning: Missing argument 2 for wpdb::prepare(), called in […]. In WordPress-Versionen ab 3.5 benötigt das $wpdb-Objekt zwei Argumente, vorher hatte eines genügt. Genauer gesagt: im Fall, dass eine WHERE-Klausel gesetzt wurde, werden zwei Argumente benötigt; aber offensichtlich auch, wenn man ORDER BY verwendet. Da es in diesem Fall kein sinnvolles zweites Argument geben kann, setzte ich NULL dahinter, und das Problem war erledigt.

global $wpdb;
$wpdb->show_errors();
$mitglieder = $wpdb->get_results (
    $wpdb->prepare (
        "SELECT logoundinfo
        FROM [Tabelle]
        ORDER BY firmenname ASC", NULL
    )
);

Genauere Angaben zur Verwendung der wpdb-Klasse findet man im sogenannten WordPress-Codex, also der Code-Referenz.