Artikel miteinander verknüpfen in modx

Beziehungen in modx

modx ist sehr flexibel, aber leider an einigen Stellen auch sehr schlecht dokumentiert. Wer nicht gerade Lust und Zeit hat, hier in den APIs zu graben, oder zig Forenbeiträge zu bemühen, der hat in der Regel Pech gehabt. Oft scheitert es dabei an ganz alltäglichen Dingen, wie dem Verknüpfen von mehreren Artikeln.
Ich selbst habe ein wenig testen und suchen müssen, um eine zufriedenstellende Lösung zu finden. Zufriedenstellend ist es für mich dann, wenn ein Redakteur hinterher keine wilden Zeichenfolgen tippen muss, sondern bequem und einfach auswählen kann. Ich brauchte die Funktion, um individuelle Inhaltsboxen in der Sidebar zu füllen, habe aber der Übersichtlichkeit halber hier eine einfachere Verknüpfung gewählt.

Weiterlesen...

PHP 5.3.0 und das "Deprecated"

Frau ist ja immer recht gern auf dem neuesten Stand — nur um dann feststellen zu müssen, dass es vorher halt doch besser war.
Vor ein paar Tagen hat aufgrund irgendwelcher Fehler im System (es stand kurz vorher noch etwas von Bootcaches da) meine Raubkatze das Schnurren aufgegeben und ich musste leider feststellen, dass in den Backups natürlich der Webserver, Mysql und seine Datenbanken und der /usr/ – Ordner nicht mit inbegriffen sind. Da ja gerade PHP 5.3.0 raus ist, war ich sehr erfreut, dass es bei Entropy eben dieses schon fertig kompiliert verfügbar war/ist.
Die Ernüchterung kam dann beim ersten Aufruf meines lokalen Joomla, für das ich im Moment ein Template erstelle. Zeilen über Zeilen an Deprecated-Warnings und das, obwohl ich die eigentlich schon in der php.ini herausgenommen habe. Ein E_ALL ^ E_DEPRECATED im Script selbst hat vorübergehend Abhilfe geschaffen, aber es war mir definitiv zu doof, das in jedes Script zu setzen.
Fazit: Auf Wiedersehen Fortschritt! Back to 5.2.9 – natürlich ohne Suhosin…

Online-Bildeditor mit PHP und Ajax

Mit PHP und der GD-Lib kann man schon einiges mit Bildern anstellen! Da ich keine Lust hatte, für jedes Projekt einzelne Funktionen immer wieder einzubauen, habe ich dieses Mini-Tool geschrieben, das über die URL die Bildurl und evtl. den Speicherpfad entgegennimmt und die einzelnen Einstellungen mittels Ajax auch direkt in einer Vorschau anzeigt.
Sofern Javascript und die GD-Lib vorhanden sind, sollte es also leicht in jedes Projekt einzubauen sein.

Eigene Fehlermeldungen und ein schönes optisches Design gibt es momentan noch nicht—aber meist passt man diese beiden Sachen ja ohnehin an die Seite an.
Wer ein wenig schauen und spielen möchte, kann sich das Mini-Projekt gerne hier herunterladen.

Wenn jemand noch Zeit und Lust hat, das Ganze zu erweitern, wäre ich natürlich dankbar, die erweiterte Version zu bekommen ;)

Eclipse für die Webentwicklung

Für diejenigen, die Eclipse unter anderem für die Webentwicklung nutzen möchten, gibt es nun Easy Eclipse for LAMP, das bereits so ziemlich alle benötigten Plugins mitbringt.
Alternativ kann man sich natürlich auch durch den Plugin-Dschungel wühlen und alles benötigte selbst installieren (z. B. wenn man nur das PHP-Plugin benötigt).
Ein paar nette und nützliche Plugins haben bisher leider noch keinen Weg in die Distribution gefunden:

Clay

ein grafischer Datenbankdesigner, der dann vom fertigen Diagramm auch SQL-Dumps erstellt.
Ausdrucken des Diagramms geht leider nur in der Pro-Version.
Für den Remote-Zugriff muss man die entsprechenden jdbc-Treiber installiert haben.

Quantum DB

für mich unverzichtbar! Ein SQL-Admin für verschiedenste Datenbanken, der auch über einen Query-Browser verfügt und die jeweils letzten Queries zum späteren Benutzen speichert.
Die jeweiligen jdbc-Treiber für die Datenbank müssen jedoch installiert sein.

