<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PINC-Blog &#187; Templates</title>
	<atom:link href="http://www.pincservices.de/wordpress/tag/templates/feed" rel="self" type="application/rss+xml" />
	<link>http://www.pincservices.de/wordpress</link>
	<description></description>
	<lastBuildDate>Thu, 04 Mar 2010 19:21:36 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Trac-Themes</title>
		<link>http://www.pincservices.de/wordpress/trac-themes</link>
		<comments>http://www.pincservices.de/wordpress/trac-themes#comments</comments>
		<pubDate>Thu, 28 Jan 2010 21:38:12 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Projektverwaltung]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Werkzeuge]]></category>
		<category><![CDATA[htdocs_location]]></category>
		<category><![CDATA[Templates]]></category>
		<category><![CDATA[themes]]></category>
		<category><![CDATA[Trac]]></category>

		<guid isPermaLink="false">http://www.pincservices.de/wordpress/?p=410</guid>
		<description><![CDATA[2 Jahre ist es jetzt in etwa her, dass ich einen Artikel über Eigene Templates in Trac geschrieben habe. Seitdem ist ein wenig passiert. Diesen Änderungen möchte ich hiermit Rechnung tragen. Ich habe das ganze Trac-Themes genannt, weil es weniger um Templating an sich gehen soll, sondern eher um eine Möglichkeit gemeinsame Styles festlegen zu [...]]]></description>
			<content:encoded><![CDATA[<p>2 Jahre ist es jetzt in etwa her, dass ich einen Artikel über <a href="http://www.pincservices.de/wordpress/eigene-templates-in-trac" onclick="return TrackClick('http%3A%2F%2Fwww.pincservices.de%2Fwordpress%2Feigene-templates-in-trac','Eigene+Templates+in+Trac')">Eigene Templates in Trac</a> geschrieben habe. Seitdem ist ein wenig passiert. Diesen Änderungen möchte ich hiermit Rechnung tragen. Ich habe das ganze Trac-Themes genannt, weil es weniger um Templating an sich gehen soll, sondern eher um eine Möglichkeit gemeinsame Styles festlegen zu können.</p>
<p>Leider ist es mit Trac immer noch nicht möglich unter einem Environment mehrere Projekte bzw. Repositories laufen zu lassen. Darum wird für jedes Projekt eine eigene Trac-Umgebung angelegt. Wichtig hierbei ist insbesondere für Firmen, dass alle Projekte zumindest in der Grundstruktur gleich aussehen und die Firmenfarben tragen.</p>
<h3>&#8220;&#8230; was bisher geschah&#8221;</h3>
<p>Wer zuerst probieren will, wie und was er alles anpassen kann, sollte sich das Verzeichnis <code>templates</code> unterhalb seiner Trac-Umgebung anschauen. Standardmäßig liegt dort die Datei <code>site.html</code>. Wenn man sie das erste Mal aufmacht, kommt sie sehr unscheinbar daher, denn wie man sieht, sieht man nichts. Nur einen <code>html</code>-Tag und ein paar unbekannt anmutende Python-Attribute.<br />
Auf der Seite <a href="http://trac.edgewall.org/wiki/TracInterfaceCustomization" onclick="return TrackClick('http%3A%2F%2Ftrac.edgewall.org%2Fwiki%2FTracInterfaceCustomization','http%3A%2F%2Ftrac.edgewall.org%2Fwiki%2FTracInterfaceCustomization')">http://trac.edgewall.org/wiki/TracInterfaceCustomization</a> ist glücklicherweise bereits ein Beispiel-Code für den Inhalt dieser Datei. Für jene, die gerne lieber mehrere Dateien nutzen wollen hier gleich die Anpassung mit Einbindung externer Dateien:</p>
<pre class="brush: xml;">
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;
      xmlns:py=&quot;http://genshi.edgewall.org/&quot;
      xmlns:xi=&quot;http://www.w3.org/2001/XInclude&quot;
      py:strip=&quot;&quot;&gt;

  &lt;!--! Add site-specific style sheet --&gt;
  &lt;head py:match=&quot;head&quot; py:attrs=&quot;select('@*')&quot;&gt;
    ${select('*|comment()|text()')}
    &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot;
          href=&quot;${href.chrome('common/style.css')}&quot; /&gt;
  &lt;/head&gt;

  &lt;body py:match=&quot;body&quot; py:attrs=&quot;select('@*')&quot;&gt;
    &lt;!--! Add site-specific header --&gt;
    &lt;div id=&quot;siteheader&quot;&gt;
       &lt;xi:include href=&quot;site_header.cs&quot;&gt;
         &lt;xi:fallback /&gt;
       &lt;/xi:include&gt;
    &lt;/div&gt;

    ${select('*|text()')}

    &lt;!--! Add site-specific footer --&gt;
    &lt;div id=&quot;sitefooter&quot;&gt;
      &lt;xi:include href=&quot;site_footer.cs&quot;&gt;
        &lt;xi:fallback /&gt;
      &lt;/xi:include&gt;
    &lt;/div&gt;
  &lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Interessanterweise funktioniert das einfache Anlegen einer <code>site_header.cs</code> und <code>site_footer.cs</code> nicht immer &#8211; bzw. bei mir hat das noch nie funktioniert -, wie es auf manchen Seiten beschrieben wird.<br />
Mit diesem Grundgerüst ausgestattet lässt sich schon anfangen herumzuspielen. Für weiterführende Informationen zu Genshi und Clearsilver &#8211; den Engines im Hintergrund &#8211; sei auf folgende Seiten verwiesen:</p>
<ul>
<li><a href="http://genshi.edgewall.org/" onclick="return TrackClick('http%3A%2F%2Fgenshi.edgewall.org%2F','http%3A%2F%2Fgenshi.edgewall.org%2F')">http://genshi.edgewall.org/</a></li>
<li><a href="http://www.clearsilver.net/docs/" onclick="return TrackClick('http%3A%2F%2Fwww.clearsilver.net%2Fdocs%2F','http%3A%2F%2Fwww.clearsilver.net%2Fdocs%2F')">http://www.clearsilver.net/docs/</a></li>
</ul>
<h3>Neue und alte Freunde</h3>
<p>Ein altbekannter Helfer beim Erstellen von Templates ist auch in der Version 0.11.5 noch vorhanden. Der Konfigurationsparameter <code>template_dir</code>.</p>
<pre class="brush: plain;">
[inherit]
template_dir=
</pre>
<p>Mit diesem Parameter lässt sich das Verzeichnis für die Templates festlegen und wodurch verschiedene Seiten mit ein und demselben Template ausgestattet werden können.</p>
<p>Daneben ist ein neuer Freund dazugekommen der Parameter <code>htdocs_location</code>. Mit diesem Parameter werden alle internen URLs, die mit &#8220;common/&#8221; beginnen in die URL umgeschrieben, die als Wert angegeben wurde.</p>
<pre class="brush: plain;">
[trac]
htdocs_location=http://localhost/mytemplate
</pre>
<p>Führt, dazu, dass aus</p>
<pre class="brush: xml; gutter: false;">
&lt;link rel=&quot;stylesheet&quot; href=&quot;/trac/templating/chrome/common/css/trac.css&quot; type=&quot;text/css&quot; /&gt;
</pre>
<p>folgendes wird</p>
<pre class="brush: xml; gutter: false;">
&lt;link rel=&quot;stylesheet&quot; href=&quot;http://localhost/mytemplate/css/trac.css&quot; type=&quot;text/css&quot; /&gt;
</pre>
<p><strong>Achtung!</strong> Leider hat die Sache einen Haken. Eigene Links aus der <code>site.html</code> werden nicht übersetzt. Der folgende Code</p>
<pre class="brush: plain; gutter: false;">
${href.chrome('common/style.css')}
</pre>
<p>wird nur in <code>"/trac/templating/chrome/common/style.css"</code> umgewandelt, aber nicht weiter.</p>
<p>Wichtig ist außerdem zu beachten, dass <code>htdocs_location</code> nur für statische Inhalte, wie Bilder, JavaScript- und CSS-Dateien gedacht ist. Templates werden nicht automatisch von dort erkannt. Diese müssen explizit über <code>template_dir</code> konfiguriert werden. Leider ist es hier nur möglich lokale Verzeichnisse zu setzen. Wer z.B. versucht eine Internetadresse anzugeben, bekommt zwar keine Fehlermeldung, wird aber mit einem Standard-Template &#8220;belohnt&#8221;.</p>
<p>Abschließend möchte ich sagen, dass &#8211; gefühlt &#8211; wesentlich mehr über die <code>trac.ini</code> konfigurierbar ist, als es noch vor 2 Jahren der Fall war. Das macht definitiv Lust auf mehr, aber dennoch bleibt das ein oder andere noch zu tun.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pincservices.de/wordpress/trac-themes/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Projektübergreifende Templates in Trac</title>
		<link>http://www.pincservices.de/wordpress/projektubergreifende-templates-in-trac</link>
		<comments>http://www.pincservices.de/wordpress/projektubergreifende-templates-in-trac#comments</comments>
		<pubDate>Fri, 21 Mar 2008 05:42:43 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Projektverwaltung]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Corporate Identity]]></category>
		<category><![CDATA[Individualisierung]]></category>
		<category><![CDATA[Projektmanagement]]></category>
		<category><![CDATA[Templates]]></category>
		<category><![CDATA[Trac]]></category>

		<guid isPermaLink="false">http://www.pincservices.de/wordpress/projektubergreifende-templates-in-trac</guid>
		<description><![CDATA[Im Beitrag http://www.pincservices.de/wordpress/eigene-templates-in-trac
habe ich bereits vorgestellt wie man projektspezifische Designanpassungen machen kann bzw. wie die Projektliste in Trac anpassbar ist. Damals habe ich geschrieben, dass es scheinbar keine Möglichkeit gibt projektübergreifende Templates zu erstellen. Nun die frohe Kunde: Es geht doch.
Leider bietet Trac keine Möglichkeit über eine globale Variable das allgemeine Templateverzeichnis zu definieren. Man [...]]]></description>
			<content:encoded><![CDATA[<p>Im Beitrag <a href="http://www.pincservices.de/wordpress/eigene-templates-in-trac" onclick="return TrackClick('http%3A%2F%2Fwww.pincservices.de%2Fwordpress%2Feigene-templates-in-trac','http%3A%2F%2Fwww.pincservices.de%2Fwordpress%2Feigene-templates-in-trac')">http://www.pincservices.de/wordpress/eigene-templates-in-trac</a><br />
habe ich bereits vorgestellt wie man projektspezifische Designanpassungen machen kann bzw. wie die Projektliste in <a href="trac.edgewall.org/" target="_blank">Trac</a> anpassbar ist. Damals habe ich geschrieben, dass es scheinbar keine Möglichkeit gibt projektübergreifende Templates zu erstellen. Nun die frohe Kunde: Es geht doch.</p>
<p>Leider bietet Trac keine Möglichkeit über eine globale Variable das allgemeine Templateverzeichnis zu definieren. Man muss hierfür die <em>trac.ini </em>im Verzeichnis <em>conf</em> der jeweiligen Projektumgebung anpassen. In dieser Datei gibt es folgenden Abschnitt:</p>
<pre class="brush: plain;">
[inherit]
plugins_dir =
templates_dir =
</pre>
<p>Hier kann man das eigene Templateverzeichnis angeben, welches als Default verwendet werden soll.<br />
Im Fall des Beispiels aus dem obigen Beitrag würde man den Eintrag</p>
<pre class="brush: plain;">templates_dir = /home/testUser/trac/templates</pre>
<p>setzen.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pincservices.de/wordpress/projektubergreifende-templates-in-trac/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eigene Templates in Trac</title>
		<link>http://www.pincservices.de/wordpress/eigene-templates-in-trac</link>
		<comments>http://www.pincservices.de/wordpress/eigene-templates-in-trac#comments</comments>
		<pubDate>Sun, 16 Mar 2008 13:23:03 +0000</pubDate>
		<dc:creator>Rob</dc:creator>
				<category><![CDATA[Projektverwaltung]]></category>
		<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Genshi]]></category>
		<category><![CDATA[Templates]]></category>
		<category><![CDATA[Trac]]></category>

		<guid isPermaLink="false">http://www.pincservices.de/wordpress/?p=17</guid>
		<description><![CDATA[Tipps bei der Erstellung von individuellen Templates fÃ¼r Trac. ]]></description>
			<content:encoded><![CDATA[<p>Wer bereits ein größeres Programmierprojekt durchgeführt hat, wird die Erfahrung gemacht haben, dass man auf ein Bugtrackingsystem nicht wirklich verzichten kann.<br />
Im Beitrag <a href="http://www.pincservices.de/wordpress/10-im-kampf-jira-vs-trac" onclick="return TrackClick('http%3A%2F%2Fwww.pincservices.de%2Fwordpress%2F10-im-kampf-jira-vs-trac','1%3A0+im+Kampf+JIRA+vs.+Trac')">1:0 im Kampf JIRA vs. Trac</a> habe ich schon zwei solche Systeme angesprochen JIRA und Trac, wobei ich hier auf letzteres eingehen möchte.</p>
<p>Nachdem man sich mit diversen Funktionen und Plugins in Trac &#8220;angefreundet&#8221; hat, stellt sich meistens die grundlegende Frage: &#8220;Wie kann ich das Design von Trac so ändern, dass es zu meinem Projekt passt&#8221;. Das fängt beim Logo an und hört bei der Anzeige der Projektliste auf &#8211; insofern man mehrere Projekte hat.</p>
<p>Trac bietet hierfür auf der eigenen Projektseite auch ein <a href="http://trac.edgewall.org/wiki/TracInterfaceCustomization" onclick="return TrackClick('http%3A%2F%2Ftrac.edgewall.org%2Fwiki%2FTracInterfaceCustomization','http%3A%2F%2Ftrac.edgewall.org%2Fwiki%2FTracInterfaceCustomization')" onclick="return TrackClick('http%3A%2F%2Ftrac.edgewall.org%2Fwiki%2FTracInterfaceCustomization','Tutorial')" target="_blank">Tutorial</a>, 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.</p>
<p>Das Templatingsystem von Trac basiert auf <a href="http://genshi.edgewall.org/" onclick="return TrackClick('http%3A%2F%2Fgenshi.edgewall.org%2F','Genshi')" target="_blank">Genshi</a>, einer Pythonbibliothek, die es erlaubt Text aus diversen Quellen für das Web aufzubereiten. Trac bedient sich hierbei vor allem des HTML-Parsers.</p>
<p>In dem Verzeichnis <em>trac/templates </em>unterhalb des Trac-Installationsverzeichnisses befinden sich alle html-Dateien für das Default-Template. Insbesondere die <em>layout.html</em> und die <em>index.html </em>sind hier relevant. Die layout.html bestimmt das Aussehen der projektspezifischen Seiten und die index.html die Seite für die Projektliste. Unter <em>trac/htdocs</em> befinden sich  die Bilder,  Javascript-Dateien und die CSS-Dateien.</p>
<p>Trac bietet pro Projekt diverse Stellen zur Individualisierung des Designs an. Eine eigene <em>site.html</em> im Verzeichnis <em>templates</em> und ein eigenes Verzeichnis <em>htdocs</em>, in der eine <em>style.css</em> angelegt werden kann.</p>
<p>Um das Layout der Projektliste anzupassen sollte man folgende Zeile in die Konfigurationsdatei vom Webserver (z.B. die <em>default</em> von Apache) schreiben</p>
<pre class="brush: python; light: true;">
SetEnv TRAC_ENV_INDEX_TEMPLATE &quot;/home/testUser/trac/templates/index.html&quot;
</pre>
<p>beim Setzen der Variable TRAC_ENV_INDEX_TEMPLATE muss darauf geachtet werden, dass sich das Verzeichnis <em>templates</em> nicht unterhalb des Elternverzeichnisses der Umgebungen (Environments) liegt. Wenn z.B. folgendes definiert ist</p>
<pre class="brush: python; light: true;">SetEnv TRAC_ENV_PARENT_DIR &quot;/home/testUser/trac/&quot;</pre>
<p> kommt es auf der Seite für die Projektliste (definiert durch die <em>index.html</em>) zu einer Fehlermeldung, dass die Datei <em>VERSION</em> für das Projekt templates fehlt. Aus diesem Grund sollte die Variable TRAC_ENV_PARENT_DIR auf ein anderes Verzeichnis zeigen. Z.B.</p>
<pre class="brush: python; light: true;">SetEnv TRAC_ENV_PARENT_DIR &quot;/home/testUser/trac/projects&quot;</pre>
<p>Nachdem diese Vorbereitungen getroffen sind, kann man daran gehen, die eigenen Templates zu entwerfen und umzusetzen.</p>
<p>Für projektspezifische Templates kann, wie bereits gesagt, die <em>site.html</em> verwendet werden. In dieser Datei ist vor allem der Ausdruck</p>
<pre class="brush: plain; light: true;">${select('*|text()')}</pre>
<p>relevant. Dieser wird in Verbindung mit</p>
<pre class="brush: python; light: true;">py:match=&quot;body&quot;</pre>
<p>verwendet und bedeutet soviel wie: &#8220;Nimm alle Subtags und jeden Text unterhalb vom Body-Tag&#8221;. 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:</p>
<pre class="brush: python; light: true;">${select('div[@id=&quot;main&quot;]|text()')}</pre>
<p>bzw.</p>
<pre class="brush: python; light: true;">${select('div/div[@id=&quot;content&quot;]|text()')}</pre>
<p>Der Ausdruck in der Select-Anweisung ist eine Untermenge von XPath (siehe hierzu <a href="http://genshi.edgewall.org/wiki/Documentation/0.4.x/xpath.html" onclick="return TrackClick('http%3A%2F%2Fgenshi.edgewall.org%2Fwiki%2FDocumentation%2F0.4.x%2Fxpath.html','Genshi+XPath')" target="_blank">Genshi XPath</a>).</p>
<p><strike>Leider bietet Trac scheinbar noch kein projektübergreifendes Templating an.</strike></p>
<p>[Update]</p>
<p>Es gibt doch eine Möglichkeit. Siehe hierzu <a href="http://www.pincservices.de/wordpress/projektubergreifende-templates-in-trac" onclick="return TrackClick('http%3A%2F%2Fwww.pincservices.de%2Fwordpress%2Fprojektubergreifende-templates-in-trac','diesen+Beitrag')">diesen Beitrag</a>.</p>
<p>Weitere Informationen zum dem Thema befinden sich auf der Seite <a href="http://trac.edgewall.org/wiki/TracInterfaceCustomization" onclick="return TrackClick('http%3A%2F%2Ftrac.edgewall.org%2Fwiki%2FTracInterfaceCustomization','http%3A%2F%2Ftrac.edgewall.org%2Fwiki%2FTracInterfaceCustomization')" onclick="return TrackClick('http%3A%2F%2Ftrac.edgewall.org%2Fwiki%2FTracInterfaceCustomization','Tutorial')" target="_blank">http://trac.edgewall.org/wiki/TracInterfaceCustomization</a>, sowie ein Beispiel auf <strike><a href="http://querdenker.kicks-ass.org/trac/querdenker/wiki/TracTemplating" onclick="return TrackClick('http%3A%2F%2Fquerdenker.kicks-ass.org%2Ftrac%2Fquerdenker%2Fwiki%2FTracTemplating','http%3A%2F%2Fquerdenker.kicks-ass.org%2Ftrac%2Fquerdenker%2Fwiki%2FTracTemplating')" target="_blank">http://querdenker.kicks-ass.org/trac/querdenker/wiki/TracTemplating</a></strike>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pincservices.de/wordpress/eigene-templates-in-trac/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
