Chapter 17. Customize the frontend

Table of Contents
The dtl syntax
Examples of dtl files
Create a new theme

It's possible to customize the frontend independently from OTRS releases. How? It's quite simply. The magic key is dtl (Dynamic Template Language). All frontend masks are located under ~otrs/Kernel/Output/HTML/<THEME>/*.dtl. Default is the "Standard" Theme.

So you have the power to customize each OTRS site the way you want to! You may even create completely new themes.

The dtl syntax

Comment

Comment is a simple '#'.
# --
# this is a comment
# --

Set a variable

<dtl set $Data{"Test1"} = "German">

Note: $Data{"xyz"} only exists in the current dtl file, whereas $Env{"xyz"} exists throughout all dtl files. New: $Config{"xyz"} is not only just read anymore, but exists throughout the whole program! (2002-05-22 / 0.5 BETA5)

Print a variable

To print a variable on the screen, simply use:
$Data{"xyz"} or $Env{"xyz"}

Text translations

$Text{"This should be translated"}

Take care that the translation exists in the "$HOME_OTRS/Kernel/Language/*.pm" files. If there isn't a translation, the text will be shown as given.

Condition

<dtl if ($Text{"Lock"} eq "Lock") { $Data{"FrontendLanguage"} = "English"; }>

It's only possible to store things into $Data{"xyz"} and $Env{"xyz"}.

Get a config option - $Config{}

$Config{"Sendmail"}

Common environment variables - $Env{}

    $Env{"SessionID"} --> the current session id
    $Env{"Time"} --> the current time e. g. 'Thu Dec 27 16:00:55 2001'
    $Env{"CGIHandle"} --> the current CGI handle e. g. 'index.pl'
    $Env{"UserCharset"} --> the current site charset e. g. 'iso-8859-1'
    $Env{"Baselink"} --> the baselink --> index.pl?SessionID=...
    $Env{"UserFirstname"} --> e. g. Dirk
    $Env{"UserLastname"} --> e. g. Hohndel
    $Env{"UserLogin"} --> e. g. mgg@x11.org
    $Env{"UserIsGroup[users]"} = Yes --> user groups (useful for own links) 
    $Env{"UserIsGroup[admin]"} = Yes 
    $Env{"Action"} --> the current action
    $Env{"Subaction"} --> the current subaction

System calls

To get the output of a system command use:
# execute system call
<dtl system-call $Data{"uptime"} = "uptime">

# print
$Data{"uptime"}
or
# execute system call
<dtl system-call $Data{"procinfo"} = "procinfo | head -n1 ">

# print
$Data{"procinfo"}

Examples

# 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"}
or
# translation test
Lock: $Text{"Lock"}

# config options
Sendmail: $Config{"Sendmail"}