QuickRex

Reguläre Ausdrücke testen, speichern und wieder verwenden. Für das Testen kann entweder ein Text eingegeben oder geladen werden (auch Dateien).
Mit dabei ist eine Bibliothek mit häufig genutzten Ausdrücken (z. B. Auffinden von HTML-Tags).

preg_replace mit Funktion ersetzen

Dass man mit preg_replace Reguläre Ausdrücke durch Strings ersetzen kann, habe ich wohl gewusst; dass man mit dem “/e“-Schalter auch statt des Strings eine Funktion mit einem oder mehreren Referenzen auf das Suchmuster angeben kann, habe ich leider erst vor kurzem herausgefunden.
Bisher habe ich solche Dinge immer mit preg_match(_all) und einer anschließenden Schleife gelöst. Allerdings ist preg_replace(mit “/e“) in einfachen Dingen (zumindest laut Xdebug) einiges schneller und auch weniger Tipparbeit.

Beispiel (Html-Tags und Attributnamen klein geschrieben, die Attribute jedoch nicht):

$str = '<P>Das ist EIN</P><P STYLE="text-align:center" Alt="Test">TEST</P>';
$regexAttributes = '/([a-zA-Z]+=)/e';
$regexTags = '/(<\/?[a-zA-Z]+)/e';
$str = preg_replace($regexAttributes, "strtolower('\\1')", $str);
$str = preg_replace($regexTags, "strtolower('\\1')", $str);

Vielleicht würde das auch in einem einzigen Regex gehen, aber Reguläre Ausdrücke waren noch nie mein Ding – ebensowenig wie Rosinen oder Rosenkohl (man erkennt ein eindeutiges „R“-Muster).
Hat man mehrere Teilmuster, so kann man diese einfach hintereinanderschreiben:

$str = preg_replace($regex, "funktion('\\1\\2')", $str);
//Oder mit mehreren Funktionen
$str = preg_replace($regex, "funktion1('\\1').funktion2('\\2')", $str);
//die Referenzierung ist auch ohne Funktion möglich
$str = preg_replace($regex, "funktion('\\1').'\\2'", $str);

Bei einfachen Funktionen kann man sich mit dem “\e“ hinter dem Regex doch vielleicht die eine oder andere Schleife sparen.

__call() zur Erweiterung von Factory-Klassen nutzen

Wenn eine vorhandene Klasse erweitert werden soll, kann sie einfach vererben und die neue Klasse instanziieren.
Anders sieht es bei Factory-Klassen aus, die je nach Parameter ein anderes Objekt zurückgeben (z. B. für eine Datenbank-Klasse).
Hier müsste man dann schon in jede der Klassen die neue Funktion einfügen, um sie auch in jedem Objekt verfügbar zu haben.

Die PHP5-Funktion __call() kann hier einiges an Arbeit abnehmen. Sie fängt Aufrufe von Methoden ab, die in der Klasse selbst nicht implementiert sind und nimmt dabei zwei Parameter entgegen: den Namen der Methode und ein Array von Parametern, die an die Methode übergeben werden sollen.

Wenn man ein System wie Pear::DB oder ADOdb nutzt, wird eine Erweiterung (z. B. eine Funktion insert($table, $values)) recht schwierig. Meist hat man hier eine Factory-Funktion oder -Klasse, die jeweils unterschiedliche Objekte zurückgeben.
Mit __call() kann man (in PHP5) die entsprechende Methode in der Factory-Klasse einbauen und alle anderen Methoden (sofern existent) an die aktuelle Klasse weiterleiten.

Ein Beispiel mit ADOdb:

Die original Factory-Klasse

