Heute habe ich mir mit Felix den Template Teil des Blogs, an dem wir gerade schrauben, angeschaut. Ziel war es eine Blog-Posting Seite zu bauen die möglichst einfach zu warten ist und gleichzeitig möglichst alle Features bietet die auch die Standard Wiki-Editier-Seite von Trac bietet.
Das geht überraschenderweise sogar ganz gut. Denn: Trac ab 0.11 verwendet Genshi als Template-Sprache und Genshi wiederum ist XML mit XPath allüren.
Will heißen wir konnten uns das Template für die normale Wiki-Eingabe nehmen und dann sagen: Aber die Überschrift oben "Editing XXXXX" soll bitte weg und dafür soll da stehen "Create Blog Entry" - ein Feature das die meisten Template-Engines schon mal nicht bieten.
Und das ist natürlich geil, weil wir nicht den kompletten Template-Source kopieren müssen um das gleiche look und feel zu kriegen.
Nur das XPath natürlich wie alles bei XML total kompliziert macht. Das heißt zum Beispiel das man damit nicht sagen kann, nimm dass und ersetze darin das gegen dies. Neeeiiiin. Natürlich ist alles andersherum.
Man sagt also: Meine Welt ist so definiert, das dies immer wenn es auftritt durch das ersetzt wird und jetzt hole ich mal das original in meine Welt hinein und magisch wird darin alles ersetzt.
Großartig.
Klar das geht - aber das hätte man auch einfacher haben können.
p.s.: Weiß jemand wie man mit XPath aus dieser Struktur
<fieldset id="changeinfo"> <legend>Change information</legend> <div class="field"> <label for="tags">Tag under: (<a href="http://xn--hcker-gra.net/cgi-bin/trac.cgi/tags"> view all tags</a>)</label><BR/> <input title="Comma separated list of tags" type="text" id='tags' name="tags" size="30" value="blog"> </div> <div class="field"> <label>Comment about this change (optional):<br /> <input id="comment" type="text" name="comment" size="60" value="" /></label> </div><br /> <div class="options"> <label><input type="checkbox" name="readonly" id="readonly" /> Page is read-only</label> </div> </fieldset>
nur das div mit dem label und input für den Kommentar herausmatchen kann?
Unsere Versuche sind erst einmal bei diesem XPath query stehen geblieben div[@id='changeinfo1']/div[@class='field']
.