request_url_withoutHTTP=,canonical_url_withHTTP=,canonical_url_withoutHTTP=,request_url_withoutHTTP_realspaces=. CMS (Seite 1 von 2) « Tags « Blog « Bernhard Häussner
Bernhard Häussner
Tags: Artikel mit dem Tag «CMS» durchstöbern

Howto: Alleinstehende Unds für XHTML umwandeln

16.04.2009, 13:22
$text=preg_replace ('/&(?!amp;|quot;|nbsp;|gt;|lt;|laquo;|raquo;|copy;|reg;|#[0-9]{1,5};|#x[0-9A-F]{1,4};)/','&', $text);

In meinem Markup-Parser für diesen Blog hatte ich das Problem, dass ich zwar einzelne & in &amp; umwandeln konnte, damit ich Et-Zeichen im ganz normalen Text schreiben kann, auf der anderen Seite aber auch HTML <tags> erlauben will. Wenn ich jetzt aber über HTML schrieben will, muss ich ja auch irgendwie die größer und kleiner-Zeichen encodieren, damit nicht alles einfach vom Browser gerendert wird. Wenn ich aber ein &lt; eingebe, würde das Kaufmanns-Und sofort zu &amp; umgewandelt und so würde dann im Quelltext &amp;lt; stehen und im Text nicht < sondern &lt;. Also brauchte ich eine Methode um nur einzelne kaufmännische Unds zu finden. Das lief dann auf obigen Regulären Ausdruck hinaus.

Er ersetzt & mit &amp; nur dann, wenn dahinter keines der HTML-Entities folgt. Da es eine sehr lange Liste von benannten HTML-Entities gibt, habe ich nur die aufgenommen, die man in HTML Umwandeln muss („htmlspecialchars“), damit ihre Bedeutung erhalten bleibt und ein paar Sonderzeichen, die ich sonst nie finde. Alles andere (z.B. &eacute; für é, 文字, ...) wird ja von UTF-8 abgedeckt. Für ASCII kann man auch noch die dezimale oder hexadecimale Unicode-Notierung verwenden.

Der regexp verwendet eine Erweiterung, die Negative Vorausschau (?!x). Das ist so etwas wie ein Unter-Ausdruck, der zwischendurch überprüft wird am Text nach der aktuellen Position. Die Buchstaben, die auf den überprüften Ausdrück passen, werden nicht mit "gefressen", sie werden also nicht übersprungen, sondern nur kurz getestet. Nur wenn der Ausdruck nicht zutrifft wird von der Ursprungsposition weiter getestet. Es gibt natürlich auch noch positive Vorausschau (?=x) (die weiter laufen lässt, wenn der Ausdruck passt), sowie positive (?<=x) und negative (?<!x) Zurückschau (die jeweils den Text vor der aktuellen Position prüfen).