static function getInstance()
{
    static $instance = false;
    if (!$instance || !is_a($instance, 'ADOConnection') {
        $instance = newADOConnection('mysql');
        $instance->connect('localhost', 'user', 'geheim', 'datenbank');
     }
     return $instance;
}

Damit wird je nach Datenbank-Typ ein anderes Objekt zurückgegeben, aber die Erweiterung müsste in allen Klassen vorgenommen werden.

Ein Ansatz mit __call()

class DB
{
    protected $conn = null;
    public function __construct()
    {
        $this->conn = newADOConnection('mysql');
        $this->conn->connect('localhost', 'user', 'geheim', 'datenbank');
    }
    //Die neue Funktion
    public function insert($table, $values)
    {
         $table = trim($table); //eventuell noch überprüfen        
         $sql = "INSERT INTO `$table`;
         $sql .= ''; //mache hier irgendwas mit den Werten
         return $this->conn->execute($sql);
     }
     //Hier werden alle anderen Methoden an $this->conn weitergeleitet
    public function __call($method, $params)
    {
        if (method_exists($this->conn, $method) {
            return call_user_func_array(array($this->conn, $method), $params);
        } else {
            //Gebe Fehler aus
        }
     }
}

PHP-Code aus Klassendiagrammen

Klassendiagramme sind so ziemlich das Einzige, was ich (außer ab und zu ein paar textuellen Usecases) UML abgewinnen kann, da sie recht schnell einen guten Überblick über die Struktur geben.

ArgoUML ist ein Java-basiertes UML-Tool, dass mit Hilfe optionaler Module auch PHP „spricht“ und die erstellten Klassendiagramme sowohl in PHP4-, als auch in PHP5-Code exportieren kann.
Die zusätzlichen Module findet man in den Downloads für die Version 0.14 (beta1). Um sie installieren zu können, sollte man das Tool jedoch nicht als Binary, sondern als zip- oder tar.gz-Archiv herunterladen.
Eine Installationsanleitung gibt es entsprechend mit dazu.

Um mit PHP entsprechend arbeiten zu können, muss man allerdings erst einmal (mindestens) die Datentypen array und string im Projekt anlegen. Wenn man auf „untitledModel“ klickt, sieht man unten bereits den Button mit dem grünen Punkt, über den neue Datentypen angelegt werden können. Die gelben Kästen stellen Objekte dar und jede Klasse, die angelegt wurde erscheint dann automatisch in dieser Liste.
argouml1

Wenn man ein neues Klassendiagramm anlegt, kann man zu jeder Funktion/Variablen/Klasse die Sichtbarkeit, sowie static oder abstract wählen. Über das Auswahlmenü Sterotyp kann man noch entsprechende Zusatzinformationen angeben – z. B. «create» für Konstruktoren.

Klassendiagramm der Config-Klasse
Das Beispiel-Klassendiagramm zeigt eine (reichlich einfache und unfunktionelle) Config-Klasse, die aus der privaten Member-Variable properties, sowie den öffentlichen Methoden get() und set() besteht. Dabei können für jede Klasse/Variable/Funktion noch eine Dokumentation, sowie ein Eintrag in die Todo-List erstellt werden.
Interessant ist, was dann in dem Reiter „Quelle“ jeweils unter PHP4 und PHP5 ausgegeben wird:


/**
 * Short description of class Config
 *
 * @access public
 * @author Julia Eckel, <info@mileandra.de>
 */
class Config
{
    // --- ATTRIBUTES ---
    /**
     * Short description of attribute properties
     *
     * @access private
     * @var array
     */
    private $properties = array();
    // --- OPERATIONS ---
    /**
     * Short description of method get
     *
     * @access public
     * @author Julia Eckel, <meine@mail.de>
     * @param string
     * @return string
     */
    public function get($key)
    {
        $returnValue = (string) '';
        // section -64--88-1-1-46b158:10a0f33f085:-7ff7 begin
        // section -64--88-1-1-46b158:10a0f33f085:-7ff7 end
        return (string) $returnValue;
    }
    /**
     * Short description of method set
     *
     * @access public
     * @author Julia Eckel, <meine@mail.de>
     * @param string
     * @param string
     * @return void
     */
    public function set($key, $value)
    {
        // section -64--88-1-1-46b158:10a0f33f085:-7ff4 begin
        // section -64--88-1-1-46b158:10a0f33f085:-7ff4 end
    }
	

} /* end of class Config */

PHP4:


/**
 * Short description of class Config
 *
 * @access public
 * @author Julia Eckel, <meine@mail.de>
 */
class Config
{
    // --- ATTRIBUTES ---
    /**
     * Short description of attribute properties
     *
     * @access private
     * @var array
     */
    var $_properties = array();
    // --- OPERATIONS ---
    /**
     * Short description of method get
     *
     * @access public
     * @author Julia Eckel, <meine@mail.de>
     * @param string
     * @return string
     */
    function get($key)
    {
        $returnValue = (string) '';
        // section -64--88-1-1-46b158:10a0f33f085:-7ff7 begin
        // section -64--88-1-1-46b158:10a0f33f085:-7ff7 end
        return (string) $returnValue;
    }
    /**
     * Short description of method set
     *
     * @access public
     * @author Julia Eckel, <info@mileandra.de>
     * @param string
     * @param string
     * @return void
     */
    function set($key, $value)
    {
        // section -64--88-1-1-46b158:10a0f33f085:-7ff4 begin
        // section -64--88-1-1-46b158:10a0f33f085:-7ff4 end
    }
	

} /* end of class Config */

In PHP4 wird automatisch ein Unterstrich vor die private Variable properties gesetzt, in PHP5 dagegen die Sichtbarkeit durch private gekennzeichnet.
Da ich für die Methoden und Parameter keine Dokumentation angegeben habe, wird hier der Standard-Text ausgegeben.

Auf diese Weise bekommt man schon einmal ein recht ordentliches Gerüst inklusive PHP-Documentor­kompatiblen Kommentaren und muss „nur noch“ den Code für die Funktionen angeben.
extends, abstract und Standard-Werte für Variablen und Parameter sind auch kein Problem.

Der Autor, sowie die entsprechende Email-Adresse (im Beispiel geändert) können in den Einstellungen angegeben werden, so dass man diese nicht immer erneut tippen muss.

PHP-Projekte planen

Irgendwann gelangt wohl jeder mal an den Punkt, an dem er merkt, dass ihn das »drauflos programmieren« in eine Sackgasse ohne Wendemöglichkeit geführt hat und man nimmt sich vor, das nächste Mal vorher zu planen. Ein guter Vorsatz, der jedoch nicht immer so leicht in die Tat umzusetzen ist.
In Büchern und im Netz gibt es zwar einige Kapitel/Artikel zu diesem Thema, die man jedoch fast alle zu einem Satz zusammenfassen kann

Setz dich erst mal hin, schreibe auf, was die Seite für Bereiche und Funktionen haben soll und dann gehst du Stück für Stück daran, dies umzusetzen

Prima! Da wäre wohl niemand drauf gekommen, oder?
Tatsache ist leider, dass man auf diese Weise wahrscheinlich in die gleiche Sackgasse gerät — diesmal jedoch mit Stadtplan und vielleicht nicht ganz so schnell.
Es ist mit Sicherheit ein guter Start, wenn man ausformuliert, was die fertige Seite denn nun bieten soll. Für ein erfolgreiches Projekt sollte man jedoch auch noch einige andere Überlegungen anstellen, bevor man die erste Zeile tippt.

[more]

Für einige dieser Überlegungen reicht zunächst eine einfache Checkliste

  1. Auf welche/n PHP-Version/en soll die Seite hinterher lauffähig sein?
    Wenn die Seite nur auf einem Server laufen soll, auf dem PHP5 installiert ist, so muss man nicht unbedingt Rücksicht auf Abwärtskompatibilität genommen werden und man kann die neuen Deklarationen und Funktionen ohne Probleme nutzen.
    Läuft auf dem Server dagegen PHP4, sollte der Quellcode so gestaltet sein, dass er auch bei einem Update auf die 5er-Version noch funktioniert. Bei einer PHP-Version vor 4.1.0 muss zusätzlich noch an die (hier nicht vorhandenen) Superglobals gedacht werden.

  1. Gibt es Daten, die gespeichert werden sollen und wenn ja, auf welche Weise?
    Wenn das System mit mehreren Datenbanken lauffähig sein soll, sollte man auf ein System wie ADOdb oder PEAR::DB setzen (es kann natürlich auch etwas sein, das man selbst schreibt).
    Wenn man dagegen mit nur einer Datenbank (z. B. MySQL), oder mit Textdateien arbeitet, sollte man sich an dieser Stelle überlegen, an wie vielen Stellen ein Datenbankzugriff erfolgt. Braucht man nur an zwei oder drei Stellen im Script Daten aus der Datenbank, dann lohnt sich in der Regel eine entsprechende Datenbank-Klasse nicht. Benötigt dagegen fast jede Datei entsprechende Daten, sollte man dagegen schon eine Klasse oder Funktionsbibliothek zusammenstellen.

  1. In welcher Form soll die Ausgabe des erzeugten HTML-Quelltextes erfolgen?
    Templates, PHP/HTML vermischen, oder gar statische Seiten generieren?

  1. Was für Basisfunktionen/Klassen werden benötigt?
    Brauche ich einen eigenen ErrorHandler, eine Datenbankklasse, eine Funktionsbibliothek für Textformatierungen, etc?

  1. Soll die Webseite mehrsprachig sein?
    Wenn die Webseite mehr als eine Sprache »sprechen« soll, ist es eine gute Idee, dies auch in der Gestaltung des Datenbankschemas und der entsprechenden Ausgaben, die die Dateien erzeugen, von Anfang an zu berücksichtigen.

  1. Wie soll die Ordnerstruktur aussehen?
    An welche Stelle kommen Klassen, Funktionen, Include-Dateien?

  1. Namensraum — nach welchem Schema werden Funktionen, Variablen, Klassen benannt?

  2. Welche Form der Versionsverwaltung soll eingesetzt werden?

Die Liste ist mit Sicherheit noch beliebig erweiterbar, deckt aber schon einmal die gröbsten Bereiche ab.

Als nächsten Punkt lege ich meist erst einmal die Ordnerstruktur an und checke das leere Projekt in die Versionsverwaltung ein.
Danach beginne ich dann mit den ersten Entwürfen für die Datenbankstruktur. Es hilft ungemein bei der Gestaltung des Quelltextes, wenn das Datenbankschema bereits festgelegt und die Daten, die man hinterher auf jeden Fall benötigt (z. B. für die Konfiguration) schon gespeichert sind.
Nun können die ersten Dateien angelegt werden, wobei Konfigurationsdateien und die Basisklassen und -funktionen zuerst angelegt werden sollten (diese Dateien werden schließlich von einigen anderen benötigt).

Für die Erstellung der weiteren Dateien hilft es mir persönlich meist ungemein, wenn ich erst einmal die Oberfläche grob entwerfe — meist ganz »altertümlich« mit Bleistift und Papier.

Anmerkungen

Bekanntlich führen viele Wege nach Rom. Die oben genannten Vorschläge sind mit Sicherheit weder ein »Muß«, noch ein Patentrezept, sondern sollen eher eine Anregung darstellen. Es ist halt mein eigener Weg (oder eher Pfad?) zum Ziel.
Ich hoffe, dass diese Anregungen vielleicht dem Einen oder Anderen etwas helfen können.
Vielleicht bekomme ich ja auch noch die eine oder andere Anregung durch diesen Post ;)

Ich habe diesen Artikel geschrieben, weil ich selbst bei meinen ersten Projekten vor dem Problem stand, nicht zu wissen wie man an die Planung herangehen soll.
Den richtigen Ausschlag für die Idee zu diesem Post hat dann aber vor einiger Zeit ein Post in einem Forum (ich weiss leider nicht mehr, in welchem) gegeben, in dem einem Mitglied, dass vor seinem ersten Projekt stand, folgende Tipps gegeben wurden (nicht wortgenau): »Mach eine Liste, was du haben willst und dann fang an zu coden«, »Mach eine Mind-Map« und (mein Favorit) »Lerne UML«. Nichts gegen UML — ich nutze auch des Öfteren Klassendiagramme, aber man braucht es nicht unbedingt. Und für jemanden, der gerade vor dem ersten Projekt steht, ist es mit Sicherheit ein Grund, entmutigt aufzugeben.

Editoren und IDEs für die Webentwicklung

Kein Editor kann Wissen und Erfahrung ersetzen. Allerdings kann er die, die von beidem etwas haben, durchaus schneller zum Ziel führen.
Es gibt bereits einige Listen mit einer Auswahl verschiedener Editoren und IDEs im Netz, die jedoch auf eine weitergehende Rezension und Erfahrungsberichte verzichten. Ich habe Stunden damit zugebracht, diese Listen zu durchforsten und die verschiedenen Programme auszutesten und die (für mich) besten zu finden.
Natürlich ist ein Editor immer Geschmackssache (darüber läßt sich ja bekanntlich nicht streiten), aber vielleicht kann dieser Post ja doch die eine oder andere Suche beschleunigen.
Es gibt einige Editoren/IDEs, die hier nicht gelistet sind, weil sie mir entweder überhaupt nicht zugesagt haben, ich nicht die Zeit hatte, sie zu testen, oder ich sie schlicht und einfach bei meinen „Streifzügen“ durchs Web nicht gefunden habe.
Die Liste kann natürlich gerne um eure Favoriten (dann aber bitte zumindest mit einer kleinen Erläuterung) erweitert werden.

Plattformunabhängig

Eclipse

ist eine IDE, die ursprünglich für die Java-Entwicklung gedacht war. Jedoch gibt es mittlerweile eine anschauliche Anzahl an Erweiterungen und Plugins, die eine Entwicklung in nahezu jeder Sprache ermöglichen (Java, PHP, Python, Ruby on Rails, C, C++, XML, etc). Eine Liste der Plugins findet man unter eclipse Plugins. Das PHP-Plugin hat sogar eine eigene Seite.

Eclipse selbst bringt schon eine integrierte Versionsverwaltung, das Verwalten verschiedener „Workspaces“ (der Ordner, in dem gerade gearbeitet wird) und Projekte mit.
Das PHP-Plugin bietet einen Live-Debugger, automatische Task-Lists, einen Klassenbrowser, Syntax-Highlighting und Code-Completion, sowie einen integrierten Browser.
Die Einstellungen können sich ebenfalls sehen lassen: nicht nur die Farben für das Syntax-Highlighting, sondern auch die Nutzung von Leerzeichen statt Tabs, automatisches Code-Folding und eigene Include-Pfade können sich individuell einstellen lassen.
Einen eigenen Debugger bringt Eclipse leider nicht mit, aber es arbeitet mit einem installierten DBG oder XDebug (mit entsprechenden Plugins) zusammen.

Fazit: Eine tolle IDE, die recht stabil läuft und viele Features bietet. Im Bereich HTML/CSS ist man jedoch mit anderen Programmen wahrscheinlich besser bedient.
Kosten: Open-Source

Zend Studio

ist hauptsächlich auf PHP ausgelegt, bietet aber auch Code-Completion für HTML. Für den PHP-Programmierer bietet Zend eine nahezu unvergleichliche Entwicklungsumgebung, die auch das Arbeiten mit mehreren Projekten unterstützt.
Das Programm bietet integrierte Versionsverwaltung und Debugger, Syntax-Highlighting und ist bisher das einzige Programm, das ich finden konnte, das auch Code-Completion für das Server-Array zulässt.
Schmerzlich vermissen lässt es hingegen die Einstellung des Include-Path, sowie einen integrierten Browser. Außerdem läuft die aktuell 5er-Version (zumindest auf dem Mac) nicht so recht stabil.

Fazit: Für jemanden, der fast nur in PHP/HTML entwickelt sicherlich eine gute Wahl. Entwickler, die auch in anderen Sprachen programmieren, sollten eher zu Eclipse greifen.
Kosten: kommerziell; es werden verschiedene Lizenzmodelle angeboten.

NVU

ist ein Html-Editor, der neben der Quelltext-Ansicht auch eine Vorschau und eine WYSIWYG-Ansicht bietet.
Dabei wird ein größtmöglicher Wert auf validen Quelltext gelegt, was jedoch (der Erfahrung nach) nicht immer gelingt.
Für den HTML-Bereich bietet es viele Möglichkeiten, wie z. B. die Erstellung von Tabellen und Listen, eine Farbwahl und verschiedenste Formatierungsmöglichkeiten.
Eine wunderbare Funktion ist das Erkennen von bereits formatiertem Text, der in die WYSIWYG-Ebene eingefügt wird. Dieser wird dann automatisch in HTML-umgewandelt, was einem in einigen Fällen (Produktbeschreibungen aus einer Word-Datei, etc) doch einiges an Arbeit erspart.
Allerdings bietet das Programm auch in der Quelltext-Ansicht kein Code-Vervollständigung. Das Anlegen von Projekten wird jedoch unterstützt.

Fazit: Wer des Öfteren Texte aus anderen Programmen „webtauglich“ formatieren will, ist mit dem Programm sicherlich gut bedient.
Wer allerdings auch dynamische Seiten entwickeln möchte, hat hier das Nachsehen – kein Syntax-Highlighting für PHP, Python oder ähnliches.
Kosten: Freeware

Windows

Weaverslave

unterstützt verschiedenste Formate und verfügt im Bereich HTML über eine eigene Vorschau.
Das Programm ist durch verschiedene Plugins (unter anderem eine PHP-Hilfe) erweiterbar.
Es können Templates für die verschiedenen Dateiformate angelegt werden.
Ein Farbwähler mit unterschiedlichen Paletten, sowie einige über das Menü einfügbare Elemente (Tabellen, Formulare, Listen) machen das Arbeiten in HTML recht komfortabel.
Weaverslave läuft recht stabil, lässt jedoch gerade im Entwicklungsbereich einige Dinge vermissen (z. B. die Hervorhebung der Klammern, oder eine automatische Einrückung).

Fazit: Wer einen Editor mit Syntax-Highlighting sucht, der die verschiedensten Formate unterstützt, ist mit Weaverslave gut bedient.
Für die Entwicklung in PHP, Python o. ä. gibt es jedoch besser geeignete Programme.
Kosten: Freeware

PHPEdit

ist eine Entwicklungsumgebung, die Syntax-Highlighting, Code-Vervollständigung und einen Debugger mitbringt.
Die Entwicklung geht hier leicht von der Hand, ist jedoch auf PHP/HTML eingeschränkt.
Leider hatte ich nicht genug Zeit, um die Umgebung ausreichend testen zu können, jedoch hatte ich den Eindruck, dass Zend (liegt in etwa in derselben Preisklasse) weitaus mehr bietet.

Fazit: Kein richtiges­zu der Zeit musste man sich für eine Trial registrieren und es dauerte Ewigkeiten, bis endlich mal der Trial-Key kam. Was ich in der Testphase gesehen habe, rechtfertigte (meiner Meinung nach) im Vergleich zu anderen Programmen nicht den Preis.
Kosten: 89,00 EUR für eine Einzellizenz

Maguma Open Studio

ist mein Favorit in der Windows-Sektion. Code-Vervollständigung, Syntax-Highlighting und automatische Einrückung lassen die Entwicklung einfach wunderbar schnell von der Hand gehen.
Projekte lassen sich wunderbar verwalten und die zusätzliche Unterstützung von Python macht das Programm zu einer IDE, die kaum Wünsche offen lässt.
Als ich das Programm getestet habe, hieß es noch „Maguma Studio“ – wäre ich nicht gerade in diesem Zeitraum auf den Mac umgestiegen, hätte ich es mit Sicherheit gekauft.
Tipp: Mit Crossover Office läuft es auch auf Linux.

Fazit: Eine wunderbare IDE, die sogar Python unterstützt. Wer unter Windows entwickelt, sollte das Programm unbedingt ausprobieren.
Kosten: OpenSource

Linux/Mac

Diese Kategorie habe ich zusammengefasst, da die meisten Editoren auf beiden Systemen funktionieren (auf dem Mac werden bei den Linux-Editoren/IDEs X11 und Fink vorausgesetzt)

Quanta

ist eine IDE für Linux, die jedoch auch auf dem Mac installiert werden kann (s. o).
Im HTML-Bereich bietet die Entwicklungsumgebung einen WYSIWYG-Editor, eine Vorschau und einen Quelltextbereich. Listen, Tabellen und andere HTML-Elemente können dabei recht einfach über das Menü, oder die entsprechende Toolbar eingefügt werden.
Für die PHP-Entwicklung gibt es allerdings auch unter den Unix-Systemen bessere Alternativen. Zwar bietet die IDE Syntax-Highlighting, aber debuggen, oder Code-Vervollständigung gibt es nicht.
Das Verwalten von Projekten, sowie eine Versionsverwaltung sind integriert.

Fazit: Für eine Homepage, die nicht hauptsächlich aus PHP-Code besteht, ist der Editor neben Bluefish die beste Wahl. Für das Programm alleine lohnt sich schon der Wechsel zu Linux oder Mac ;)
Kosten: Quanta+ ist Freeware. Es gibt jedoch auch eine kommerzielle Version (Quanta Gold), die noch einige zusätzliche Features bietet.

