Weblog - kronn.de

Evolution – serverseitiges

Nachdem jetzt die „Evolution“ soweit gekommen ist, dass alles „sortiert“:http://kronn.de/weblog/2004/12/03/evolution-2/ ist, kommt als nächstes der Quellcode an die Reihe. Schließlich wollen die sorgfältigen Vorüberlegungen jetzt auch umgesetzt werden.

Anmerkung: Ab hier ist die Trennung in einzelne Stufen in der Praxis nicht immer so klar gegeben, wie bisher. Der Ordnung halber behandle ich hier erstmal das serverseitige und die Umsetzung hinter den Kulissen und tue so, als ob alles schön geordnet abliefe.

Die Evolution auf PHP-Ebene hatte einige Ziele. So sollte die Seite schneller laden, der Kommentarbereich sollte besser werden und ich wollte Kategorie- und Einzelbeitragsseiten haben. Ein Nebeneffekt ist, dass das Design durch einige der Veränderungen erstmal beeinträchtigt wurde. Aber ich schweife ab…

Ich werde hier, aufgrund der Menge der Veränderungen, die Hintergründe nur kurz anreißen und die Lösung präsentieren. Das warum und wieso spare ich mir hier, drohe aber an, euch damit irgendwann zu langweilen. :-)

h3. Schneller durch XML

XHTML kann — wenn es als application/xhtml+xml gesendet wird — schneller geparst werden als HTML. Alles, was als text/html gesendet wird, wird auch wie HTML behandelt. Wer also die Vorteile von XHTML nutzen will, sollte es auch mit dem richtigen mime-type senden.
Da nicht jedes Internetfähige Programm jeden mime-type versteht, kann man den HTTP-ACCEPT-Header auswerten, damit die die es vertragen XTHML mit dem richtigen mime-type bekommen, alle anderen aber HTML 4.01 strict erhalten, das serverseitig aus dem XHTML erzeugt wird.

Meine Lieblingssicherheitslücke kommt zum Beispiel mit XHTML nicht klar. Unerwartet irgendwie, weil der IE doch andererseits XML/XSLT verarbeiten kann.
Aber dafür gibt es ja das PHP-Skript „Ben de Groot“:http://www.stijlstek.nl/, das ich in die Vorlage eingefügt habe. Die Datei wird unter der GLPL „angeboten“:http://stijlstek.nl/greek2me/src/xhtml-or-html/xhtml-or-html.phps.

h3. Seitenleiste: JS weg…

Ist eigentlich nicht serverseitig: Ich habe diese JavaScript-Lösung für die Seitenleiste fallengelassen. Es war weder praktisch noch in allen Browsern ansehnlich, es war einfach nur ein HTTP-Request mehr und ein kurzes Flackern auf dem Bildschirm, dass den Nutzer dazu gezwungen hat, zu lernen, meine Seite zu bedienen.
‚Tschuldigung. Seinerzeit fand ich das sowas von schick.

Also: Die zweite Spalte ist tot, lang lebe die zweite Spalte!

h3. mehr Vorlagen – mehr Flexibilität

Ich habe aus der bisher einzigen allgemeingültigen Vorlage mehrere spezielle gemacht. Ein wenig Gewurschtel in der .htaccess-Datei später wurden diese speziellen Seiten dann auch gefunden. Eine Anleitung dazu findet sich bei „burningbird“:http://weblog.burningbird.net/archives/2004/07/07/wordpress-modifications/fulltext/. Ein großes Dankeschön geht dabei an „Perun“:http://perun.net, der mich auf diese sehr umfassende Quelle „aufmerksam gemacht“:http://www.perun.net/archiv/2004/11/03/wordpress-links/ hat.

Es gibt jetzt je eine Vorlage für
* einzelne Einträge …
* Kategorien …
* die Startseite

Die Veränderungen sind eher gering, es geht mir hierbei mehr um Struktur und Modularisierung. Okay, und ich fand die Idee natürlich echt schick, denn so nebenbei habe ich mir noch eine Komplettvorschau erstellt.
Die Dateien werden über ein leicht veränderte .htaccess-Datei angesprochen und mit Parametern versorgt.

h3. to URL or not to URL

