Intern: Serverwechsel (Update 1)
Meine Homepage wechselt in den nächsten Tagen den Server.
Nachdem Wechsel kann es einige Stunden bis Tage dauern bis alle DNS-Server
auf dem neuesten Stand sind und man beim Aufruf von www.sven-drieling.de
auf dem neuen Server landet - dies betrifft auch die E-Mailadressen.
Update 1
Einrichtung des Servers ist abgeschlossen. Nun werden die DNS-Einträge auf den neuen Server gesetzt.
[Direktlink]
In ydLinks benutze ich $link->§title, zur maskierten HTML-Ausgabe. Mit
$link->title (Raw) und $link->§title (HTML-maskiert) gibt es aber
nur zwei Varianten mehr bietet dieses Beispiel.
Das Prinzip ist wie in Link.php nur diesmal steht das '§
'
in der Mitte des Attributes und dahinter folgt das gewünschte Format.
__get_format.php:
$obj = new Model();
$obj->foo = 'aBcDeF " &';
echo 'raw : ', $obj->foo, "\n";
echo 'uppercase : ', $obj->foo§uppercase, "\n";
echo 'lowercase : ', $obj->foo§lowercase, "\n";
echo 'specialchars: ', $obj->foo§specialchars, "\n";
echo 'noquotes : ', $obj->foo§noquotes, "\n";
In __get($name)
wird mit preg_match()
der Name
und das Format extrahiert und daraufhin via switch($format)
die gewünschte Ausgabe zurückgegeben.
__get_format.php:
public function __get($name) {
// $obj->foo§uppercase
if(preg_match('#^([^§]+)§([^§]+)$#', $name, $matches)) {
$name = $matches[1];
$format = $matches[2];
$value = $this->_values[$name];
switch($format) {
case 'lowercase' : return strtolower($value); break;
case 'uppercase' : return strtoupper($value); break;
case 'specialchars': return htmlspecialchars($value, ENT_QUOTES | ENT_HTML5, 'UTF-8'); break;
case 'noquotes' : return htmlspecialchars($value, ENT_NOQUOTES | ENT_HTML5, 'UTF-8'); break;
default:
throw new Exception("Unknown format '{$format}'.");
break;
}
} else {
return $this->_values[$name];
}
}
Callback
Mit einem Callback wie im __get_format_callback.php
-Beispiel
wird das Ganze noch flexibler.
$obj->addGetFormat('reverse', function($value) {return strrev($value);});
echo 'reverse : ', $obj->foo§reverse, "\n";
Das $this->_formats
-Array enthält formatName
=> Callback
-Paare, wobei die Callbacks in diesem
Fall anonyme Funktionen sind, die in __get($name)
ausgewählt und ausgeführt werden.
public function __construct() {
$this->addGetFormat('raw' , function($value) {return $value;});
$this->addGetFormat('lowercase' , function($value) {return strtolower($value);});
...
}
public function addGetFormat($formatName, callable $callback) {
$this->_formats[$formatName] = $callback;
}
public function __get($name) {
// $obj->foo§uppercase
if(preg_match('#^([^§]+)§([^§]+)$#', $name, $matches)) {
$name = $matches[1];
$format = $matches[2];
} else {
$format = 'raw';
}
$value = $this->_values[$name];
return $this->_formats[$format]($value);
}
Beispiele: Revision 192
[Direktlink]
Für die Eingabe der Bookmarks gibt es nun beliebig viele Templates, die aus einer Liste gewählt werden können.
Gespeichert werden sie als JSON, das macht es einfach verschiedene
Templates in einer Datei zu speichern und auch Sonderzeichen wie der
Zeilenumbruch werden automatisch von json_encode()
/json_decode()
verarbeitet.
Fehlende Tests zeitaufwendig
Die im ydLinks-Prototyp fehlende Tests waren in diesem
Entwicklungsschritt sehr zeitaufwendig, da ich so ständig selbst die
Eingaben, das Speichern und die Kontrolle der richtigen Anzeige
wiederholen musste.
Download: Revision 188
svn checkout --revision 188 https://svn.sven-drieling.de/repos/trunk/yd/links/ yd-links-188
[Direktlink]
Die Bookmarks haben nun einen Atom-Feed.
Feed für Linkblog?
Nehme erst einmal http://www.sven-drieling.de/diary/atom.xml
als Grundlage für den Atom-Feed der Bookmarks.
Hmm, aber für Links gibt es doch eine spezielle Variante... - später suchen.
Programmier... Läuft.
Ah, How to make a linkblog in Atom.
Anpassen...
http://www.sven-drieling.de/bookmarks/1
habe ich noch nicht implementiert und dieser Link ist im Gegensatz zum eigentlich verlinkten Inhalt nun sehr präsent... Also, erst mal wieder die vorige Version nehmen.
Fehler als HTML-Seite
Ähnliches Spiel bei den Fehlermeldungen wie "500 Internal Server Error".
Da habe ich zunächst die Ausgabe als Atom-Feed mit einem Eintrag, der
die Fehlermeldung enthält ausprobiert aber diese wird in Opera, Firefox nicht sinnvoll angezeigt und im Feedreader macht es IMHO wenig Sinn, dass dann die Fehlermeldungen als Einträge gespeichert werden. Daher werden
die Fehlermeldungen nun als HTML-Seite ausgeliefert. Macht sich auch
gut im Feedreader.
Fazit
Bei Gelegenheit müsste ich mich mal wieder ausführlicher mit Atom- und RSS-Feeds beschäftigen.
Download: Revision 154
svn checkout --revision 154 https://svn.sven-drieling.de/repos/trunk/yd/links/ yd-links-154
[Direktlink]
Die erste neue Komponente für meine Homepage ist ydlinks mit der Schritt für Schritt die Bookmarks in die Datenbank kommen.
Das Skript ist zunächst einmal in PHP ohne Framework geschrieben und dient so zusätzlich dazu darüber nachzudenken was ein Framework enthalten und wie es aufgebaut sein sollte. Weshalb diese 1. Version von ydlinks absichtlich
chaotisch ist und verschiedene Ideenansätze enthält.
Statt einer REST-API probiere ich z.B. eine befehlsorientierte API aus, so
entfällt bei den Formularen die Umleitung vom POST- zum GET-Request.
Download: Revision 147
svn checkout --revision 147 https://svn.sven-drieling.de/repos/trunk/yd/links/ yd-links-147
[Direktlink]