Bluefish

ist eine IDE (ja, ich nenne es so) für Linux. Die Nutzung auf dem Mac empfehle ich allerdings nicht, da das Programm dort nicht besonders stabil läuft.
Wer unter Linux entwickelt, hat mit Bluefish jedoch ein wundervolles Programm für die Entwicklung von Webseiten.
Es hat zwar leider nicht den Umfang von Quanta, läuft jedoch weitaus stabiler und schneller. Code-Vervollständigung wird man jedoch auch hier vergeblich suchen.

Fazit: Bluefish ist mir im Gegensatz zu anderen Programmen noch nie abgestürzt, was es für mich trotz der „Schönheitsfehler“ zu einem tollen Tool macht. Schade, dass sich der Mac hier so ziert.
Kosten: OpenSource

Maguma Open Studio

läuft leider nur unter Crossover Office. Beschreibung s. o.

Mac

Subethaedit

ist ein Editor, der fast alle Sprachen unterstützt. Die früheren Versionen wurden noch „frei“ angeboten, mittlerweile kostet das Programm 30 EUR.
Für größere Projekte ist das Programm definitv nicht meine erste Wahl, obwohl es für die verschiedenen Sprachen Syntax-Highlighting anbietet. Da es jedoch nahtlos mit Cyberduck zusammenarbeitet und ich so eine kleine Änderung auch mal schnell auf dem Server vornehmen kann, ist es für mich zu so etwas wie einem „Schweizer Messer“ unter den Editoren geworden.