Das würde zum Beispiel alle Minuskeln ausgeben, die nach einem „o“ stehen: [a-z](?<=o.). Man beachte den Punkt nach dem „o“. Er steht für das gerade überlaufene Zeichen für das jetzt geprüft wird was (von der aktuellen Position hinter dem Zeichen aus gesehen) davor steht. Das bedeutet in der Rücksicht sieht sich das Zeichen nochmal selbst. Noch ein Beispiel: .(?<=o(?#comment).{5}) findet alle Zeichen 5 Positionen vor „o“.

Diese Features stehen in Ruby übrigens nur teilweise zur Verfügung.

Kommentare: keine

Schneller abbr- und acronym-Tags im Editor

01.02.2009, 21:42

Die beiden Abkürzungs-Tags abbr und acronym werden kaum verwendet, vielleicht weil man nicht ständig Definitionen schreiben will, denn wozu gibt es Abkürzungen? Glücklicherweise kann ich die Definitionen auch fast automatisch schreiben, dank einer netten (und neuen) Funktion im CMS, die ich hier vorstellen werde.

Da eine Abk. meist mehrere Bedeutungen hat und man auch nicht immer wissen kann, was sich hinter den wenigen Buchstaben verbirgt, wäre man manchmal froh um eine Erklärung. Weil aber meistens sowieso klar ist, worum es sich handelt, darf die Erklärung auch nicht im Weg stehen. Eine Lösung dafür bieten die abbr- und acronym-Tags welche im title-Attribut eine Definition enthalten können, die dann vom Browser als Tooltip angezeigt wird.

Um jetzt diese Definitionen einfach einzufügen markiert man die Abkürzung im Editor und klickt auf den Abkürzungsbutton. Mit Javascript und AJAX wird eine Liste der Abkürzungen mit den markierten Buchstaben geladen, die die verschiedenen Definitionen enthält. Aus dieser wählt man dann die passende Definition und die Tags werden in den Text eingefügt. Sollte die passende Definition nicht gefunden werden, kann man einfach einen leeren abbr- oder acronym-Block einfügen.

Ein PHP-Skript generiert im Hintergrund die Abkürzungsdatenbank. Es sammelt in den vorhandenen Blogposts die verwendeten Abkürzungen mit ihren Definitionen heraus. Damit bei einer großen Abkürzungsdatenbank nicht so viel übertragen werden muss, filtert das PHP-Skript die Abkürzungen auch gleich noch. Da der Filter optional ist und ich ein CSS-Stylesheet für die Abkürzungsliste gebastelt habe, kann man sich die XML-Datei mit den Abkürzungen auch im Browser anschauen.

Auf diese weise ist das Hinzufügen von Abkürzungen kein Problem und es erscheinen auch immer nur die Abkürzungen, die man auch wirklich verwendet.

(andere neue Features des Blogs)

  • Print-Stylesheet
  • Suchfeld-Tipp
  • jQuery 1.3 und dessen
  • Live Events bei Feed-Tag-Wahl
  • Noscript-Warnung bei Feed-Tag-Wahl
  • und ein paar interne Sachen

War wohl ein produktives Wochenende. Ich bin auch bei ein paar anderen Projekten erheblich weiter gekommen.

Kommentare: keine

CMS fertig - endlich

01.11.2008, 16:06

Also das CMS zu Entwickeln hat jetzt etwas gedauert. Es ist eben immer eine Tortur, bis man alle Informationen so aufbereitet hat, dass sie in die Datenbank passen. Und dann noch der Dateiupload. Außerdem wollte ich ja so etwas wie BBCode. Aber es ist mir doch sehr gut gelungen:

BBCode

Eine größere Umstellung war das Markup für die Blogeinträge. Zwar war der Editor, der Tags einfügen kann schon fertig, doch alles basierte auf HTML-Tags. Auf kurz oder lang wird da aber der Content mit sinnlos langen Tags und Einstellungen zugemüllt. Mit dem neuen System kann ich jetzt natürlich nicht nur Absätze, Listen usw. schnell und einfach in einen Post einfügen, sondern auch Bilder mit Bildunterschrift und Thumbnail, Links zu Downloads und Blogpost und vieles mehr.

Bild- Und Dateiupload

Jetzt wo ich schon Useraccounts erstellt habe, kann ich auch in aller Ruhe an einem Dateiupload basteln. Es gibt jetzt also parallel zum Blogposteditor einen Fileuploader. In einem Tab kann ich die Dateien managen (bisher: hochladen und löschen), während ich im anderen noch am Post schreibe. Dann kann ich per Drag&Drop die Bilder und Downloads in den Blogeditor schieben. Wenn ich Bilder hoch lade, werden automatisch Thumbnails mit 100px und 540px Breite erstellt. Die Bilderfunktion kann man ganz gut in diesem Post bestaunen und die Downloadfunktion hier.

Ich habe mir auch über legt, ob ich eine Javascript-Bildershow implementieren soll, für Fotoalben gibt es ja flickr und ich hasse es, wenn man ein Bild im neuen Tab öffnet, und dann öffnet sich, je nach Qualität der Diashow auch mal gar nichts, oder nochmal die ganze Seite, nur mit einem Bild als Overlay.

Somit ist das CMS jetzt endlich einmal abgeschlossen und ich kann mich anderem spannenden widmen, z.B. der AJAX-Suchfunktion.

Kommentare: keine

Coole CMS-Funktionen!

28.10.2008, 22:51

So, jetzt kann Ich hier im CMS schön rumklicken um Formatierungen zu machen. Ich habe mich da ein bisschen an dem BBCode Script von SelfHTML und Wikipedias Markup "orientiert".

»Zwei Seelen wohnen, ach! in meiner Brust«
J. W. v. Goethe, Faust, Vers 1112

Auf kurz oder lang will ich dann auch noch ein paar andere Tags einfügen, und vor allem ein paar Tags um z.B. Blogeiträge zu verlinken, Bilder einzufügen etc. Doch heute habe ich erstmal vi gelernt, zumindest so grob, denn das war bisher doch eine meiner "größten Bildungslücken".

Next Steps

So gleich mal, was die nächsten Schritte sind, mit der neuen klickbaren Liste erstellt:

  • Eingene Tags für: Blogeinträge, Bilder, Downloads
  • Bilder/Dateien Upload
  • RSS-Feeds
  • Screenshots in About-Sektion
  • und der ganze Rest

Nun ja, es schreitet voran...

Kommentare: keine

CMS funktioniert - aber noch nicht fertig

28.10.2008, 11:34

Ja, es funktioniert. Das heißt man kann Artikel schreiben und löschen. Bzw. „man“ ist inzwischen übertrieben: Ich bzw. als „Editor“ gekennzeichnete User können das. Und wo wir schon beim Stichwort sind: Es gibt jetzt User.

Als erstes war dringend nötig, mein (mehr oder weniger) gutes altes Loginscript, das auf Client-seitigem sha1-Hashing basiert, auf mein neues PHP-Brick-System umzustellen. Dazu habe ich das ganze erstmal in seine Bestandteile auseinander genommen:

  • Die Loginseite, nun als Controller erstellt mit dazugehörigem XML-Template
  • Die Userverwaltung als Klasse mit Zugriff auf die Eigenschaften der User
  • Die Key-Verwaltung für das Clientseitige 1-mal-Verschlüsseln als eigne Klasse
  • Das Loginformular im Login-XML-Template aus den selben Bausteinen, wie das CMS-Formular bzw. das Kommentarformular. Hier zeigt sich erstmals sehr gute Wiederverwendbarkeit: Ich habe es doch von Anfang an gewusst.
  • Und als kleine Ergänzung zu den Bisherigen Formularbausteinen: Der Passwortbaustein, der sich, wie von selbst, um die Beschaffung des Keys und die Client-seitige sha1-Verschlüsselung kümmert. Außerdem nimmt er sich aus dem Monkey-Formular-Mechanismus heraus. Bei einem Fehler wird also nicht wieder das Passwort angezeigt. Als flexiblen Baustein könnte ich ihn jetzt ohne Probleme z.B. in das Kommentarformular bauen.

Insgesammt zeigt sich also langsam die Power und Erweiterbarkeit des Bricksystems. Bei den Userrechten lief es ähnlich „schön“. Der User hat einen Brick, in dem er sieht, dass er eingeloggt ist und sich ausloggen kann, der Editor hat zusätzlich einen, in dem er Posts erstellen und bearbeiten kann. Das CMS war auch schnell gesperrt. Als kleines Extra gibt es optional den Userbaustein auch für nicht eingeloggte Benutzer, wo sie dann sehen, dass sie nicht eingeloggt sind, und sich einloggen können. Und dieser Brick vererbt seine Attribute auf den nur-eingeloggte-Brick, sodass jener dann eigentlich nur aus der Kontrolle besteht. Sehr toll.

Das heißt leider noch lange nicht, dass das CMS fertig ist. Denn erstens reden wir hier ja nur von dem CMS für den Blog. Und außerdem fehlt noch immer sämtliche auto-Formatierung für redaktionelle Texte. Also klickbare Listen, Bilder, Zitate, Absätze, Überschriften, Links usw., da muss ich mir nochmal überlegen, wie ich das dann überhaupt realisiere. Das wird dann erstmal der nächste größere Schritt. Dann dürfte, könnte, wollte, müsste, sollte das Erstellen der anderen Sektionen kein Problem mehr sein. Oder? (Ich habe nämlich die Vorahnung, dass ich die Bricks nicht alle flexibel genug gemacht habe, aber wir werden sehen. )

Kommentare: keine
[ Seite 1 2 ] Nächste Seite »
 
Χρόνογραφ
© 2008-2017 by Bernhard Häussner - Impressum - Login
Kurz-Link zur Homepage: http://1.co.de/