Das URL-Schema habe ich vorerst so gelassen, wie es ist. Eine Umstellung auf ein kategoriebasiertes Muster ist einfach zu umständlich umzusetzen. Das rechnet sich für mich nicht. Wer häufiger herkommt, weiß sowieso, wie ich schreibe, der Rest freut sich, dass es eine saubere Sortierung nach Datum gibt.

Da die Kategorieübersichten auf einer anderen Datei basieren, kann ich die mir wichtigen Informationen auch so integrieren.
Soviel zu diesem Thema.

h3. Kommentare

Zum einen wollte ich Kommentarspam entgehen, zum anderen meinen Besuchern eine Vorschau für die Kommentare bieten. Weiterhin fand ich das bisherige drumherum etwas verwirrend.
Also habe ich zuerst mal den Text (war: „das ganze drumherum„) verändert, das war am einfachsten. Da ich Textile hier für mich verwende (und „Gerrit“:http://praegnanz.de/ das auch schon rausgefunden hat), könnt ihr es auch verwenden. Textile macht das Leben einfacher, glaubt mir.
Als nächstes habe ich die Vorschau eingebaut. Dafür habe ich eine Erweiterung von „Mark Ghosh“:http://mindfulmusings.net/ genutzt, welche auch im Netz als ZIP-Archiv „zum Download bereitsteht“:http://weblogtoolscollection.com/b2-img/wp-comment-preview.zip.

Im Wesentlichen wird eine Seite dazwischengeschaltet, bevor der Kommentar in die Datenbank aufgenommen wird. Nachteil dieser Methode ist, dass die an sich funktionstüchtigen Textileformatierungen noch nicht umgewandelt worden sind, wenn man sich in der Vorschau befindet. (Textile wird nur aus der Datenbank heraus umgewandelt.) Vorteil ist, dass die Vorschauseite potentielle Spammer abhalten kann und natürlich beim Kommentieren hilft.

Soweit meine serverseitigen Veränderungen. Ich weiß, „kurz anreißen“ ist was anderes… Ansonsten irgendwelche Meinungen? Gefällt es euch? Ist es wirklich schneller? Seid ihr froh, dass die Seitenleiste wieder „blogmäßig“ ist? Ist der Kommentarbereich verständlich?

Abgelegt in: Design
Veröffentlicht am 29.12.2004 um 16:16
Dauerhafter Link zu "Evolution – serverseitiges"

  • Oberflächlich ;) betrachtet finde ich es auf jeden Fall sehr gelungen. Gefällt mir sehr gut! Vor allem auch der Kalender. Der Quellcode ist auch bei mir, nach den Klausuren, als nächstes an der Reihe. Mit der Zeit wird das ganze echt etwas schwerfällig.

  • Die offen sichtbare (blogmäßige) Seitenleiste ist einfach gut, weil einfach und gut. Die Erkenntnis, dass die aufzuklickende Variante mal cool o.ä. war, genaugenommen aber nur eine Umständlichkeit für den Besucher darstellte, ist das typische Merkmal des geistigen Fortschritts beim Website-Gestaltern, dass die Site eigentlich für den Besucher gebaut wird und nicht zum Selbst-Dranrumkuscheln… ;-)

    Hat man diesen Reifepunkt erreicht, macht Webdesign erst richtig Spaß, und das ganze Show-Gebimmel tritt zurück zugunsten einer guten Struktur, eines guten Layouts und — guten Inhalts.

  • Nachtrag:
    Gerade bemerkt, dass ich auf der Preview-Seite zwar Fehler bemerken (siehe „beim Website-Gestaltern“), diese aber nicht mehr korrigieren kann, da ein neuerliches „Vorschau“ einen hübsch anzusehenden 404 erzeugt. Da hakt wohl noch etwas?

    Btw: Ich finde einen Text-Cursor als Cursor für Submit-Buttons völlig irritierend. Das vermittelt (und das gehört zur Standard-Konformität!) eine falsche Information!

  • _Björn_, wenn du Fragen zu einzelnen Sachen hast, kann ich dir gerne weiterhelfen. Es müssen ja nicht zwei Leute vor den Bildschirm verzweifeln.

    Der Kalender war aber — wenn auch etwas versteckt — schon immer da. Naja, ich bin froh, dass ich dieses JavaScript-Experiment (was von Anfang an nicht so richtig funktioniert hat) wieder los bin.

    Danke für den Hinweis mit den Input, _Boris_, ich habe den Wert eben auf cursor:auto geändert, dann werden Eingabe-INPUTs mit einer Textmarke und Button-INPUTS mit einem Zeige-Mauszeiger versehen.

    Das mit der Reife… mal abgesehen davon, dass ich es jetzt besser zugänglich finde, war es vorher doch schön aufgeräumt. Da ich das CSS und die Grafiken recht schnell geändert habe, muss ich erst wieder ein wenig arbeiten, um das gewohnte Aussehen wieder zu erlangen.

    Die Vorschau-Geschichte sehe ich mir gleich an… Ja, da hat ein Buchstabe im Funktionsaufruf gefehlt. *Danke für die Fehlermeldung!*

  • mit dem Xhtml senden, wird scheinbar auch strenger geparst
    auf http://kronn.de/weblog/2004/12/03/evolution-2/
    kommt im Firefox eine Fehlermeldung

  • Ja, _André_, XHTML sende ich jetzt als XML. Das wird entschieden strenger geparst. Webstandards sind dabei aber nicht so wichtig wie die richtige Verschachtelung der Elemente.

    Im von dir genannten Fall hat das Textile-Plugin anscheinend Mist gebaut. Danke für den Hinweis, ich muss mal sehen, wie ich das wieder hinbekomme.

  • So, ich habe es, wenn auch nicht besonders elegant, behoben. Bitte entschuldige diesen Eingriff in deinen Kommentar, _Gerrit_.:-(

    Aber mal ehrlich, _André_: Wurde der Fehler nicht wunderbar _schnell anzeigt? Hmm?_

  • zu der Sache mit dem Content-Type: gute Idee, habe ich derzeit getestet. Könnte man ggf. auch mit dem Charset so machen.

  • eine Sache noch Content-Type: warum ist das eigentlich application? xhtml ist doch nachwie vor ein Text … *grübel*

  • ähhh… gute Frage. Zum Glück habe ich es mir nicht ausgedacht… Aber das ist der offzielle, vom W3C „empfohlene Mimetype“:http://www.w3.org/TR/xhtml-media-types/xhtml-media-types.html#summary… Das mit der application hat seine Wurzeln im XML-Mimetype. Programme, die es mit diesem Mimetype bekommen, diesen aber nicht verstehen, sollen dadurch eine Speichermöglichkeit anbieten statt die Datei als Text auszugeben („RFC 2376“:http://www.ietf.org/rfc/rfc2376.txt).

    Ein weiterer Unterschied ist der default-Zeichensatz, auf den die Programme zurückgreifen sollen, falls keiner angegeben ist.

Diese Internetseite wurde von Wordpress zusammenebastelt und besteht aus geprüftem XHTML und CSS.
Das hat viele Vorteile.

Weitere Seiten mit ähnlichen Vorteilen preisen gutes Webdesign an oder enthalten Texte.
So ist das Leben eben.
© Kronn/2003-2005

Mein Server hat, nebenbei gesagt, 0,232 Sekunden benötigt, das hier zu fabrizieren.
War aber nicht böse gemeint.


Fatal error: Uncaught Error: Call to undefined function set_magic_quotes_runtime() in /var/www/K1054131198/docroot/kronn.de/etc/counter/counter.php:61 Stack trace: #0 /var/www/K1054131198/docroot/kronn.de/weblog/wp-content/themes/kronn/footer.php(19): include() #1 /var/www/K1054131198/docroot/kronn.de/weblog/wp-includes/template.php(688): require_once('/var/www/K10541...') #2 /var/www/K1054131198/docroot/kronn.de/weblog/wp-includes/template.php(647): load_template('/var/www/K10541...', true) #3 /var/www/K1054131198/docroot/kronn.de/weblog/wp-includes/general-template.php(76): locate_template(Array, true) #4 /var/www/K1054131198/docroot/kronn.de/weblog/wp-content/themes/kronn/single.php(31): get_footer() #5 /var/www/K1054131198/docroot/kronn.de/weblog/wp-includes/template-loader.php(74): include('/var/www/K10541...') #6 /var/www/K1054131198/docroot/kronn.de/weblog/wp-blog-header.php(19): require_once('/var/www/K10541...') #7 /var/www/K1054131198/docroot/kronn.de/weblog/index.php(17): require('/var/www/K10541...') #8 {main} in /var/www/K1054131198/docroot/kronn.de/etc/counter/counter.php on line 61