Fazit: Ein guter Texteditor, der allein durch die Vielzahl von unterstützen Sprachen (inkl. Highlighting) eine Installation wert ist.
Kosten: 30 EUR

Taco HTML Edit

ist für mich ein einfacher Editor, der nicht viele Einstellungen bietet und seit der Installation kaum benutzt wurde.
Obwohl der Editor Syntax-Highlighting für PHP und HTML bietet, kann ich mich mit ihm nicht richtig anfreunden. Eine Projekt- oder Versionsverwaltung werden nicht angeboten.

Fazit: Ein einfacher Editor (ich lasse mich gern eines Besseren belehren), der HTML und PHP unterstützt. Selbst für kleinere Scripte gibt es durchaus bessere Programme.
Kosten: Freeware

skEdit

ist hauptsächlich ein HTML-Editor, der jedoch vor allem mit Stylesheets wunderbar umgehen kann.
Bei der PHP-Entwicklung bietet das Programm leider nicht allzu viele Möglichkeiten, jedoch immerhin eine Hilfe für PHP-eigene Funktionen.
Eine Verwaltung von „Sites“ (Projekten) ist integriert, sowie eine Vorschau in sämtlichen installierten Browsern.
Einige nette Extras hält der Editor im Bereich HTML bereit: Texte mit Tidy aufräumen, sämtliche Sonderzeichen zu HTML wandeln (und umgekehrt), sowie Sonderzeichen per Menü einfügen.
Eine Suche ist wahlweise innerhalb der Datei, oder des gesamten Projektes möglich.
Ein tolles Extra ist die automatische Vervollständigung von CSS-Klassen/IDs und Pfaden (z. b. für Links oder Bilder).

