Wer bereits ein größeres Programmierprojekt durchgeführt hat, wird die Erfahrung gemacht haben, dass man auf ein Bugtrackingsystem nicht wirklich verzichten kann.
Im Beitrag 1:0 im Kampf JIRA vs. Trac habe ich schon zwei solche Systeme angesprochen JIRA und Trac, wobei ich hier auf letzteres eingehen möchte.
Nachdem man sich mit diversen Funktionen und Plugins in Trac “angefreundet” hat, stellt sich meistens die grundlegende Frage: “Wie kann ich das Design von Trac so ändern, dass es zu meinem Projekt passt”. Das fängt beim Logo an und hört bei der Anzeige der Projektliste auf – insofern man mehrere Projekte hat.
Trac bietet hierfür auf der eigenen Projektseite auch ein Tutorial, deshalb möchte ich hier nur eine kurze Einführung geben und dann auf ein paar Fallstricke bei der Individualiserung des Layouts eingehen, die in dem Tutorial nicht auftauchen. Auf das Ein- bzw. Ausblenden von Navigationspunkten oder die entsprechenden Verlinkungen wird hier nicht eingegangen.
Das Templatingsystem von Trac basiert auf Genshi, einer Pythonbibliothek, die es erlaubt Text aus diversen Quellen für das Web aufzubereiten. Trac bedient sich hierbei vor allem des HTML-Parsers.
In dem Verzeichnis trac/templates unterhalb des Trac-Installationsverzeichnisses befinden sich alle html-Dateien für das Default-Template. Insbesondere die layout.html und die index.html sind hier relevant. Die layout.html bestimmt das Aussehen der projektspezifischen Seiten und die index.html die Seite für die Projektliste. Unter trac/htdocs befinden sich die Bilder, Javascript-Dateien und die CSS-Dateien.
Trac bietet pro Projekt diverse Stellen zur Individualisierung des Designs an. Eine eigene site.html im Verzeichnis templates und ein eigenes Verzeichnis htdocs, in der eine style.css angelegt werden kann.
Um das Layout der Projektliste anzupassen sollte man folgende Zeile in die Konfigurationsdatei vom Webserver (z.B. die default von Apache) schreiben
SetEnv TRAC_ENV_INDEX_TEMPLATE "/home/testUser/trac/templates/index.html"
beim Setzen der Variable TRAC_ENV_INDEX_TEMPLATE muss darauf geachtet werden, dass sich das Verzeichnis templates nicht unterhalb des Elternverzeichnisses der Umgebungen (Environments) liegt. Wenn z.B. folgendes definiert ist
SetEnv TRAC_ENV_PARENT_DIR "/home/testUser/trac/"
kommt es auf der Seite für die Projektliste (definiert durch die index.html) zu einer Fehlermeldung, dass die Datei VERSION für das Projekt templates fehlt. Aus diesem Grund sollte die Variable TRAC_ENV_PARENT_DIR auf ein anderes Verzeichnis zeigen. Z.B.
SetEnv TRAC_ENV_PARENT_DIR "/home/testUser/trac/projects"
Nachdem diese Vorbereitungen getroffen sind, kann man daran gehen, die eigenen Templates zu entwerfen und umzusetzen.
Für projektspezifische Templates kann, wie bereits gesagt, die site.html verwendet werden. In dieser Datei ist vor allem der Ausdruck
${select('*|text()')}
relevant. Dieser wird in Verbindung mit
py:match="body"
verwendet und bedeutet soviel wie: “Nimm alle Subtags und jeden Text unterhalb vom Body-Tag”. Wenn man jetzt aber auf einzelne Elemente zugreifen möchte, z.B. nur den Content- oder den Main-Bereich, dann kann man folgenden Ausdruck verwenden:
${select('div[@id="main"]|text()')}
bzw.
${select('div/div[@id="content"]|text()')}
Der Ausdruck in der Select-Anweisung ist eine Untermenge von XPath (siehe hierzu Genshi XPath).
Leider bietet Trac scheinbar noch kein projektübergreifendes Templating an.
[Update]
Es gibt doch eine Möglichkeit. Siehe hierzu diesen Beitrag.
Weitere Informationen zum dem Thema befinden sich auf der Seite http://trac.edgewall.org/wiki/TracInterfaceCustomization, sowie ein Beispiel auf http://querdenker.kicks-ass.org/trac/querdenker/wiki/TracTemplating.