<chapter id="dtl">
<title>Anpassung des Front-End</title>
<para>
OTRS macht es möglich, das Erscheinungsbild des Systems (Front-End) an die eingenen Bedürfnisse anzupassen. Das Zauberwort lautet: dtl (Dynamic Template Language). Alle Front-End Masken befinden sich im Verzeichnis: <emphasis role='bold'>~otrs/Kernel/Output/HTML/&lt;THEME&gt;/*.dtl</emphasis>. Standardmäßig ist das "Standard" Motiv ausgewählt. 
</para>
<para>
Sie haben also die Möglichkeit, Ihr OTRS so anzupassen, wie Sie es möchten. Sie können aber auch ein gegenes Motiv entwerfen.
</para>

<sect1 id="dtl-syntax">
<title>Die dtl-Syntax</title>
<para>
<emphasis role='bold'>Kommentar</emphasis>
</para>
<para>
Ein Kommentar wird durch ein einfaches "#"-Zeichen eingeleitet.
<programlisting>
<![CDATA[
#  --
#  das ist ein Kommentar
#  --
]]>
</programlisting>
</para>

<para>
<emphasis role='bold'>Eine Variable setzen</emphasis>
</para>
<para>
<programlisting>
<![CDATA[
<dtl set $Data{"Test1"} = "German">
]]>
</programlisting>
</para>
<para>
Note: $Data{"xyz"} existiert nur in diesem dtl-Datei wobei $Env{"xyz"} in allen dtl-Dateien existiert. 
Neu: $Config{"xyz"} ist eine nicht nur "read only" und existiert im gesamten Programm! (2002-05-22 / 0.5 BETA5)
</para>

<para>
<emphasis role='bold'>Ausgabe einer Variablen</emphasis>
</para>
<para>
Um eine Variable auf dem Monitor auzugeben, verwenden Sie einfach:
<programlisting>
<![CDATA[
$Data{"xyz"} oderr $Env{"xyz"}
]]>
</programlisting>
</para>

<para>
<emphasis role='bold'>Text Übersetzung</emphasis>
</para>
<para>
<programlisting>
<![CDATA[
$Text{"Das wird übersetzt"}
]]>
</programlisting>
</para>
<para>
Achten Sie darauf, dass die Übersetzung in den entsprchenden Übersetzungsdateien unter <emphasis role='bold'>"$HOME_OTRS/Kernel/Language/*.pm"</emphasis> existiert. Wenn diese nicht existiert, wird der gegebene Text angezeigt.
</para>

<para>
<emphasis role='bold'>Bedingungen</emphasis>
</para>
<para>
<programlisting>
<![CDATA[
<dtl if ($Text{"Lock"} eq "Lock") { $Data{"FrontendLanguage"} = "English"; }>
]]>
</programlisting>
</para>
<para>
Es gibt lediglich die Möglichkeit etwas in $Data{"xyz"} und $Env{"xyz"} zu speichern.
</para>

<para>
<emphasis role='bold'>Auf eine Konfigurationsoption zugreifen - $Config{}</emphasis>
</para>
<para>
<programlisting>
<![CDATA[
$Config{"Sendmail"}
]]>
</programlisting>
</para>

<para>
<emphasis role='bold'>Gemeinsame Umgebungsvariablen - $Env{}</emphasis>
</para>
<para>
<programlisting>
<![CDATA[
    $Env{"SessionID"} --> Die aktuelle Session ID
    $Env{"Time"} --> Die aktuelle Zeit z.B. 'Thu Dec 27 16:00:55 2001'
    $Env{"CGIHandle"} --> Die aktuelle CGI-Datei z.B. 'index.pl'
    $Env{"UserCharset"} --> Der akturelle Zeichensatz z.B. 'iso-8859-1'
    $Env{"Baselink"} --> Der Basislink --> index.pl?SessionID=...
    $Env{"UserFirstname"} --> z.B. Dirk
    $Env{"UserLastname"} --> z.B. Hohndel
    $Env{"UserLogin"} --> z.B. mgg@x11.org
    $Env{"UserIsGroup[users]"} = Yes --> Benutzergruppen (useful for own links) 
    $Env{"UserIsGroup[admin]"} = Yes 
    $Env{"Action"} --> Die aktuelle Aktion
    $Env{"Subaction"} --> Die aktuelle Subaktion
]]>
</programlisting>
</para>

<para>
<emphasis role='bold'>System-Aufruf</emphasis>
</para>
<para>
Um den Output eines Systemkommandos zu bekommen, verwenden Sie:
<programlisting>
<![CDATA[
# execute system call
<dtl system-call $Data{"uptime"} = "uptime">

# print
$Data{"uptime"}
]]>
</programlisting>
oder
<programlisting>
<![CDATA[
# execute system call
<dtl system-call $Data{"procinfo"} = "procinfo | head -n1 ">

# print
$Data{"procinfo"}
]]>
</programlisting>
</para>

<para>
<emphasis role='bold'>Beispiele</emphasis>
</para>
<para>
<programlisting>
<![CDATA[
# set variable
<dtl set $Data{"Test1"} = "English">

# print variable
Echo: $Data{"Test1"} 

# condition
<dtl if ($Text{"Lock"} ne "Lock") { $Data{"Test2"} = "Not English!"; }>

# print result
Result: $Data{"Test1"}
]]>
</programlisting>
oder
<programlisting>
<![CDATA[
# translation test
Lock: $Text{"Lock"}

# config options
Sendmail: $Config{"Sendmail"}
]]>
</programlisting>
</para>

</sect1>


<sect1 id="dtl-examles">
<title>Beispiele für dtl-Dateien</title>

<sect2>
<title>Motd.dtl</title>
<para>
Wenn Sie diese Datei anpassen möchten, verwenden Sie bitte diese Datei: <emphasis role='bold'>~otrs/Kernel/Output/HTML/Standard/Motd.dtl</emphasis>
<programlisting>
<![CDATA[
<p>
Das ist die Nachricht des Tages. Sie können dies in der Datei Kernel/Output/HTML/Standard/Motd.dtl ändern.
</p>
]]>
</programlisting>
</para>
</sect2>


<sect2>
<title>Login.dtl</title>
<para>
Dies ist ein Beispiel für das Loginfenster. Wenn Sie dieses abändern möchten, verwenden Sie bitte folgende Datei:
<emphasis role='bold'>~otrs/Kernel/Output/HTML/&lt;THEME&gt;/Login.dtl</emphasis>
<programlisting>
<![CDATA[
# --
# http headers
# --
Content-Type: text/html; charset=$Env{"UserCharset"};
X-Powered-By: OTRS - Open Ticket Request System (http://otrs.org)

# --
# html comment
# --

<!-- OTRS: Copyright 2002, OTRS Project. This Software is under the GPL. -->
<!--       Web: http://otrs.org/ - Lists: http://lists.otrs.org/         -->
<!--      GNU Public License: http://www.gnu.org/licenses/gpl.txt        -->

# --
# set some html variables
# --
<dtl set $Env{"BGCOLOR"} = "#BBDDFF">
<dtl set $Env{"BGTableColor0"} = "#000000">
<dtl set $Env{"BGTableColor1"} = "#FFFFFF">
<dtl set $Env{"BGTableColor2"} = "#EEEEEE">
<dtl set $Env{"FontColor0"} = "#000000">
<dtl set $Env{"FontColor1"} = "#FFFFFF">
<html>
<head>
    <title>OTRS :: $Text{"$Data{"Title"}"}</title>
</head>
<!-- end header -->
<body bgcolor="$Env{"BGCOLOR"}" text="$Env{"FontColor0"}">

<center>

<p>
<font color="red">$Data{"Message"}</font>
</p>

<p>
<form action="$Env{"CGIHandle"}" method="post" enctype="application/x-www-form-urlencoded">
<input type="hidden" name="Action" value="Login">

<table border="0" cellspacing="0" cellpadding="3" width="240">
<tr bgcolor="$Env{"BGTableColor0"}">
  <td align="center"><font color="$Env{"FontColor1"}"><b>$Text{"Welcome to OTRS"}</b></font></td>
</tr>
<tr>
  <td align="center" bgcolor="$Env{"BGTableColor1"}">
    <table cellspacing="8" cellpadding="2">
    <tr>
      <td>Username:</td>
      <td><input type="text" name="User" value="$Data{"User"}" size="18"></td>
    </tr>
    <tr>
      <td>Password:</td>
      <td><input type="password" name="Password" size="18"></td>
    </tr>
    </table>
  <input type="submit" value="$Text{"Login"}">
  </td>
</tr>
</table>
</form>
</p>

# --
# Message of the day data!
# --
$Data{"Motd"}

</center>

</body>
</html>

]]>
</programlisting>
</para>
</sect2>


<sect2>
<title>Header.dtl</title>
<para>
Dies ist die Standardkopfzeile einer jeden OTRS Seite. Wenn Sie diese anpassen möchten, verwenden Sie bitte die folgende Datei:
<emphasis role='bold'>~otrs/Kernel/Output/HTML/&lt;THEME&gt;/Login.dtl</emphasis>
<programlisting>
<![CDATA[
# --
# http headers
# --
Content-Type: text/html; charset=$Env{"UserCharset"};

# --
# html comment
# --

<!-- OTRS: Copyright 2002, OTRS Project. This Software is under the GPL. -->
<!--       Web: http://otrs.org/ - Lists: http://lists.otrs.org/         -->
<!--      GNU Public License: http://www.gnu.org/licenses/gpl.txt        -->
# --
# set some html variables
# --
<dtl set $Env{"BGCOLOR"} = "#BBDDFF">
<dtl set $Env{"BGTableColor0"} = "#000000">
<dtl set $Env{"BGTableColor1"} = "#FFFFFF">
<dtl set $Env{"BGTableColor2"} = "#EEEEEE">
<dtl set $Env{"FontColor0"} = "#000000">
<dtl set $Env{"FontColor1"} = "#FFFFFF">
<dtl set $Env{"Box0"} = "[ ">
<dtl set $Env{"Box1"} = " ]">
# --
# check refresh
# --
<dtl if ($Data{"Refresh"} ne "") { $Data{"MetaHttpEquiv"} = "<meta http-equiv="refresh" content="$Data{"Refresh"}">"; }>
# --
<html>
<head>
    <title>OTRS :: $Text{"$Data{"Title"}"}</title>
</head>
<!-- end header -->
]]>
</programlisting>
</para>
</sect2>
</sect1>

<sect1 id="dtl-theme">
<title>Erstellen eines neuen Motivs</title>
<para>
Um ein neues Motiv zu erstellen, erstellen Sie zuerst ein neues Motivverzeichnis (mkdir ~otrs/Kernel/Output/HTML/NewTheme/). 
Kopieren Sie alle existierenden Motive in das neue Verzeichnis (cp ~otrs/Kernel/Output/HTML/Standart/*.dtl ~otrs/Kernel/Output/HTML/NewTheme/). 
</para>
<para>
Modifizieren Sie die dtl-Dateien nach belieben.
</para>
<para>
Legen Sie einen neuen Datenbankeintrag für dieses Motiv an. Dies muss über SQL erfolgen.
<programlisting>
<![CDATA[
shell:~> mysql -u root -p some-pass otrs
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 3.23.48-log

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> INSERT INTO theme
    ->     (theme, valid_id, create_time, create_by, change_time, change_by)
    ->     VALUES
    ->     ('NewTheme', 1, current_timestamp, 1, current_timestamp, 1);
mysql>
]]>
</programlisting>
</para>
<para>
Fertig. Öffnen Sie die Einstellungsseite und ändern Sie das Motiv.
</para>
<para>
Wenn Sie Ihr neues Motiv standardmäßig verwenden möchten (login,....),  dann fügen Sie bitte die folgende Konfigurationseinstellung in Ihre Konfigurationsdatei (Kernel/Config.pm) ein.
<programlisting>
<![CDATA[
    $Self->{DefaultTheme} = 'NewTheme';
]]>
</programlisting>
</para>
</sect1>

</chapter>