„Fazit:“ Den Preis ist das Programm auf jeden Fall wert. Für reine HTML-Seiten, die auf dem Mac erstellt werden sollen, ist es meine erste Wahl.
Ich hoffe allerdings, dass nächsten Versionen eine bessere Unterstützung für PHP bieten.
Kosten: 24,95 EUR

Textmate

ist mehr als nur ein reiner Editor und bietet Syntax-Highlighting, sowie Code-Templates für verschiedene Sprachen.
Besonders angenehm ist die Möglichkeit, das Programm vom Terminal aus (geht auch mit sudo) zu starten und auch „versteckte Dateien“ zu öffnen.
Das Programm ist jedoch meiner Meinung nach zu umfangreich für einen einfachen Editor und als IDE nicht so gut zu gebrauchen wie z. B. Eclipse.
Wenn Textmate jedoch noch ein paar Schritte mehr in Richtung IDE machen würde, wäre ich wohl mit die erste, die es kauft.

Fazit: Ein umfangreicher Editor, der auch ganze Projekte verwaltet und einem viel Tipparbeit ersparen kann.
Ich bin gespannt, was die nächsten Versionen noch alles mitbringen.
Kosten: 39 EUR

Abschließend

kann ich nur hinzufügen, dass hier bei weitem nicht alle Editoren und IDEs vorgestellt wurden, sondern nur diejenigen, die ich selbst getestet habe.
Ich habe natürlich nichts gegen eine Erweiterung dieser Liste ;)