<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://de.contaowiki.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
		<id>https://de.contaowiki.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Psi</id>
		<title>Contao Community Documentation - Benutzerbeiträge [de]</title>
		<link rel="self" type="application/atom+xml" href="https://de.contaowiki.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Psi"/>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Spezial:Beitr%C3%A4ge/Psi"/>
		<updated>2026-04-30T01:09:01Z</updated>
		<subtitle>Benutzerbeiträge</subtitle>
		<generator>MediaWiki 1.22.6</generator>

	<entry>
		<id>https://de.contaowiki.org/AutocompleterTextfield</id>
		<title>AutocompleterTextfield</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/AutocompleterTextfield"/>
				<updated>2013-06-13T15:39:40Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Dev_HOWTOS]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Extensions]]&lt;br /&gt;
{{ExtInfo&lt;br /&gt;
| DevSite=http://www.4wardmedia.de.de&lt;br /&gt;
| ExtVersion=1.0.0&lt;br /&gt;
| Version=2.10.x&lt;br /&gt;
| ERLink=http://www.contao.org/erweiterungsliste/view/autocompleterTextfield.html&lt;br /&gt;
| TrackerLink=http://contao-forge.org/projects/autocompleterTextfield/issues&lt;br /&gt;
| SVN=http://svn.4wardmedia.de/autocompleterTextfield&lt;br /&gt;
}}&lt;br /&gt;
'''Github''': https://github.com/psi-4ward/autocompleterTextfield&lt;br /&gt;
&lt;br /&gt;
=AutocompleterTextfield=&lt;br /&gt;
&lt;br /&gt;
[[Datei:AutocompleterTextfield.png]]&lt;br /&gt;
&lt;br /&gt;
Autocompleting für ein Textfeld anhand von ''options'', ''options_callback'' oder ''foreignKey''.&lt;br /&gt;
Über die Eval-Option ''storeId'' kann die ID bzw. der Array-Key anstatt der Textwert gespeichert werden. &lt;br /&gt;
&lt;br /&gt;
==Einfaches Textfeld, Vervollständigung anhand der tl_page, Speicherung der tl_page.id==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
'myPage' =&amp;gt; array&lt;br /&gt;
(&lt;br /&gt;
	'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_tmp']['myPage'],&lt;br /&gt;
	'inputType'               =&amp;gt; 'autocompleterTextfield',&lt;br /&gt;
	'foreignKey'		  =&amp;gt; 'tl_page.title',&lt;br /&gt;
	'eval'                    =&amp;gt; array('storeId'=&amp;gt;true)&lt;br /&gt;
),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Einfaches Textfeld, Vervollständigung anhand von ''options''==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
'myPage' =&amp;gt; array&lt;br /&gt;
(&lt;br /&gt;
	'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_tmp']['myPage'],&lt;br /&gt;
	'inputType'               =&amp;gt; 'autocompleterTextfield',&lt;br /&gt;
	'options'		  =&amp;gt; array('Erster Eintrag','Zweiter Eintrag','Dritter Eintrag')&lt;br /&gt;
),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Verwendung im [[MultiColumnWizard]]==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
'einFeld' =&amp;gt; array&lt;br /&gt;
(&lt;br /&gt;
	'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_asd']['einFeld'],&lt;br /&gt;
	'inputType'               =&amp;gt; 'multiColumnWizard',&lt;br /&gt;
	'eval'                    =&amp;gt; array(&lt;br /&gt;
		'columnFields'	=&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'myTxt' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label'         =&amp;gt; array('label','desc'),&lt;br /&gt;
				'inputType'     =&amp;gt; 'autocompleterTextfield',&lt;br /&gt;
				'options'	=&amp;gt; array('Erster Eintrag','Zweiter Eintrag','Dritter Eintrag'),&lt;br /&gt;
				'eval' 		=&amp;gt; array('style'=&amp;gt;'width:180px')&lt;br /&gt;
			),&lt;br /&gt;
			'myTxt2' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label'         =&amp;gt; array('label','desc'),&lt;br /&gt;
				'inputType'     =&amp;gt; 'autocompleterTextfield',&lt;br /&gt;
				'options_callback' =&amp;gt; array('myClass','myCallback'),&lt;br /&gt;
				'eval' 		=&amp;gt; array('style'=&amp;gt;'width:180px')&lt;br /&gt;
			),&lt;br /&gt;
		)&lt;br /&gt;
	),&lt;br /&gt;
),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispiel für einen options_callback==&lt;br /&gt;
Falls die POST-Variable (&amp;quot;value&amp;quot;) gesetzt ist, kann eine Vorselektierung stattfinden. Sie wird vom Autocompleter-Javascript übermittelt und enthält den eingegebenen String.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function getProducts()&lt;br /&gt;
{&lt;br /&gt;
	$this-&amp;gt;import('Database');&lt;br /&gt;
	&lt;br /&gt;
	// perhaps do some validation, cause POST-Vars are evil&lt;br /&gt;
	if($this-&amp;gt;Input-&amp;gt;post('value'))&lt;br /&gt;
	{&lt;br /&gt;
		$objProducts = $this-&amp;gt;Database-&amp;gt;prepare('	SELECT id,name &lt;br /&gt;
												FROM tl_product &lt;br /&gt;
												WHERE name LIKE ?&lt;br /&gt;
												ORDER BY name')&lt;br /&gt;
					-&amp;gt;execute('%'.$this-&amp;gt;Input-&amp;gt;post('value').'%');&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
		$objProducts = $this-&amp;gt;Database-&amp;gt;prepare('	SELECT id,name&lt;br /&gt;
													FROM tl_product&lt;br /&gt;
													ORDER BY name')&lt;br /&gt;
					-&amp;gt;execute();&lt;br /&gt;
	}&lt;br /&gt;
	$prods = array();&lt;br /&gt;
	while($objProducts-&amp;gt;next())	$prods[$objProducts-&amp;gt;id] = $objProducts-&amp;gt;name;&lt;br /&gt;
	return $prods;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Models</id>
		<title>Models</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Models"/>
				<updated>2013-03-13T15:21:00Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: /* Relationen / Datensätze aus Fremdtabellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Dev_HOWTOS]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
{{AppliesTo|Version=3.0.0}}&lt;br /&gt;
&lt;br /&gt;
'''''Models von Contao3 nutzen und verstehen'''''&lt;br /&gt;
&lt;br /&gt;
= Was sind Models =&lt;br /&gt;
Ein '''''Model''''' ist die Objekt-Repräsentation einer Datebank-Tabelle, genauer gesagt einer Entität daraus.&lt;br /&gt;
Models ersetzen weitgehend SQL-Statements und wrappen diese in bequeme Methoden. Natürlich bieten Models noch viele weitere Vorteile.&lt;br /&gt;
&lt;br /&gt;
Mehrere Models werden durch eine '''''Collection''''' referenziert, dies entspricht einer SQL-Abfrage die mehr als eine Ergebniszeile liefert.&lt;br /&gt;
&lt;br /&gt;
Contao3 bietet - wenn dem Model eine DCA-Struktur zugeordnet ist - etwas Magic um abhängige Datensätze zu laden. &lt;br /&gt;
Beispiel: Der Author (''UserModel'') eines Artikels (''ArticleModel'').&lt;br /&gt;
&lt;br /&gt;
= Verwendung =&lt;br /&gt;
&lt;br /&gt;
== Erstellung einer Model-Instanz ==&lt;br /&gt;
&lt;br /&gt;
Folgend wird eine Instanz von ''ArticleModel'' erstellt, welche eine bestimmte Entität der Tabelle ''tl_article'' referenziert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// ArticleModel mit den Daten der Entität id=5 erstellen&lt;br /&gt;
$objArticleModel = \ArticleModel::findByPk(5);&lt;br /&gt;
&lt;br /&gt;
// ArticleModel mit den Daten der Entität alias='contact' erstellen&lt;br /&gt;
$objArticleModel = \ArticleModel::findByIdOrAlias('contact');&lt;br /&gt;
// alternativ&lt;br /&gt;
$objArticleModel = \ArticleModel::findOneBy('alias','contact');&lt;br /&gt;
// alternativ&lt;br /&gt;
$objArticleModel = \ArticleModel::findOneByAlias('contact');&lt;br /&gt;
// alternativ&lt;br /&gt;
$objArticleModel = \ArticleModel::find(&lt;br /&gt;
  array (&lt;br /&gt;
    'limit'   =&amp;gt; 1,&lt;br /&gt;
    'column'  =&amp;gt; 'alias',     // mehrere Spalten durch array() möglich&lt;br /&gt;
    'value'   =&amp;gt; 'contact',   // mehrere Werte durch array() möglich, Reiehenfolge analog 'column'&lt;br /&gt;
    'return   =&amp;gt; 'Model'&lt;br /&gt;
  )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die oben verwendeten Methoden sind durch die Contao-Model Klasse implementiert. Sie können intern von einem speziellen Model wie das ''ArticleModel'' genutzt werden um weitere Constraints in Methoden zu kapseln. Bsp.: ''ArticleModel::findPublishedById()''.&lt;br /&gt;
&lt;br /&gt;
''findOneBy'''Alias''()''' ist eine virtuelle Methode um auf das '''alias''' Feld zu referenzieren. Diese Methoden existieren für jedes Feld der Tabelle.&lt;br /&gt;
Bsp: findOneByName()&lt;br /&gt;
Ich persönlich empfehle aber ''findOneBy($col, $val)'' zu nutzen.&lt;br /&gt;
&lt;br /&gt;
Die statische Basismethode ''''find($arrData)''' ermöglicht eine genaue Spezifizierung der Anfrage. Alle anderen find-Methoden werden auf sie abgebildet. &lt;br /&gt;
&lt;br /&gt;
Die Methode akzeptiert ein Array mit folgenden Schlüsseln:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''column''' || ''string|array'' || Feld(er) zur Selektion (WHERE)&lt;br /&gt;
|-&lt;br /&gt;
| '''value''' || ''string|array'' || Wert(e) zur Selektion (WHERE)&lt;br /&gt;
|-&lt;br /&gt;
| '''limit''' || ''int'' || Beschränkt die Ergebnismenge (LIMIT)&lt;br /&gt;
|-&lt;br /&gt;
| '''offset''' || ''int'' || Offset einer beschränkten Ergebnismenge (LIMIT)&lt;br /&gt;
|-&lt;br /&gt;
| '''order''' || ''string'' || Sortierung der Ergebnismenge (ORDER BY)&lt;br /&gt;
|-&lt;br /&gt;
| '''eager''' || ''bool'' || Lädt die referenzierten Datensätze durch einen JOIN&lt;br /&gt;
|-&lt;br /&gt;
| '''return''' || ''string'' || Gültige Werte: ''Model'',''Collection''&amp;lt;br&amp;gt; Legt fest, ob eine Collection-Intanz (default) oder eine Model-Instanz zurück gegeben wird.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erstellung einer Collection-Instanz ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$objArticles = \ArticleModel::findByPid(2);&lt;br /&gt;
&lt;br /&gt;
$objArticles = \ArticleModel::findBy('pid',2);&lt;br /&gt;
&lt;br /&gt;
$objArticles = \ArticleModel::findAll(&lt;br /&gt;
  array&lt;br /&gt;
  (&lt;br /&gt;
      'column' =&amp;gt; 'pid',&lt;br /&gt;
      'value' =&amp;gt; 2&lt;br /&gt;
  )&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
$objArticles = \ArticleModel::find(&lt;br /&gt;
  array&lt;br /&gt;
  (&lt;br /&gt;
      'return' =&amp;gt; 'Collection',&lt;br /&gt;
      'column' =&amp;gt; 'pid',&lt;br /&gt;
      'value' =&amp;gt; 2&lt;br /&gt;
  )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Relationen / Datensätze aus Fremdtabellen =&lt;br /&gt;
Für die Funktion der relations-''Magic'' muss dem Model ein DCA-Definition zugeordnet sein. Diese wird bei der Definition der Model-Klasse angegeben:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class ArticleModel extends \Model&lt;br /&gt;
{&lt;br /&gt;
	/**&lt;br /&gt;
	 * Table name&lt;br /&gt;
	 * @var string&lt;br /&gt;
	 */&lt;br /&gt;
	protected static $strTable = 'tl_article';&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der DCA-Struktur wird die Relation definiert&lt;br /&gt;
&lt;br /&gt;
Angenommen wir haben ein Model das einen Datensatz aus ''tl_article'' referenziert. &lt;br /&gt;
Achtung: Sowohl foreignKey als auch relation ist für die Auflösung nötig!&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_DCA']['tl_article'] = array&lt;br /&gt;
(&lt;br /&gt;
...&lt;br /&gt;
// Fields&lt;br /&gt;
	'fields' =&amp;gt; array&lt;br /&gt;
	(&lt;br /&gt;
		'pid' =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'foreignKey'              =&amp;gt; 'tl_page.title',&lt;br /&gt;
			'sql'                     =&amp;gt; &amp;quot;int(10) unsigned NOT NULL default '0'&amp;quot;,&lt;br /&gt;
			'relation'                =&amp;gt; array('type'=&amp;gt;'belongsTo', 'load'=&amp;gt;'lazy')&lt;br /&gt;
		),&lt;br /&gt;
		'author' =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_article']['author'],&lt;br /&gt;
			'default'                 =&amp;gt; $this-&amp;gt;User-&amp;gt;id,&lt;br /&gt;
			'exclude'                 =&amp;gt; true,&lt;br /&gt;
			'inputType'               =&amp;gt; 'select',&lt;br /&gt;
			'foreignKey'              =&amp;gt; 'tl_user.name',&lt;br /&gt;
			'eval'                    =&amp;gt; array('doNotCopy'=&amp;gt;true, 'mandatory'=&amp;gt;true, 'chosen'=&amp;gt;true, 'includeBlankOption'=&amp;gt;true, 'tl_class'=&amp;gt;'w50'),&lt;br /&gt;
			'sql'                     =&amp;gt; &amp;quot;int(10) unsigned NOT NULL default '0'&amp;quot;,&lt;br /&gt;
			'relation'                =&amp;gt; array('type'=&amp;gt;'hasOne', 'load'=&amp;gt;'eager')&lt;br /&gt;
		),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_MODELS']['tl_article'] = 'Contao\ArticleModel';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Weiterführende Informationen =&lt;br /&gt;
&lt;br /&gt;
* [http://api.contao.org/v3/classes/Contao.Model.html API-Doku Model Klasse]&lt;br /&gt;
* [http://api.contao.org/v3/classes/Contao.Model.Collection.html API-Doku Collection Klasse]&lt;br /&gt;
* [https://contao.org/files/conference/conference-2012/papers/Entwickler-Workshop.pdf Foliensatz Entwickler-Workshop der Konferenz 2012]&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Models</id>
		<title>Models</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Models"/>
				<updated>2013-02-16T15:12:23Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: /* Erstellung einer Collection-Instanz */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Dev_HOWTOS]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
{{AppliesTo|Version=3.0.0}}&lt;br /&gt;
&lt;br /&gt;
'''''Models von Contao3 nutzen und verstehen'''''&lt;br /&gt;
&lt;br /&gt;
= Was sind Models =&lt;br /&gt;
Ein '''''Model''''' ist die Objekt-Repräsentation einer Datebank-Tabelle, genauer gesagt einer Entität daraus.&lt;br /&gt;
Models ersetzen weitgehend SQL-Statements und wrappen diese in bequeme Methoden. Natürlich bieten Models noch viele weitere Vorteile.&lt;br /&gt;
&lt;br /&gt;
Mehrere Models werden durch eine '''''Collection''''' referenziert, dies entspricht einer SQL-Abfrage die mehr als eine Ergebniszeile liefert.&lt;br /&gt;
&lt;br /&gt;
Contao3 bietet - wenn dem Model eine DCA-Struktur zugeordnet ist - etwas Magic um abhängige Datensätze zu laden. &lt;br /&gt;
Beispiel: Der Author (''UserModel'') eines Artikels (''ArticleModel'').&lt;br /&gt;
&lt;br /&gt;
= Verwendung =&lt;br /&gt;
&lt;br /&gt;
== Erstellung einer Model-Instanz ==&lt;br /&gt;
&lt;br /&gt;
Folgend wird eine Instanz von ''ArticleModel'' erstellt, welche eine bestimmte Entität der Tabelle ''tl_article'' referenziert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// ArticleModel mit den Daten der Entität id=5 erstellen&lt;br /&gt;
$objArticleModel = \ArticleModel::findByPk(5);&lt;br /&gt;
&lt;br /&gt;
// ArticleModel mit den Daten der Entität alias='contact' erstellen&lt;br /&gt;
$objArticleModel = \ArticleModel::findByIdOrAlias('contact');&lt;br /&gt;
// alternativ&lt;br /&gt;
$objArticleModel = \ArticleModel::findOneBy('alias','contact');&lt;br /&gt;
// alternativ&lt;br /&gt;
$objArticleModel = \ArticleModel::findOneByAlias('contact');&lt;br /&gt;
// alternativ&lt;br /&gt;
$objArticleModel = \ArticleModel::find(&lt;br /&gt;
  array (&lt;br /&gt;
    'limit'   =&amp;gt; 1,&lt;br /&gt;
    'column'  =&amp;gt; 'alias',     // mehrere Spalten durch array() möglich&lt;br /&gt;
    'value'   =&amp;gt; 'contact',   // mehrere Werte durch array() möglich, Reiehenfolge analog 'column'&lt;br /&gt;
    'return   =&amp;gt; 'Model'&lt;br /&gt;
  )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die oben verwendeten Methoden sind durch die Contao-Model Klasse implementiert. Sie können intern von einem speziellen Model wie das ''ArticleModel'' genutzt werden um weitere Constraints in Methoden zu kapseln. Bsp.: ''ArticleModel::findPublishedById()''.&lt;br /&gt;
&lt;br /&gt;
''findOneBy'''Alias''()''' ist eine virtuelle Methode um auf das '''alias''' Feld zu referenzieren. Diese Methoden existieren für jedes Feld der Tabelle.&lt;br /&gt;
Bsp: findOneByName()&lt;br /&gt;
Ich persönlich empfehle aber ''findOneBy($col, $val)'' zu nutzen.&lt;br /&gt;
&lt;br /&gt;
Die statische Basismethode ''''find($arrData)''' ermöglicht eine genaue Spezifizierung der Anfrage. Alle anderen find-Methoden werden auf sie abgebildet. &lt;br /&gt;
&lt;br /&gt;
Die Methode akzeptiert ein Array mit folgenden Schlüsseln:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''column''' || ''string|array'' || Feld(er) zur Selektion (WHERE)&lt;br /&gt;
|-&lt;br /&gt;
| '''value''' || ''string|array'' || Wert(e) zur Selektion (WHERE)&lt;br /&gt;
|-&lt;br /&gt;
| '''limit''' || ''int'' || Beschränkt die Ergebnismenge (LIMIT)&lt;br /&gt;
|-&lt;br /&gt;
| '''offset''' || ''int'' || Offset einer beschränkten Ergebnismenge (LIMIT)&lt;br /&gt;
|-&lt;br /&gt;
| '''order''' || ''string'' || Sortierung der Ergebnismenge (ORDER BY)&lt;br /&gt;
|-&lt;br /&gt;
| '''eager''' || ''bool'' || Lädt die referenzierten Datensätze durch einen JOIN&lt;br /&gt;
|-&lt;br /&gt;
| '''return''' || ''string'' || Gültige Werte: ''Model'',''Collection''&amp;lt;br&amp;gt; Legt fest, ob eine Collection-Intanz (default) oder eine Model-Instanz zurück gegeben wird.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erstellung einer Collection-Instanz ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$objArticles = \ArticleModel::findByPid(2);&lt;br /&gt;
&lt;br /&gt;
$objArticles = \ArticleModel::findBy('pid',2);&lt;br /&gt;
&lt;br /&gt;
$objArticles = \ArticleModel::findAll(&lt;br /&gt;
  array&lt;br /&gt;
  (&lt;br /&gt;
      'column' =&amp;gt; 'pid',&lt;br /&gt;
      'value' =&amp;gt; 2&lt;br /&gt;
  )&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
$objArticles = \ArticleModel::find(&lt;br /&gt;
  array&lt;br /&gt;
  (&lt;br /&gt;
      'return' =&amp;gt; 'Collection',&lt;br /&gt;
      'column' =&amp;gt; 'pid',&lt;br /&gt;
      'value' =&amp;gt; 2&lt;br /&gt;
  )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Relationen / Datensätze aus Fremndtabellen =&lt;br /&gt;
Für die Funktion der relations-''Magic'' muss dem Model ein DCA-Definition zugeordnet sein. Diese wird bei der Definition der Model-Klasse angegeben:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class ArticleModel extends \Model&lt;br /&gt;
{&lt;br /&gt;
	/**&lt;br /&gt;
	 * Table name&lt;br /&gt;
	 * @var string&lt;br /&gt;
	 */&lt;br /&gt;
	protected static $strTable = 'tl_article';&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der DCA-Struktur wird die Relation definiert&lt;br /&gt;
&lt;br /&gt;
Angenommen wir haben ein Model das einen Datensatz aus ''tl_article'' referenziert. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_DCA']['tl_article'] = array&lt;br /&gt;
(&lt;br /&gt;
...&lt;br /&gt;
// Fields&lt;br /&gt;
	'fields' =&amp;gt; array&lt;br /&gt;
	(&lt;br /&gt;
		'pid' =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'foreignKey'              =&amp;gt; 'tl_page.title',&lt;br /&gt;
			'sql'                     =&amp;gt; &amp;quot;int(10) unsigned NOT NULL default '0'&amp;quot;,&lt;br /&gt;
			'relation'                =&amp;gt; array('type'=&amp;gt;'belongsTo', 'load'=&amp;gt;'lazy')&lt;br /&gt;
		),&lt;br /&gt;
		'author' =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_article']['author'],&lt;br /&gt;
			'default'                 =&amp;gt; $this-&amp;gt;User-&amp;gt;id,&lt;br /&gt;
			'exclude'                 =&amp;gt; true,&lt;br /&gt;
			'inputType'               =&amp;gt; 'select',&lt;br /&gt;
			'foreignKey'              =&amp;gt; 'tl_user.name',&lt;br /&gt;
			'eval'                    =&amp;gt; array('doNotCopy'=&amp;gt;true, 'mandatory'=&amp;gt;true, 'chosen'=&amp;gt;true, 'includeBlankOption'=&amp;gt;true, 'tl_class'=&amp;gt;'w50'),&lt;br /&gt;
			'sql'                     =&amp;gt; &amp;quot;int(10) unsigned NOT NULL default '0'&amp;quot;,&lt;br /&gt;
			'relation'                =&amp;gt; array('type'=&amp;gt;'hasOne', 'load'=&amp;gt;'eager')&lt;br /&gt;
		),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_MODELS']['tl_article'] = 'Contao\ArticleModel';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Weiterführende Informationen =&lt;br /&gt;
&lt;br /&gt;
* [http://api.contao.org/v3/classes/Contao.Model.html API-Doku Model Klasse]&lt;br /&gt;
* [http://api.contao.org/v3/classes/Contao.Model.Collection.html API-Doku Collection Klasse]&lt;br /&gt;
* [https://contao.org/files/conference/conference-2012/papers/Entwickler-Workshop.pdf Foliensatz Entwickler-Workshop der Konferenz 2012]&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Models</id>
		<title>Models</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Models"/>
				<updated>2013-02-16T15:08:55Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: /* Erstellung einer Model-Instanz */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Dev_HOWTOS]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
{{AppliesTo|Version=3.0.0}}&lt;br /&gt;
&lt;br /&gt;
'''''Models von Contao3 nutzen und verstehen'''''&lt;br /&gt;
&lt;br /&gt;
= Was sind Models =&lt;br /&gt;
Ein '''''Model''''' ist die Objekt-Repräsentation einer Datebank-Tabelle, genauer gesagt einer Entität daraus.&lt;br /&gt;
Models ersetzen weitgehend SQL-Statements und wrappen diese in bequeme Methoden. Natürlich bieten Models noch viele weitere Vorteile.&lt;br /&gt;
&lt;br /&gt;
Mehrere Models werden durch eine '''''Collection''''' referenziert, dies entspricht einer SQL-Abfrage die mehr als eine Ergebniszeile liefert.&lt;br /&gt;
&lt;br /&gt;
Contao3 bietet - wenn dem Model eine DCA-Struktur zugeordnet ist - etwas Magic um abhängige Datensätze zu laden. &lt;br /&gt;
Beispiel: Der Author (''UserModel'') eines Artikels (''ArticleModel'').&lt;br /&gt;
&lt;br /&gt;
= Verwendung =&lt;br /&gt;
&lt;br /&gt;
== Erstellung einer Model-Instanz ==&lt;br /&gt;
&lt;br /&gt;
Folgend wird eine Instanz von ''ArticleModel'' erstellt, welche eine bestimmte Entität der Tabelle ''tl_article'' referenziert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// ArticleModel mit den Daten der Entität id=5 erstellen&lt;br /&gt;
$objArticleModel = \ArticleModel::findByPk(5);&lt;br /&gt;
&lt;br /&gt;
// ArticleModel mit den Daten der Entität alias='contact' erstellen&lt;br /&gt;
$objArticleModel = \ArticleModel::findByIdOrAlias('contact');&lt;br /&gt;
// alternativ&lt;br /&gt;
$objArticleModel = \ArticleModel::findOneBy('alias','contact');&lt;br /&gt;
// alternativ&lt;br /&gt;
$objArticleModel = \ArticleModel::findOneByAlias('contact');&lt;br /&gt;
// alternativ&lt;br /&gt;
$objArticleModel = \ArticleModel::find(&lt;br /&gt;
  array (&lt;br /&gt;
    'limit'   =&amp;gt; 1,&lt;br /&gt;
    'column'  =&amp;gt; 'alias',     // mehrere Spalten durch array() möglich&lt;br /&gt;
    'value'   =&amp;gt; 'contact',   // mehrere Werte durch array() möglich, Reiehenfolge analog 'column'&lt;br /&gt;
    'return   =&amp;gt; 'Model'&lt;br /&gt;
  )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die oben verwendeten Methoden sind durch die Contao-Model Klasse implementiert. Sie können intern von einem speziellen Model wie das ''ArticleModel'' genutzt werden um weitere Constraints in Methoden zu kapseln. Bsp.: ''ArticleModel::findPublishedById()''.&lt;br /&gt;
&lt;br /&gt;
''findOneBy'''Alias''()''' ist eine virtuelle Methode um auf das '''alias''' Feld zu referenzieren. Diese Methoden existieren für jedes Feld der Tabelle.&lt;br /&gt;
Bsp: findOneByName()&lt;br /&gt;
Ich persönlich empfehle aber ''findOneBy($col, $val)'' zu nutzen.&lt;br /&gt;
&lt;br /&gt;
Die statische Basismethode ''''find($arrData)''' ermöglicht eine genaue Spezifizierung der Anfrage. Alle anderen find-Methoden werden auf sie abgebildet. &lt;br /&gt;
&lt;br /&gt;
Die Methode akzeptiert ein Array mit folgenden Schlüsseln:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''column''' || ''string|array'' || Feld(er) zur Selektion (WHERE)&lt;br /&gt;
|-&lt;br /&gt;
| '''value''' || ''string|array'' || Wert(e) zur Selektion (WHERE)&lt;br /&gt;
|-&lt;br /&gt;
| '''limit''' || ''int'' || Beschränkt die Ergebnismenge (LIMIT)&lt;br /&gt;
|-&lt;br /&gt;
| '''offset''' || ''int'' || Offset einer beschränkten Ergebnismenge (LIMIT)&lt;br /&gt;
|-&lt;br /&gt;
| '''order''' || ''string'' || Sortierung der Ergebnismenge (ORDER BY)&lt;br /&gt;
|-&lt;br /&gt;
| '''eager''' || ''bool'' || Lädt die referenzierten Datensätze durch einen JOIN&lt;br /&gt;
|-&lt;br /&gt;
| '''return''' || ''string'' || Gültige Werte: ''Model'',''Collection''&amp;lt;br&amp;gt; Legt fest, ob eine Collection-Intanz (default) oder eine Model-Instanz zurück gegeben wird.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erstellung einer Collection-Instanz ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Relationen / Datensätze aus Fremndtabellen =&lt;br /&gt;
Für die Funktion der relations-''Magic'' muss dem Model ein DCA-Definition zugeordnet sein. Diese wird bei der Definition der Model-Klasse angegeben:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class ArticleModel extends \Model&lt;br /&gt;
{&lt;br /&gt;
	/**&lt;br /&gt;
	 * Table name&lt;br /&gt;
	 * @var string&lt;br /&gt;
	 */&lt;br /&gt;
	protected static $strTable = 'tl_article';&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der DCA-Struktur wird die Relation definiert&lt;br /&gt;
&lt;br /&gt;
Angenommen wir haben ein Model das einen Datensatz aus ''tl_article'' referenziert. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_DCA']['tl_article'] = array&lt;br /&gt;
(&lt;br /&gt;
...&lt;br /&gt;
// Fields&lt;br /&gt;
	'fields' =&amp;gt; array&lt;br /&gt;
	(&lt;br /&gt;
		'pid' =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'foreignKey'              =&amp;gt; 'tl_page.title',&lt;br /&gt;
			'sql'                     =&amp;gt; &amp;quot;int(10) unsigned NOT NULL default '0'&amp;quot;,&lt;br /&gt;
			'relation'                =&amp;gt; array('type'=&amp;gt;'belongsTo', 'load'=&amp;gt;'lazy')&lt;br /&gt;
		),&lt;br /&gt;
		'author' =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_article']['author'],&lt;br /&gt;
			'default'                 =&amp;gt; $this-&amp;gt;User-&amp;gt;id,&lt;br /&gt;
			'exclude'                 =&amp;gt; true,&lt;br /&gt;
			'inputType'               =&amp;gt; 'select',&lt;br /&gt;
			'foreignKey'              =&amp;gt; 'tl_user.name',&lt;br /&gt;
			'eval'                    =&amp;gt; array('doNotCopy'=&amp;gt;true, 'mandatory'=&amp;gt;true, 'chosen'=&amp;gt;true, 'includeBlankOption'=&amp;gt;true, 'tl_class'=&amp;gt;'w50'),&lt;br /&gt;
			'sql'                     =&amp;gt; &amp;quot;int(10) unsigned NOT NULL default '0'&amp;quot;,&lt;br /&gt;
			'relation'                =&amp;gt; array('type'=&amp;gt;'hasOne', 'load'=&amp;gt;'eager')&lt;br /&gt;
		),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_MODELS']['tl_article'] = 'Contao\ArticleModel';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Weiterführende Informationen =&lt;br /&gt;
&lt;br /&gt;
* [http://api.contao.org/v3/classes/Contao.Model.html API-Doku Model Klasse]&lt;br /&gt;
* [http://api.contao.org/v3/classes/Contao.Model.Collection.html API-Doku Collection Klasse]&lt;br /&gt;
* [https://contao.org/files/conference/conference-2012/papers/Entwickler-Workshop.pdf Foliensatz Entwickler-Workshop der Konferenz 2012]&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Models</id>
		<title>Models</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Models"/>
				<updated>2013-02-16T15:06:22Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: /* Relationen / Datensätze aus Fremndtabellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Dev_HOWTOS]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
{{AppliesTo|Version=3.0.0}}&lt;br /&gt;
&lt;br /&gt;
'''''Models von Contao3 nutzen und verstehen'''''&lt;br /&gt;
&lt;br /&gt;
= Was sind Models =&lt;br /&gt;
Ein '''''Model''''' ist die Objekt-Repräsentation einer Datebank-Tabelle, genauer gesagt einer Entität daraus.&lt;br /&gt;
Models ersetzen weitgehend SQL-Statements und wrappen diese in bequeme Methoden. Natürlich bieten Models noch viele weitere Vorteile.&lt;br /&gt;
&lt;br /&gt;
Mehrere Models werden durch eine '''''Collection''''' referenziert, dies entspricht einer SQL-Abfrage die mehr als eine Ergebniszeile liefert.&lt;br /&gt;
&lt;br /&gt;
Contao3 bietet - wenn dem Model eine DCA-Struktur zugeordnet ist - etwas Magic um abhängige Datensätze zu laden. &lt;br /&gt;
Beispiel: Der Author (''UserModel'') eines Artikels (''ArticleModel'').&lt;br /&gt;
&lt;br /&gt;
= Verwendung =&lt;br /&gt;
&lt;br /&gt;
== Erstellung einer Model-Instanz ==&lt;br /&gt;
&lt;br /&gt;
Folgend wird eine Instanz von ''ArticleModel'' erstellt, welche eine bestimmte Entität der Tabelle ''tl_article'' referenziert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// ArticleModel mit den Daten der Entität id=5 erstellen&lt;br /&gt;
$objArticleModel = \ArticleModel::findByPk(5);&lt;br /&gt;
&lt;br /&gt;
// ArticleModel mit den Daten der Entität alias='contact' erstellen&lt;br /&gt;
$objArticleModel = \ArticleModel::findByIdOrAlias('contact');&lt;br /&gt;
// alternativ&lt;br /&gt;
$objArticleModel = \ArticleModel::findOneBy('alias','contact');&lt;br /&gt;
// alternativ&lt;br /&gt;
$objArticleModel = \ArticleModel::findOneByAlias('contact');&lt;br /&gt;
// alternativ&lt;br /&gt;
$objArticleModel = \ArticleModel::find(&lt;br /&gt;
  array (&lt;br /&gt;
    'limit'   =&amp;gt; 1,&lt;br /&gt;
    'column'  =&amp;gt; 'alias',     // mehrere Spalten durch array() möglich&lt;br /&gt;
    'value'   =&amp;gt; 'contact',   // mehrere Werte durch array() möglich, Reiehenfolge analog 'column'&lt;br /&gt;
    'return   =&amp;gt; 'Model'&lt;br /&gt;
  )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die oben verwendeten Methoden sind durch die Contao-Model Klasse implementiert. Sie können intern von einem speziellen Model wie das ''ArticleModel'' genutzt werden um weitere Constraints in Methoden zu kapseln. Bsp.: ''ArticleModel::findPublishedById()''.&lt;br /&gt;
&lt;br /&gt;
''findOneBy'''Alias''()''' ist eine virtuelle Methode um auf das '''alias''' Feld zu referenzieren. Diese Methoden existieren für jedes Feld der Tabelle.&lt;br /&gt;
Bsp: findOneByName()&lt;br /&gt;
Ich persönlich empfehle aber ''findOneBy($col, $val)'' zu nutzen.&lt;br /&gt;
&lt;br /&gt;
Die statische Basismethode ''''find($arrData)''' ermöglicht eine genaue Spezifizierung der Anfrage. Alle anderen find-Methoden werden auf sie abgebildet. &lt;br /&gt;
&lt;br /&gt;
Die Methode akzeptiert ein Array mit folgenden Schlüsseln:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''column''' || ''string|array'' || Feld(er) zur Selektion (WHERE)&lt;br /&gt;
|-&lt;br /&gt;
| '''value''' || ''string|array'' || Wert(e) zur Selektion (WHERE)&lt;br /&gt;
|-&lt;br /&gt;
| '''limit''' || ''int'' || Beschränkt die Ergebnismenge (LIMIT)&lt;br /&gt;
|-&lt;br /&gt;
| '''offset''' || ''int'' || Offset einer beschränkten Ergebnismenge (LIMIT)&lt;br /&gt;
|-&lt;br /&gt;
| '''order''' || ''string'' || Sortierung der Ergebnismenge (ORDER BY)&lt;br /&gt;
|-&lt;br /&gt;
| '''eager''' || ''bool'' || Lädt die referenzierten Datensätze durch einen JOIN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Erstellung einer Collection-Instanz ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Relationen / Datensätze aus Fremndtabellen =&lt;br /&gt;
Für die Funktion der relations-''Magic'' muss dem Model ein DCA-Definition zugeordnet sein. Diese wird bei der Definition der Model-Klasse angegeben:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class ArticleModel extends \Model&lt;br /&gt;
{&lt;br /&gt;
	/**&lt;br /&gt;
	 * Table name&lt;br /&gt;
	 * @var string&lt;br /&gt;
	 */&lt;br /&gt;
	protected static $strTable = 'tl_article';&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der DCA-Struktur wird die Relation definiert&lt;br /&gt;
&lt;br /&gt;
Angenommen wir haben ein Model das einen Datensatz aus ''tl_article'' referenziert. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_DCA']['tl_article'] = array&lt;br /&gt;
(&lt;br /&gt;
...&lt;br /&gt;
// Fields&lt;br /&gt;
	'fields' =&amp;gt; array&lt;br /&gt;
	(&lt;br /&gt;
		'pid' =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'foreignKey'              =&amp;gt; 'tl_page.title',&lt;br /&gt;
			'sql'                     =&amp;gt; &amp;quot;int(10) unsigned NOT NULL default '0'&amp;quot;,&lt;br /&gt;
			'relation'                =&amp;gt; array('type'=&amp;gt;'belongsTo', 'load'=&amp;gt;'lazy')&lt;br /&gt;
		),&lt;br /&gt;
		'author' =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_article']['author'],&lt;br /&gt;
			'default'                 =&amp;gt; $this-&amp;gt;User-&amp;gt;id,&lt;br /&gt;
			'exclude'                 =&amp;gt; true,&lt;br /&gt;
			'inputType'               =&amp;gt; 'select',&lt;br /&gt;
			'foreignKey'              =&amp;gt; 'tl_user.name',&lt;br /&gt;
			'eval'                    =&amp;gt; array('doNotCopy'=&amp;gt;true, 'mandatory'=&amp;gt;true, 'chosen'=&amp;gt;true, 'includeBlankOption'=&amp;gt;true, 'tl_class'=&amp;gt;'w50'),&lt;br /&gt;
			'sql'                     =&amp;gt; &amp;quot;int(10) unsigned NOT NULL default '0'&amp;quot;,&lt;br /&gt;
			'relation'                =&amp;gt; array('type'=&amp;gt;'hasOne', 'load'=&amp;gt;'eager')&lt;br /&gt;
		),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_MODELS']['tl_article'] = 'Contao\ArticleModel';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Weiterführende Informationen =&lt;br /&gt;
&lt;br /&gt;
* [http://api.contao.org/v3/classes/Contao.Model.html API-Doku Model Klasse]&lt;br /&gt;
* [http://api.contao.org/v3/classes/Contao.Model.Collection.html API-Doku Collection Klasse]&lt;br /&gt;
* [https://contao.org/files/conference/conference-2012/papers/Entwickler-Workshop.pdf Foliensatz Entwickler-Workshop der Konferenz 2012]&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Models</id>
		<title>Models</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Models"/>
				<updated>2013-02-16T15:05:35Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: /* Erstellung einer Model-Instanz */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Dev_HOWTOS]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
{{AppliesTo|Version=3.0.0}}&lt;br /&gt;
&lt;br /&gt;
'''''Models von Contao3 nutzen und verstehen'''''&lt;br /&gt;
&lt;br /&gt;
= Was sind Models =&lt;br /&gt;
Ein '''''Model''''' ist die Objekt-Repräsentation einer Datebank-Tabelle, genauer gesagt einer Entität daraus.&lt;br /&gt;
Models ersetzen weitgehend SQL-Statements und wrappen diese in bequeme Methoden. Natürlich bieten Models noch viele weitere Vorteile.&lt;br /&gt;
&lt;br /&gt;
Mehrere Models werden durch eine '''''Collection''''' referenziert, dies entspricht einer SQL-Abfrage die mehr als eine Ergebniszeile liefert.&lt;br /&gt;
&lt;br /&gt;
Contao3 bietet - wenn dem Model eine DCA-Struktur zugeordnet ist - etwas Magic um abhängige Datensätze zu laden. &lt;br /&gt;
Beispiel: Der Author (''UserModel'') eines Artikels (''ArticleModel'').&lt;br /&gt;
&lt;br /&gt;
= Verwendung =&lt;br /&gt;
&lt;br /&gt;
== Erstellung einer Model-Instanz ==&lt;br /&gt;
&lt;br /&gt;
Folgend wird eine Instanz von ''ArticleModel'' erstellt, welche eine bestimmte Entität der Tabelle ''tl_article'' referenziert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// ArticleModel mit den Daten der Entität id=5 erstellen&lt;br /&gt;
$objArticleModel = \ArticleModel::findByPk(5);&lt;br /&gt;
&lt;br /&gt;
// ArticleModel mit den Daten der Entität alias='contact' erstellen&lt;br /&gt;
$objArticleModel = \ArticleModel::findByIdOrAlias('contact');&lt;br /&gt;
// alternativ&lt;br /&gt;
$objArticleModel = \ArticleModel::findOneBy('alias','contact');&lt;br /&gt;
// alternativ&lt;br /&gt;
$objArticleModel = \ArticleModel::findOneByAlias('contact');&lt;br /&gt;
// alternativ&lt;br /&gt;
$objArticleModel = \ArticleModel::find(&lt;br /&gt;
  array (&lt;br /&gt;
    'limit'   =&amp;gt; 1,&lt;br /&gt;
    'column'  =&amp;gt; 'alias',     // mehrere Spalten durch array() möglich&lt;br /&gt;
    'value'   =&amp;gt; 'contact',   // mehrere Werte durch array() möglich, Reiehenfolge analog 'column'&lt;br /&gt;
    'return   =&amp;gt; 'Model'&lt;br /&gt;
  )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die oben verwendeten Methoden sind durch die Contao-Model Klasse implementiert. Sie können intern von einem speziellen Model wie das ''ArticleModel'' genutzt werden um weitere Constraints in Methoden zu kapseln. Bsp.: ''ArticleModel::findPublishedById()''.&lt;br /&gt;
&lt;br /&gt;
''findOneBy'''Alias''()''' ist eine virtuelle Methode um auf das '''alias''' Feld zu referenzieren. Diese Methoden existieren für jedes Feld der Tabelle.&lt;br /&gt;
Bsp: findOneByName()&lt;br /&gt;
Ich persönlich empfehle aber ''findOneBy($col, $val)'' zu nutzen.&lt;br /&gt;
&lt;br /&gt;
Die statische Basismethode ''''find($arrData)''' ermöglicht eine genaue Spezifizierung der Anfrage. Alle anderen find-Methoden werden auf sie abgebildet. &lt;br /&gt;
&lt;br /&gt;
Die Methode akzeptiert ein Array mit folgenden Schlüsseln:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''column''' || ''string|array'' || Feld(er) zur Selektion (WHERE)&lt;br /&gt;
|-&lt;br /&gt;
| '''value''' || ''string|array'' || Wert(e) zur Selektion (WHERE)&lt;br /&gt;
|-&lt;br /&gt;
| '''limit''' || ''int'' || Beschränkt die Ergebnismenge (LIMIT)&lt;br /&gt;
|-&lt;br /&gt;
| '''offset''' || ''int'' || Offset einer beschränkten Ergebnismenge (LIMIT)&lt;br /&gt;
|-&lt;br /&gt;
| '''order''' || ''string'' || Sortierung der Ergebnismenge (ORDER BY)&lt;br /&gt;
|-&lt;br /&gt;
| '''eager''' || ''bool'' || Lädt die referenzierten Datensätze durch einen JOIN&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Relationen / Datensätze aus Fremndtabellen =&lt;br /&gt;
Für die Funktion der relations-''Magic'' muss dem Model ein DCA-Definition zugeordnet sein. Diese wird bei der Definition der Model-Klasse angegeben:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class ArticleModel extends \Model&lt;br /&gt;
{&lt;br /&gt;
	/**&lt;br /&gt;
	 * Table name&lt;br /&gt;
	 * @var string&lt;br /&gt;
	 */&lt;br /&gt;
	protected static $strTable = 'tl_article';&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der DCA-Struktur wird die Relation definiert&lt;br /&gt;
&lt;br /&gt;
Angenommen wir haben ein Model das einen Datensatz aus ''tl_article'' referenziert. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_DCA']['tl_article'] = array&lt;br /&gt;
(&lt;br /&gt;
...&lt;br /&gt;
// Fields&lt;br /&gt;
	'fields' =&amp;gt; array&lt;br /&gt;
	(&lt;br /&gt;
		'pid' =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'foreignKey'              =&amp;gt; 'tl_page.title',&lt;br /&gt;
			'sql'                     =&amp;gt; &amp;quot;int(10) unsigned NOT NULL default '0'&amp;quot;,&lt;br /&gt;
			'relation'                =&amp;gt; array('type'=&amp;gt;'belongsTo', 'load'=&amp;gt;'lazy')&lt;br /&gt;
		),&lt;br /&gt;
		'author' =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_article']['author'],&lt;br /&gt;
			'default'                 =&amp;gt; $this-&amp;gt;User-&amp;gt;id,&lt;br /&gt;
			'exclude'                 =&amp;gt; true,&lt;br /&gt;
			'inputType'               =&amp;gt; 'select',&lt;br /&gt;
			'foreignKey'              =&amp;gt; 'tl_user.name',&lt;br /&gt;
			'eval'                    =&amp;gt; array('doNotCopy'=&amp;gt;true, 'mandatory'=&amp;gt;true, 'chosen'=&amp;gt;true, 'includeBlankOption'=&amp;gt;true, 'tl_class'=&amp;gt;'w50'),&lt;br /&gt;
			'sql'                     =&amp;gt; &amp;quot;int(10) unsigned NOT NULL default '0'&amp;quot;,&lt;br /&gt;
			'relation'                =&amp;gt; array('type'=&amp;gt;'hasOne', 'load'=&amp;gt;'eager')&lt;br /&gt;
		),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_MODELS']['tl_article'] = 'Contao\ArticleModel';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Weiterführende Informationen =&lt;br /&gt;
&lt;br /&gt;
* [http://api.contao.org/v3/classes/Contao.Model.html API-Doku Model Klasse]&lt;br /&gt;
* [http://api.contao.org/v3/classes/Contao.Model.Collection.html API-Doku Collection Klasse]&lt;br /&gt;
* [https://contao.org/files/conference/conference-2012/papers/Entwickler-Workshop.pdf Foliensatz Entwickler-Workshop der Konferenz 2012]&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Models</id>
		<title>Models</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Models"/>
				<updated>2013-02-16T15:03:57Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: /* Verwendung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Dev_HOWTOS]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
{{AppliesTo|Version=3.0.0}}&lt;br /&gt;
&lt;br /&gt;
'''''Models von Contao3 nutzen und verstehen'''''&lt;br /&gt;
&lt;br /&gt;
= Was sind Models =&lt;br /&gt;
Ein '''''Model''''' ist die Objekt-Repräsentation einer Datebank-Tabelle, genauer gesagt einer Entität daraus.&lt;br /&gt;
Models ersetzen weitgehend SQL-Statements und wrappen diese in bequeme Methoden. Natürlich bieten Models noch viele weitere Vorteile.&lt;br /&gt;
&lt;br /&gt;
Mehrere Models werden durch eine '''''Collection''''' referenziert, dies entspricht einer SQL-Abfrage die mehr als eine Ergebniszeile liefert.&lt;br /&gt;
&lt;br /&gt;
Contao3 bietet - wenn dem Model eine DCA-Struktur zugeordnet ist - etwas Magic um abhängige Datensätze zu laden. &lt;br /&gt;
Beispiel: Der Author (''UserModel'') eines Artikels (''ArticleModel'').&lt;br /&gt;
&lt;br /&gt;
= Verwendung =&lt;br /&gt;
&lt;br /&gt;
== Erstellung einer Model-Instanz ==&lt;br /&gt;
&lt;br /&gt;
Folgend wird eine Instanz von ''ArticleModel'' erstellt, welche eine bestimmte Entität der Tabelle ''tl_article'' referenziert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// ArticleModel mit den Daten der Entität id=5 erstellen&lt;br /&gt;
$objArticleModel = \ArticleModel::findByPk(5);&lt;br /&gt;
&lt;br /&gt;
// ArticleModel mit den Daten der Entität alias='contact' erstellen&lt;br /&gt;
$objArticleModel = \ArticleModel::findByIdOrAlias('contact');&lt;br /&gt;
// alternativ&lt;br /&gt;
$objArticleModel = \ArticleModel::findOneBy('alias','contact');&lt;br /&gt;
// alternativ&lt;br /&gt;
$objArticleModel = \ArticleModel::findOneByAlias('contact');&lt;br /&gt;
// alternativ&lt;br /&gt;
$objArticleModel = \ArticleModel::find(&lt;br /&gt;
  array (&lt;br /&gt;
    'limit'   =&amp;gt; 1,&lt;br /&gt;
    'column'  =&amp;gt; 'alias',     // mehrere Spalten durch array() möglich&lt;br /&gt;
    'value'   =&amp;gt; 'contact',   // mehrere Werte durch array() möglich, Reiehenfolge analog 'column'&lt;br /&gt;
    'return   =&amp;gt; 'Model'&lt;br /&gt;
  )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Die oben verwendeten Methoden sind durch die Contao-Model Klasse implementiert. Sie können intern von einem speziellen Model wie das ''ArticleModel'' genutzt werden um weitere Constraints in Methoden zu kapseln. Bsp.: ''ArticleModel::findPublishedById()''.&lt;br /&gt;
&lt;br /&gt;
''findOneBy'''Alias''()''' ist eine virtuelle Methode um auf das '''alias''' Feld zu referenzieren. Diese Methoden existieren für jedes Feld der Tabelle.&lt;br /&gt;
Bsp: findOneByName()&lt;br /&gt;
Ich persönlich empfehle aber ''findOneBy($col, $val)'' zu nutzen.&lt;br /&gt;
&lt;br /&gt;
Die statische Basismethode ''''find($arrData)''' ermöglicht eine genaue Spezifizierung der Anfrage. Alle anderen find-Methoden werden auf sie abgebildet. &lt;br /&gt;
&lt;br /&gt;
Die Methode akzeptiert ein Array mit folgenden Schlüsseln:&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''column''' || ''string|array'' || Feld(er) zur Selektion (WHERE)&lt;br /&gt;
| '''value''' || ''string|array'' || Wert(e) zur Selektion (WHERE)&lt;br /&gt;
| '''limit''' || ''int'' || Beschränkt die Ergebnismenge (LIMIT)&lt;br /&gt;
| '''offset''' || ''int'' || Offset einer beschränkten Ergebnismenge (LIMIT)&lt;br /&gt;
| '''order''' || ''string'' || Sortierung der Ergebnismenge (ORDER BY)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Relationen / Datensätze aus Fremndtabellen =&lt;br /&gt;
Für die Funktion der relations-''Magic'' muss dem Model ein DCA-Definition zugeordnet sein. Diese wird bei der Definition der Model-Klasse angegeben:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class ArticleModel extends \Model&lt;br /&gt;
{&lt;br /&gt;
	/**&lt;br /&gt;
	 * Table name&lt;br /&gt;
	 * @var string&lt;br /&gt;
	 */&lt;br /&gt;
	protected static $strTable = 'tl_article';&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der DCA-Struktur wird die Relation definiert&lt;br /&gt;
&lt;br /&gt;
Angenommen wir haben ein Model das einen Datensatz aus ''tl_article'' referenziert. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_DCA']['tl_article'] = array&lt;br /&gt;
(&lt;br /&gt;
...&lt;br /&gt;
// Fields&lt;br /&gt;
	'fields' =&amp;gt; array&lt;br /&gt;
	(&lt;br /&gt;
		'pid' =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'foreignKey'              =&amp;gt; 'tl_page.title',&lt;br /&gt;
			'sql'                     =&amp;gt; &amp;quot;int(10) unsigned NOT NULL default '0'&amp;quot;,&lt;br /&gt;
			'relation'                =&amp;gt; array('type'=&amp;gt;'belongsTo', 'load'=&amp;gt;'lazy')&lt;br /&gt;
		),&lt;br /&gt;
		'author' =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_article']['author'],&lt;br /&gt;
			'default'                 =&amp;gt; $this-&amp;gt;User-&amp;gt;id,&lt;br /&gt;
			'exclude'                 =&amp;gt; true,&lt;br /&gt;
			'inputType'               =&amp;gt; 'select',&lt;br /&gt;
			'foreignKey'              =&amp;gt; 'tl_user.name',&lt;br /&gt;
			'eval'                    =&amp;gt; array('doNotCopy'=&amp;gt;true, 'mandatory'=&amp;gt;true, 'chosen'=&amp;gt;true, 'includeBlankOption'=&amp;gt;true, 'tl_class'=&amp;gt;'w50'),&lt;br /&gt;
			'sql'                     =&amp;gt; &amp;quot;int(10) unsigned NOT NULL default '0'&amp;quot;,&lt;br /&gt;
			'relation'                =&amp;gt; array('type'=&amp;gt;'hasOne', 'load'=&amp;gt;'eager')&lt;br /&gt;
		),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_MODELS']['tl_article'] = 'Contao\ArticleModel';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Weiterführende Informationen =&lt;br /&gt;
&lt;br /&gt;
* [http://api.contao.org/v3/classes/Contao.Model.html API-Doku Model Klasse]&lt;br /&gt;
* [http://api.contao.org/v3/classes/Contao.Model.Collection.html API-Doku Collection Klasse]&lt;br /&gt;
* [https://contao.org/files/conference/conference-2012/papers/Entwickler-Workshop.pdf Foliensatz Entwickler-Workshop der Konferenz 2012]&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Models</id>
		<title>Models</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Models"/>
				<updated>2013-02-16T14:28:03Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: /* Was sind Models */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Dev_HOWTOS]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
{{AppliesTo|Version=3.0.0}}&lt;br /&gt;
&lt;br /&gt;
'''''Models von Contao3 nutzen und verstehen'''''&lt;br /&gt;
&lt;br /&gt;
= Was sind Models =&lt;br /&gt;
Ein '''''Model''''' ist die Objekt-Repräsentation einer Datebank-Tabelle, genauer gesagt einer Entität daraus.&lt;br /&gt;
Models ersetzen weitgehend SQL-Statements und wrappen diese in bequeme Methoden. Natürlich bieten Models noch viele weitere Vorteile.&lt;br /&gt;
&lt;br /&gt;
Mehrere Models werden durch eine '''''Collection''''' referenziert, dies entspricht einer SQL-Abfrage die mehr als eine Ergebniszeile liefert.&lt;br /&gt;
&lt;br /&gt;
Contao3 bietet - wenn dem Model eine DCA-Struktur zugeordnet ist - etwas Magic um abhängige Datensätze zu laden. &lt;br /&gt;
Beispiel: Der Author (''UserModel'') eines Artikels (''ArticleModel'').&lt;br /&gt;
&lt;br /&gt;
= Verwendung =&lt;br /&gt;
&lt;br /&gt;
TODO write something cool&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Relationen / Datensätze aus Fremndtabellen =&lt;br /&gt;
Für die Funktion der relations-''Magic'' muss dem Model ein DCA-Definition zugeordnet sein. Diese wird bei der Definition der Model-Klasse angegeben:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class ArticleModel extends \Model&lt;br /&gt;
{&lt;br /&gt;
	/**&lt;br /&gt;
	 * Table name&lt;br /&gt;
	 * @var string&lt;br /&gt;
	 */&lt;br /&gt;
	protected static $strTable = 'tl_article';&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der DCA-Struktur wird die Relation definiert&lt;br /&gt;
&lt;br /&gt;
Angenommen wir haben ein Model das einen Datensatz aus ''tl_article'' referenziert. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_DCA']['tl_article'] = array&lt;br /&gt;
(&lt;br /&gt;
...&lt;br /&gt;
// Fields&lt;br /&gt;
	'fields' =&amp;gt; array&lt;br /&gt;
	(&lt;br /&gt;
		'pid' =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'foreignKey'              =&amp;gt; 'tl_page.title',&lt;br /&gt;
			'sql'                     =&amp;gt; &amp;quot;int(10) unsigned NOT NULL default '0'&amp;quot;,&lt;br /&gt;
			'relation'                =&amp;gt; array('type'=&amp;gt;'belongsTo', 'load'=&amp;gt;'lazy')&lt;br /&gt;
		),&lt;br /&gt;
		'author' =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_article']['author'],&lt;br /&gt;
			'default'                 =&amp;gt; $this-&amp;gt;User-&amp;gt;id,&lt;br /&gt;
			'exclude'                 =&amp;gt; true,&lt;br /&gt;
			'inputType'               =&amp;gt; 'select',&lt;br /&gt;
			'foreignKey'              =&amp;gt; 'tl_user.name',&lt;br /&gt;
			'eval'                    =&amp;gt; array('doNotCopy'=&amp;gt;true, 'mandatory'=&amp;gt;true, 'chosen'=&amp;gt;true, 'includeBlankOption'=&amp;gt;true, 'tl_class'=&amp;gt;'w50'),&lt;br /&gt;
			'sql'                     =&amp;gt; &amp;quot;int(10) unsigned NOT NULL default '0'&amp;quot;,&lt;br /&gt;
			'relation'                =&amp;gt; array('type'=&amp;gt;'hasOne', 'load'=&amp;gt;'eager')&lt;br /&gt;
		),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_MODELS']['tl_article'] = 'Contao\ArticleModel';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Weiterführende Informationen =&lt;br /&gt;
&lt;br /&gt;
* [http://api.contao.org/v3/classes/Contao.Model.html API-Doku Model Klasse]&lt;br /&gt;
* [http://api.contao.org/v3/classes/Contao.Model.Collection.html API-Doku Collection Klasse]&lt;br /&gt;
* [https://contao.org/files/conference/conference-2012/papers/Entwickler-Workshop.pdf Foliensatz Entwickler-Workshop der Konferenz 2012]&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Models</id>
		<title>Models</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Models"/>
				<updated>2013-02-16T01:12:15Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: /* Relationen / Datensätze aus Fremndtabellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Dev_HOWTOS]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
{{AppliesTo|Version=3.0.0}}&lt;br /&gt;
&lt;br /&gt;
'''''Models von Contao3 nutzen und verstehen'''''&lt;br /&gt;
&lt;br /&gt;
= Was sind Models =&lt;br /&gt;
Ein Model ist die Objekt-Repräsentation einer Datebank-Tabelle, genauer gesagt einer Entität daraus.&lt;br /&gt;
Models ersetzen weitgehend SQL-Statements und wrappen diese in bequeme Methoden. Natürlich bieten Models noch viele weitere Vorteile.&lt;br /&gt;
&lt;br /&gt;
Mehrere Models werden durch eine ''Collection'' referenziert, dies entspricht einer SQL-Abfrage die mehr als eine Ergebniszeile liefert.&lt;br /&gt;
&lt;br /&gt;
Contao3 bietet - wenn dem Model eine DCA-Struktur zugeordnet ist - etwas Magic um abhängige Datensätze zu laden. Beispiel: Der Author (UserModel) eines Artikels (ArticleModel). &lt;br /&gt;
&lt;br /&gt;
= Verwendung =&lt;br /&gt;
&lt;br /&gt;
TODO write something cool&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Relationen / Datensätze aus Fremndtabellen =&lt;br /&gt;
Für die Funktion der relations-''Magic'' muss dem Model ein DCA-Definition zugeordnet sein. Diese wird bei der Definition der Model-Klasse angegeben:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class ArticleModel extends \Model&lt;br /&gt;
{&lt;br /&gt;
	/**&lt;br /&gt;
	 * Table name&lt;br /&gt;
	 * @var string&lt;br /&gt;
	 */&lt;br /&gt;
	protected static $strTable = 'tl_article';&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der DCA-Struktur wird die Relation definiert&lt;br /&gt;
&lt;br /&gt;
Angenommen wir haben ein Model das einen Datensatz aus ''tl_article'' referenziert. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_DCA']['tl_article'] = array&lt;br /&gt;
(&lt;br /&gt;
...&lt;br /&gt;
// Fields&lt;br /&gt;
	'fields' =&amp;gt; array&lt;br /&gt;
	(&lt;br /&gt;
		'pid' =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'foreignKey'              =&amp;gt; 'tl_page.title',&lt;br /&gt;
			'sql'                     =&amp;gt; &amp;quot;int(10) unsigned NOT NULL default '0'&amp;quot;,&lt;br /&gt;
			'relation'                =&amp;gt; array('type'=&amp;gt;'belongsTo', 'load'=&amp;gt;'lazy')&lt;br /&gt;
		),&lt;br /&gt;
		'author' =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_article']['author'],&lt;br /&gt;
			'default'                 =&amp;gt; $this-&amp;gt;User-&amp;gt;id,&lt;br /&gt;
			'exclude'                 =&amp;gt; true,&lt;br /&gt;
			'inputType'               =&amp;gt; 'select',&lt;br /&gt;
			'foreignKey'              =&amp;gt; 'tl_user.name',&lt;br /&gt;
			'eval'                    =&amp;gt; array('doNotCopy'=&amp;gt;true, 'mandatory'=&amp;gt;true, 'chosen'=&amp;gt;true, 'includeBlankOption'=&amp;gt;true, 'tl_class'=&amp;gt;'w50'),&lt;br /&gt;
			'sql'                     =&amp;gt; &amp;quot;int(10) unsigned NOT NULL default '0'&amp;quot;,&lt;br /&gt;
			'relation'                =&amp;gt; array('type'=&amp;gt;'hasOne', 'load'=&amp;gt;'eager')&lt;br /&gt;
		),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_MODELS']['tl_article'] = 'Contao\ArticleModel';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Weiterführende Informationen =&lt;br /&gt;
&lt;br /&gt;
* [http://api.contao.org/v3/classes/Contao.Model.html API-Doku Model Klasse]&lt;br /&gt;
* [http://api.contao.org/v3/classes/Contao.Model.Collection.html API-Doku Collection Klasse]&lt;br /&gt;
* [https://contao.org/files/conference/conference-2012/papers/Entwickler-Workshop.pdf Foliensatz Entwickler-Workshop der Konferenz 2012]&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Models</id>
		<title>Models</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Models"/>
				<updated>2013-02-16T01:09:42Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: Die Seite wurde neu angelegt: „{{stub}} Category:Dev_HOWTOS Category:Development {{AppliesTo|Version=3.0.0}}  '''''Models von Contao3 nutzen und verstehen'''''  = Was sind Models = Ein …“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[Category:Dev_HOWTOS]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
{{AppliesTo|Version=3.0.0}}&lt;br /&gt;
&lt;br /&gt;
'''''Models von Contao3 nutzen und verstehen'''''&lt;br /&gt;
&lt;br /&gt;
= Was sind Models =&lt;br /&gt;
Ein Model ist die Objekt-Repräsentation einer Datebank-Tabelle, genauer gesagt einer Entität daraus.&lt;br /&gt;
Models ersetzen weitgehend SQL-Statements und wrappen diese in bequeme Methoden. Natürlich bieten Models noch viele weitere Vorteile.&lt;br /&gt;
&lt;br /&gt;
Mehrere Models werden durch eine ''Collection'' referenziert, dies entspricht einer SQL-Abfrage die mehr als eine Ergebniszeile liefert.&lt;br /&gt;
&lt;br /&gt;
Contao3 bietet - wenn dem Model eine DCA-Struktur zugeordnet ist - etwas Magic um abhängige Datensätze zu laden. Beispiel: Der Author (UserModel) eines Artikels (ArticleModel). &lt;br /&gt;
&lt;br /&gt;
= Verwendung =&lt;br /&gt;
&lt;br /&gt;
TODO write something cool&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Relationen / Datensätze aus Fremndtabellen =&lt;br /&gt;
Für die Funktion der relations-''Magic'' muss dem Model ein DCA-Definition zugeordnet sein. Diese wird bei der Definition der Model-Klasse angegeben:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class ArticleModel extends \Model&lt;br /&gt;
{&lt;br /&gt;
	/**&lt;br /&gt;
	 * Table name&lt;br /&gt;
	 * @var string&lt;br /&gt;
	 */&lt;br /&gt;
	protected static $strTable = 'tl_article';&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In der DCA-Struktur wird die Relation definiert&lt;br /&gt;
&lt;br /&gt;
Angenommen wir haben ein Model das einen Datensatz aus ''tl_article'' referenziert. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_DCA']['tl_article'] = array&lt;br /&gt;
(&lt;br /&gt;
...&lt;br /&gt;
// Fields&lt;br /&gt;
	'fields' =&amp;gt; array&lt;br /&gt;
	(&lt;br /&gt;
		'pid' =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'foreignKey'              =&amp;gt; 'tl_page.title',&lt;br /&gt;
			'sql'                     =&amp;gt; &amp;quot;int(10) unsigned NOT NULL default '0'&amp;quot;,&lt;br /&gt;
			'relation'                =&amp;gt; array('type'=&amp;gt;'belongsTo', 'load'=&amp;gt;'lazy')&lt;br /&gt;
		),&lt;br /&gt;
		'author' =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_article']['author'],&lt;br /&gt;
			'default'                 =&amp;gt; $this-&amp;gt;User-&amp;gt;id,&lt;br /&gt;
			'exclude'                 =&amp;gt; true,&lt;br /&gt;
			'inputType'               =&amp;gt; 'select',&lt;br /&gt;
			'foreignKey'              =&amp;gt; 'tl_user.name',&lt;br /&gt;
			'eval'                    =&amp;gt; array('doNotCopy'=&amp;gt;true, 'mandatory'=&amp;gt;true, 'chosen'=&amp;gt;true, 'includeBlankOption'=&amp;gt;true, 'tl_class'=&amp;gt;'w50'),&lt;br /&gt;
			'sql'                     =&amp;gt; &amp;quot;int(10) unsigned NOT NULL default '0'&amp;quot;,&lt;br /&gt;
			'relation'                =&amp;gt; array('type'=&amp;gt;'hasOne', 'load'=&amp;gt;'eager')&lt;br /&gt;
		),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Weiterführende Informationen =&lt;br /&gt;
&lt;br /&gt;
* [http://api.contao.org/v3/classes/Contao.Model.html API-Doku Model Klasse]&lt;br /&gt;
* [http://api.contao.org/v3/classes/Contao.Model.Collection.html API-Doku Collection Klasse]&lt;br /&gt;
* [https://contao.org/files/conference/conference-2012/papers/Entwickler-Workshop.pdf Foliensatz Entwickler-Workshop der Konferenz 2012]&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/News4ward</id>
		<title>News4ward</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/News4ward"/>
				<updated>2012-12-13T11:38:00Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: /* Stable Version */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
[[en:News4ward]]&lt;br /&gt;
[[pt:News4ward]]&lt;br /&gt;
[[Category:Admin_HOWTOS]]&lt;br /&gt;
[[Category:Extensions]]&lt;br /&gt;
&lt;br /&gt;
=News4ward für Contao3=&lt;br /&gt;
{{ExtInfo&lt;br /&gt;
| DevSite=http://www.4wardmedia.de&lt;br /&gt;
| ExtVersion=GithubVersion&lt;br /&gt;
| Version=3.x&lt;br /&gt;
| ERLink=http://www.contao.org/erweiterungsliste/view/news4ward.html&lt;br /&gt;
}}&lt;br /&gt;
==Beta Version==&lt;br /&gt;
'''Github''' https://github.com/psi-4ward/news4ward/tree/contao3&lt;br /&gt;
&lt;br /&gt;
==Spezielles==&lt;br /&gt;
Es wird kein GlobalContentelements mehr benötigt!&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=News4ward für Contao 2.11=&lt;br /&gt;
News/Blog Erweiterung mit Unterstützung von Archiven::Artikeln::Inhaltselementen&lt;br /&gt;
{{ExtInfo&lt;br /&gt;
| DevSite=http://www.4wardmedia.de&lt;br /&gt;
| ExtVersion=1.0.0 Build6&lt;br /&gt;
| Version=2.11.x&lt;br /&gt;
| ERLink=http://www.contao.org/erweiterungsliste/view/news4ward.html&lt;br /&gt;
}}&lt;br /&gt;
==Stable Version==&lt;br /&gt;
'''Extension Repository''' https://contao.org/de/extension-list/view/news4ward.de.html&lt;br /&gt;
&lt;br /&gt;
==Demo von News4ward==&lt;br /&gt;
Siehe http://blog4contao.de&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Filepicker4ward</id>
		<title>Filepicker4ward</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Filepicker4ward"/>
				<updated>2012-11-29T12:16:50Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Extensions]]&lt;br /&gt;
{{ExtInfo&lt;br /&gt;
| DevSite=http://www.4wardmedia.de&lt;br /&gt;
| ExtVersion=2.1.0&lt;br /&gt;
| Version=2.11+&lt;br /&gt;
| ERLink=https://contao.org/de/extension-list/view/filepicker4ward.de.html&lt;br /&gt;
| TrackerLink=https://github.com/psi-4ward/filepicker4ward&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Filepicker''' ist ein Widget zur Dateiauswahl.&lt;br /&gt;
Er kann auch innerhalb des [[MultiColumnWizard]] verwendet werden. Zusätzlich gibt es in den Contao-Einstellungen die Möglichkeit, Filepicker4ward für jede Dateiauswahl zu verwenden. Damit wird das fileTree Widget von Contao ersetzt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Filepicker4ward.jpg]]&lt;br /&gt;
&lt;br /&gt;
Verwendung im MCW:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_DCA']['tl_tbl']['fields']['variants'] = array&lt;br /&gt;
(&lt;br /&gt;
  'label'        =&amp;gt; array('Varianten','Legen Sie die Varianten fest'),&lt;br /&gt;
  'inputType'    =&amp;gt; 'multiColumnWizard',&lt;br /&gt;
  'eval'         =&amp;gt; array&lt;br /&gt;
  (&lt;br /&gt;
      'columnFields'      =&amp;gt; array&lt;br /&gt;
      (&lt;br /&gt;
            'img' =&amp;gt; array&lt;br /&gt;
            (&lt;br /&gt;
                  'label'      =&amp;gt; array('Bild',''),&lt;br /&gt;
                  'inputType'  =&amp;gt; 'filepicker4ward',&lt;br /&gt;
                  'eval'       =&amp;gt; array('style'=&amp;gt;'width:180px', 'extensions'=&amp;gt;'png,jpg,gif')&lt;br /&gt;
            ),&lt;br /&gt;
            'icon' =&amp;gt; array&lt;br /&gt;
            (&lt;br /&gt;
                  'label'      =&amp;gt; array('Icon',''),&lt;br /&gt;
                  'inputType'  =&amp;gt; 'filepicker4ward',&lt;br /&gt;
                  'eval'       =&amp;gt; array('style'=&amp;gt;'width:180px', 'extensions'=&amp;gt;'png,jpg,gif')&lt;br /&gt;
            ),&lt;br /&gt;
            'text' =&amp;gt; array&lt;br /&gt;
            (&lt;br /&gt;
                  'label'      =&amp;gt; array('Packungsgröße',''),&lt;br /&gt;
                  'inputType'  =&amp;gt; 'text',&lt;br /&gt;
                  'eval'       =&amp;gt; array('style'=&amp;gt;'width:150px')&lt;br /&gt;
            ),&lt;br /&gt;
      )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analog funktioniert die Verwendung außerhalb des MCWs in einem normalen DCA-Feld.&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Filepicker4ward</id>
		<title>Filepicker4ward</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Filepicker4ward"/>
				<updated>2012-11-29T12:15:33Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: Die Seite wurde neu angelegt: „Category:Extensions {{ExtInfo | DevSite=http://www.men-at-work.de | ExtVersion=3.0.0 | Version=2.10+ | ERLink=https://contao.org/de/extension-list/view/filepi…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Extensions]]&lt;br /&gt;
{{ExtInfo&lt;br /&gt;
| DevSite=http://www.men-at-work.de&lt;br /&gt;
| ExtVersion=3.0.0&lt;br /&gt;
| Version=2.10+&lt;br /&gt;
| ERLink=https://contao.org/de/extension-list/view/filepicker4ward.de.html&lt;br /&gt;
| TrackerLink=https://github.com/menatwork/MultiColumnWizard/issues&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Filepicker''' ist ein Widget zur Dateiauswahl.&lt;br /&gt;
Er kann auch innerhalb des [[MultiColumnWizard]] verwendet werden. Zusätzlich gibt es in den Contao-Einstellungen die Möglichkeit, Filepicker4ward für jede Dateiauswahl zu verwenden. Damit wird das fileTree Widget von Contao ersetzt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Filepicker4ward.jpg]]&lt;br /&gt;
&lt;br /&gt;
Verwendung im MCW:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_DCA']['tl_tbl']['fields']['variants'] = array&lt;br /&gt;
(&lt;br /&gt;
  'label'        =&amp;gt; array('Varianten','Legen Sie die Varianten fest'),&lt;br /&gt;
  'inputType'    =&amp;gt; 'multiColumnWizard',&lt;br /&gt;
  'eval'         =&amp;gt; array&lt;br /&gt;
  (&lt;br /&gt;
      'columnFields'      =&amp;gt; array&lt;br /&gt;
      (&lt;br /&gt;
            'img' =&amp;gt; array&lt;br /&gt;
            (&lt;br /&gt;
                  'label'      =&amp;gt; array('Bild',''),&lt;br /&gt;
                  'inputType'  =&amp;gt; 'filepicker4ward',&lt;br /&gt;
                  'eval'       =&amp;gt; array('style'=&amp;gt;'width:180px', 'extensions'=&amp;gt;'png,jpg,gif')&lt;br /&gt;
            ),&lt;br /&gt;
            'icon' =&amp;gt; array&lt;br /&gt;
            (&lt;br /&gt;
                  'label'      =&amp;gt; array('Icon',''),&lt;br /&gt;
                  'inputType'  =&amp;gt; 'filepicker4ward',&lt;br /&gt;
                  'eval'       =&amp;gt; array('style'=&amp;gt;'width:180px', 'extensions'=&amp;gt;'png,jpg,gif')&lt;br /&gt;
            ),&lt;br /&gt;
            'text' =&amp;gt; array&lt;br /&gt;
            (&lt;br /&gt;
                  'label'      =&amp;gt; array('Packungsgröße',''),&lt;br /&gt;
                  'inputType'  =&amp;gt; 'text',&lt;br /&gt;
                  'eval'       =&amp;gt; array('style'=&amp;gt;'width:150px')&lt;br /&gt;
            ),&lt;br /&gt;
      )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Analog funktioniert die Verwendung außerhalb des MCWs in einem normalen DCA-Feld.&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Datei:Filepicker4ward.jpg</id>
		<title>Datei:Filepicker4ward.jpg</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Datei:Filepicker4ward.jpg"/>
				<updated>2012-11-29T12:07:31Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: Screenshot von Filepicker4ward Widget&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Screenshot von Filepicker4ward Widget&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Klasse_Formular</id>
		<title>Klasse Formular</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Klasse_Formular"/>
				<updated>2012-07-27T18:41:35Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Dev HOWTOS]]&lt;br /&gt;
[[Category:Dev Snippets]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Github:''' https://github.com/psi-4ward/Formular&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Die Klasse ''Formular'' erstellt Formulare aus DCA-Arrays:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Die DCA-Definition&lt;br /&gt;
$dca = array&lt;br /&gt;
(&lt;br /&gt;
        'Kontaktdaten' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Ihre Kontaktdaten',&lt;br /&gt;
                'inputType'     =&amp;gt; 'headline'&lt;br /&gt;
        ),&lt;br /&gt;
        'vorname' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Vorname',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'default'       =&amp;gt; 'vorname',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true,'helpmessage'=&amp;gt;'Ihr Vorname')&lt;br /&gt;
        ),&lt;br /&gt;
        'nachname' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Nachname',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'default'       =&amp;gt; 'nachname',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true,'helpmessage'=&amp;gt;'Ihr Nachname')       &lt;br /&gt;
        ),&lt;br /&gt;
        'datum' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Datum',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'default'       =&amp;gt; date('d.m.Y'),&lt;br /&gt;
                'eval'          =&amp;gt; array('datepicker'=&amp;gt;$this-&amp;gt;getDatePickerString(),'cleardefault'=&amp;gt;false)      &lt;br /&gt;
        ),&lt;br /&gt;
&lt;br /&gt;
        'email' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'E-Mail',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true,'rgxp'=&amp;gt;'email')             &lt;br /&gt;
        ),&lt;br /&gt;
        'telefon' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Telefon',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true)             &lt;br /&gt;
        ),&lt;br /&gt;
        'bemerkung' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Bemerkung',&lt;br /&gt;
                'inputType'     =&amp;gt; 'textarea',&lt;br /&gt;
                'eval'          =&amp;gt; array('rte'=&amp;gt;'tinyMCE')&lt;br /&gt;
        ),&lt;br /&gt;
        'submit' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'speichern',&lt;br /&gt;
                'inputType'     =&amp;gt; 'submit'&lt;br /&gt;
        )&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
// Instantiirung mit der FormularID meinKontaktformular&lt;br /&gt;
$frm = new Formular('meinKontaktformular');&lt;br /&gt;
&lt;br /&gt;
// Übergabe des DCA-Arrays&lt;br /&gt;
$frm-&amp;gt;setDCA($dca);     &lt;br /&gt;
&lt;br /&gt;
// Konfiguration&lt;br /&gt;
$frm-&amp;gt;setConfig('generateFormat','&amp;lt;div&amp;gt;%label %field %error &amp;lt;/div&amp;gt;');&lt;br /&gt;
$frm-&amp;gt;setConfig('attributes',array('tableless'=&amp;gt;true));&lt;br /&gt;
&lt;br /&gt;
// Formular wurde abgeschickt und ist korrekt&lt;br /&gt;
if($frm-&amp;gt;isSubmitted() &amp;amp;&amp;amp; $frm-&amp;gt;validate())&lt;br /&gt;
{&lt;br /&gt;
        var_dump($frm-&amp;gt;getData());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Ausgabe des Formulars&lt;br /&gt;
echo $frm-&amp;gt;parse();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Konfiguration=&lt;br /&gt;
&lt;br /&gt;
Es gibt einige Parameter um die Erstellung des Formulars zu beeinflussen.&lt;br /&gt;
Grundlegend muss zwischen '''parse()''' und '''generate()''' unterschieden werden, wobei parse() die Methode generate() impliziert.&lt;br /&gt;
Formular::parse() bettet den Output von generate() in das ''Template'' ein.&lt;br /&gt;
&lt;br /&gt;
==Parameter==&lt;br /&gt;
Die Konfiguration der Klasse Formular kann über '''Formular::setConfig($param,$value)''' geändert werden.&lt;br /&gt;
&lt;br /&gt;
* str '''formTemplate''': Wird das Formular über parse() gerendert wird dieses Template benutzt. Vorgabe: form&lt;br /&gt;
* str '''class''':  Zusätzliche Klassenangabe&lt;br /&gt;
* str '''action''': action-Attribut des &amp;lt;form&amp;gt; Tags. Vorgabe: Environment-&amp;gt;request&lt;br /&gt;
* str '''method''': method-Attribut des &amp;lt;form&amp;gt; Tags. Vorgabe: post&lt;br /&gt;
* str '''generateFormat''': String mit Platzhaltern welche für jedes Widget durch deren Elemente ersetzt werden. Vorgabe &amp;quot;%parse&amp;quot;&lt;br /&gt;
            %parse Widget::parse()&lt;br /&gt;
            %label Widget::generateLabel()&lt;br /&gt;
            %field Widget::generate()&lt;br /&gt;
            %error Widget::getErrorAsHTML()&lt;br /&gt;
            %errorPlain Widget::getErrorAsString()&lt;br /&gt;
* array '''attributes''': Array mit Attributen für die Widget::parse() Methode. Z.B. array('tableless'=&amp;gt;true)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Systemweite Konfiguration==&lt;br /&gt;
Die Formular-Klasse versucht Konfigurationsoptionen aus $GLOBALS['TL_FORM'] zu lesen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_FORM'] = array&lt;br /&gt;
(&lt;br /&gt;
   'class'            =&amp;gt;'myFormular',&lt;br /&gt;
   'generateFormat'   =&amp;gt; '&amp;lt;div class=&amp;quot;formField&amp;quot;&amp;gt;%label %error %field&amp;lt;/div&amp;gt;',&lt;br /&gt;
   'formTemplate'     =&amp;gt; 'myFormularTemplate'&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Interaktion mit Erweiterungen=&lt;br /&gt;
&lt;br /&gt;
==cleardefault==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/cleardefault.de.html Cleardefault] löscht den Standardwert sobald das Textfeld den Fokus bekommt.&lt;br /&gt;
Ist die Erweiterung installiert werden alle Textfelder und Textareas mit diesem Verhalten versehen. Über das @eval@ Array kann es für ein &lt;br /&gt;
einzelnes Feld angepasst werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$dca = array(&lt;br /&gt;
    'datum' =&amp;gt; array&lt;br /&gt;
    (&lt;br /&gt;
        'label'      =&amp;gt; 'Datum',&lt;br /&gt;
        'inputType'  =&amp;gt; 'text',&lt;br /&gt;
        'default'    =&amp;gt; date('d.m.Y'),&lt;br /&gt;
        'eval'       =&amp;gt; array('cleardefault'=&amp;gt;false)      &lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
''' 'cleardefault'=&amp;gt;false''' deaktiviert das Löschen des Standardwertes für das Feld '''datum'''.&lt;br /&gt;
&lt;br /&gt;
==helpmessage==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/helpmessage.de.html Helpmessage] blendet per Javascript Hilfsnachrichten für das Feld ein.&lt;br /&gt;
Die Nachricht wird im '''eval''' Array hinterlegt. Falls über die Klasse '''FormularTL_DCA''' eine Tabelle gerendert wird, werden die Hilfstexte aus den Contao-Sprachdateien der Tabelle übernommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$dca = array(&lt;br /&gt;
    'datum' =&amp;gt; array&lt;br /&gt;
    (&lt;br /&gt;
        'label'      =&amp;gt; 'Datum',&lt;br /&gt;
        'inputType'  =&amp;gt; 'text',&lt;br /&gt;
        'default'    =&amp;gt; date('d.m.Y'),&lt;br /&gt;
        'eval'       =&amp;gt; array('helpmessage'=&amp;gt;'Das Datum muss im Format DD.MM.YYYY sein')&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==formcheck==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/formcheck.de.html Formcheck] validiert ein Formular per Javascript auf der Clientseite.&lt;br /&gt;
Falls die Erweiterung (ab Version 1.3!) installiert ist funktionierte diese ohne weitere Konfiguration.&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Inserttags_Javascript_Support</id>
		<title>Inserttags Javascript Support</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Inserttags_Javascript_Support"/>
				<updated>2012-04-18T13:12:32Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: Die Seite wurde neu angelegt: „Category: Core Category:Admin HOWTOS Category:Anwender und Redakteure  = Insert-Tags mit Javascript Support =  Oft kommt es zu Problemen mit Elementen…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category: Core]]&lt;br /&gt;
[[Category:Admin HOWTOS]]&lt;br /&gt;
[[Category:Anwender und Redakteure]]&lt;br /&gt;
&lt;br /&gt;
= Insert-Tags mit Javascript Support =&lt;br /&gt;
&lt;br /&gt;
Oft kommt es zu Problemen mit Elementen die Javascripts laden. Inkludiert man beispielsweise einen Slider per Insert-Tag wird zwar die HTML-Struktur ausgegeben, jedoch nicht das dahinterliegende Javascript. Dieser Effekt liegt in der Abarbeitungsreihenfolge eine Contao-Seite. Nach dem alle Elemente verarbeitet wurde, wird das Javascript (und benutzerdefinierte Stylesheets usw) eingefügt. Zum Schluss werden nun die Insert-Tags verarbeitet und ersetzt, da an dieser Stelle das Javascript bereits abgehandelt wurde, wird es nicht mehr beachtet und geht verloren.&lt;br /&gt;
&lt;br /&gt;
Um diesem Problem beizukommen kann die Erweiterung [http://www.contao.org/en/extension-list/view/inserttags_js_support.de.html inserttags_js_support] verwendet werden. Sie berechnet die TL_JAVASCRIPT, TL_MOOTOOLS, TL_STYLESHEET und TL_HEAD nach Verarbeitung aller Insert-Tags erneut und fügt fehlende Eintrage der Seite hinzu.&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Insert-Tags</id>
		<title>Insert-Tags</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Insert-Tags"/>
				<updated>2012-04-18T13:04:34Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: /* Insert-Tags */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{stub}}&lt;br /&gt;
{{AppliesTo&lt;br /&gt;
|Version=Alle Versionen&lt;br /&gt;
}}&lt;br /&gt;
[[Category: Core]]&lt;br /&gt;
[[Category:Dev HOWTOS]]&lt;br /&gt;
[[Category:Anwender und Redakteure]]&lt;br /&gt;
&lt;br /&gt;
= Insert-Tags =&lt;br /&gt;
Contao bietet die Möglichkeit, mittels so genannter Insert-Tags Inhalte oder Funktionen zu referenzieren.&lt;br /&gt;
&lt;br /&gt;
Der Aufbau ist in der Regel &amp;lt;nowiki&amp;gt;{{Tagname::Argument}}&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
{{Achtung|Eine Verschachtelung – also der Aufruf eines Insert-Tags innerhalb eines anderen – ist nur mit &amp;lt;nowiki&amp;gt;{{iflng::*}}&amp;lt;/nowiki&amp;gt; möglich. Andere Insert-Tags können nicht verschachtelt werden.}}&lt;br /&gt;
{{Achtung|Werden Elemente inkludiert, die auf Javascript basieren, wird das Javascript nicht geladen. Abhilfe: [[Inserttags_Javascript_Support]]}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Liste der Insert-Tags ==&lt;br /&gt;
Die Liste stammt im Wesentlichen von [http://www.contao.org/typolight-insert-tags.html Contao.org]. Über die dort dokumentierten Insert-Tags hinaus gibt es weitere Insert-Tags. Bitte vervollständige die Liste.&lt;br /&gt;
=== Link-Elemente ===&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
! '''Insert-Tag''' !! '''Beschreibung'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{link::*}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit einem Link zu einer interne Seite ersetzt (ersetzen Sie * mit der ID oder dem Alias).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;{{link::back}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit der zuletzt besuchte Seite ersetzt. Kann auch mit link_open, link_url und link_title verwendet werden.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;{{link::login}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit einem Link zur Anmeldeseite des aktuellen Frontend-Benutzers (falls vorhanden) ersetzt.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;{{link_open::*}}&amp;lt;/nowiki&amp;gt; || Wird mit dem öffnenden Tag eines Links zu einer internen Seite ersetzt: &amp;lt;nowiki&amp;gt;{{link_open::12}}&amp;lt;/nowiki&amp;gt;Click here&amp;lt;nowiki&amp;gt;{{link_close}}&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;{{link_url::*}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit der URL einer internen Seite ersetzt: &amp;lt;nowiki&amp;gt;&amp;lt;a href=&amp;quot;{{link_url::12}}&amp;quot;&amp;gt;Click here&amp;lt;/a&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;{{link_title::*}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Titel einer internen Seite ersetzt: &amp;lt;nowiki&amp;gt;&amp;lt;a title=&amp;quot;{{link_title::12}}&amp;quot;&amp;gt;Click here&amp;lt;/a&amp;gt;&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;{{article::*}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit einem Link zu einem Artikel ersetzt (ersetzen Sie * mit der ID oder dem Alias).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;{{article_open::*}}&amp;lt;/nowiki&amp;gt; || Wird mit dem öffnenden Tag eines Links zu einem Artikel ersetzt: &amp;lt;nowiki&amp;gt;{{article_open::12}}Click here{{link_close}}.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;{{article_url::*}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit der URL eines Artikels ersetzt: &amp;lt;nowiki&amp;gt;&amp;lt;a href=&amp;quot;{{article_url::12}}&amp;quot;&amp;gt;Click here&amp;lt;/a&amp;gt;&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;{{article_title::*}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Titel eines Artikels ersetzt: &amp;lt;nowiki&amp;gt;&amp;lt;a title=&amp;quot;{{article_title::12}}&amp;quot;&amp;gt;Click here&amp;lt;/a&amp;gt;&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;{{news::*}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit einem Link zu einer Nachricht ersetzt (ersetzen Sie * mit der ID oder dem Alias).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;{{news_open::*}}&amp;lt;/nowiki&amp;gt; || Wird mit dem öffnenden Tag eines Links zu einer Nachricht ersetzt: &amp;lt;nowiki&amp;gt;{{news_open::12}}Click here{{link_close}}&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;{{news_url::*}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit der URL einer Nachricht ersetzt: &amp;lt;nowiki&amp;gt;&amp;lt;a href=&amp;quot;{{news_url::12}}&amp;quot;&amp;gt;Click here&amp;lt;/a&amp;gt;&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;{{news_title::*}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Titel einer Nachricht ersetzt: &amp;lt;nowiki&amp;gt;&amp;lt;a title=&amp;quot;{{news_title::12}}&amp;quot;&amp;gt;Click here&amp;lt;/a&amp;gt;&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;{{event::*}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit einem Link zu einem Event ersetzt (ersetzen Sie * mit der ID oder dem Alias).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;{{event_open::*}}&amp;lt;/nowiki&amp;gt; || Wird mit dem öffnenden Tag eines Links zu einem Event ersetzt: &amp;lt;nowiki&amp;gt;{{event_open::12}}Click here{{link_close}}&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;{{event_url::*}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit der URL eines Events ersetzt: &amp;lt;nowiki&amp;gt;&amp;lt;a href=&amp;quot;{{event_url::12}}&amp;quot;&amp;gt;Click here&amp;lt;/a&amp;gt;&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;{{event_title::*}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Titel eines Events ersetzt: &amp;lt;nowiki&amp;gt;&amp;lt;a title=&amp;quot;{{event_title::12}}&amp;quot;&amp;gt;Click here&amp;lt;/a&amp;gt;&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;{{faq::*}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit einem Link zu einer häufig gestellten Frage ersetzt (ersetzen Sie * mit der ID oder dem Alias).&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;{{faq_open::*}}&amp;lt;/nowiki&amp;gt; || Wird mit dem öffnenden Tag eines Links zu einer Frage ersetzt: &amp;lt;nowiki&amp;gt;{{faq_open::12}}Click here{{link_close}}&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;{{faq_url::*}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit der URL einer Frage ersetzt: &amp;lt;nowiki&amp;gt;&amp;lt;a href=&amp;quot;{{faq_url::12}}&amp;quot;&amp;gt;Click here&amp;lt;/a&amp;gt;&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;nowiki&amp;gt;{{faq_title::*}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Titel einer Frage ersetzt: &amp;lt;nowiki&amp;gt;&amp;lt;a title=&amp;quot;{{faq_title::12}}&amp;quot;&amp;gt;Click here&amp;lt;/a&amp;gt;.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Benutzereigenschaften ===&lt;br /&gt;
&lt;br /&gt;
Mit den folgenden Inserttags können Eigenschaften des angemeldeten Benutzers ausgebeben werden.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
! '''Insert-Tag''' !! '''Beschreibung'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{user::firstname}}&amp;lt;/nowiki&amp;gt; ||Dieses Tag wird mit dem Vornamen des angemeldeten Benutzers ersetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{user::lastname}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Nachnamen des angemeldeten Benutzers ersetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{user::company}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Firmennamen des angemeldeten Benutzers ersetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{user::phone}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit der Telefonnummer des angemeldeten Benutzers ersetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{user::mobile}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit der Handynummer des angemeldeten Benutzers ersetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{user::fax}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit der Faxnummer des angemeldeten Benutzers ersetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{user::email}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit der E-Mail-Adresse des angemeldeten Benutzers ersetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{user::website}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit der Internetadresse des angemeldeten Benutzers ersetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{user::street}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Staßennamen des angemeldeten Benutzers ersetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{user::postal}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit der Postleitzahl des angemeldeten Benutzers ersetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{user::city}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit der Stadt des angemeldeten Benutzers ersetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{user::country}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Land des angemeldeten Benutzers ersetzt.&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{user::username}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Benutzernamen des angemeldeten Benutzers ersetzt.&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; |&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Umgebungsvariablen ===&lt;br /&gt;
&lt;br /&gt;
Mit den folgenden Inserttags können Umgebungsvariablen wie z.B. der Seitenname oder der Request-String ausgegeben werden.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
! '''Insert-Tag''' !! '''Beschreibung''' !! '''ab Version''' || '''bis Version'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{env::page_id}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit der ID der aktuellen Seite ersetzt. || || 2.10.x&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{env::page_alias}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Alias der aktuellen Seite ersetzt. || || 2.10.x&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{env::page_name}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Namen der aktuellen Seite ersetzt. || || 2.10.x&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{env::page_title}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Titel der aktuellen Seite ersetzt. || || 2.10.x&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{env::page_language}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit der Sprache der aktuellen Seite ersetzt. || || 2.10.x&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{env::parent_alias}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Alias der übergeordneten Seite ersetzt. || || 2.10.x&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{env::parent_name}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Namen der übergeordneten Seite ersetzt. || || 2.10.x&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{env::parent_title}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Titel der übergeordneten Seite ersetzt. || || 2.10.x&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{env::main_alias}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Alias der übergeordneten Hauptseite ersetzt. || || 2.10.x&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{env::main_name}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Namen der übergeordneten Hauptseite ersetzt. || || 2.10.x&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{env::main_title}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Titel der übergeordneten Hauptseite ersetzt. || || 2.10.x&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{env::website_title}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Titel der Webseite ersetzt. || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{env::host}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem aktuellen Hostnamen ersetzt.  || 2.9.0||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{env::url}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Hostnamen und dem Protokoll ersetzt. || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{env::path}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit der aktuellen Basis-URL samt Pfad zum Contao-Verzeichnis ersetzt. || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{env::request}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem aktuellen Request-String ersetzt.  || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{env::referer}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit der URL der zuletzt besuchten Seite ersetzt.  || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{env::ip}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit der IP-Adresse des aktuellen Besuchers ersetzt. || ||&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Seitenbezogene Inserttags===&lt;br /&gt;
&lt;br /&gt;
Mit den folgenden Inserttags können Umgebungsvariablen wie z.B. der Seitenname.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
! '''Insert-Tag''' !! '''Beschreibung''' !! '''ab Version''' || '''bis Version'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{page::id}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit der ID der aktuellen Seite ersetzt. || 2.11.x || &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{page::alias}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Alias der aktuellen Seite ersetzt. || 2.11.x ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{page::title}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Namen der aktuellen Seite ersetzt. || 2.11.x || &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{page::pageTitle}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Titel der aktuellen Seite ersetzt. || 2.11.x ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{page::language}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit der Sprache der aktuellen Seite ersetzt. || 2.11.x || &lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{page::parentAlias}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Alias der übergeordneten Seite ersetzt. || 2.11.x ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{page::parentTitle}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Namen der übergeordneten Seite ersetzt. || 2.11.x ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{page::parentPageTitle}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Titel der übergeordneten Seite ersetzt. || 2.11.x||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{page::mainAlias}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Alias der übergeordneten Hauptseite ersetzt. || 2.11.x ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{page::mainTitle}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Namen der übergeordneten Hauptseite ersetzt. || 2.11.x ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{page::mainPageTitle}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Titel der übergeordneten Hauptseite ersetzt. || 2.11.x ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{page::rootTitle}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Titel der Webseite ersetzt. || 2.11.x ||&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Include-Elemente ===&lt;br /&gt;
&lt;br /&gt;
Mit den folgenden Inserttags können Ressourcen wie z.B. Artikel, Module oder Dateien aus dem templates-Verzeichnis eingebunden werden.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
! '''Insert-Tag''' !! '''Beschreibung'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{insert_article::*}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem referenzierten Artikel ersetzt (ersetzen Sie * mit der ID oder dem Alias).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{insert_content::*}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem referenzierten Inhaltselement ersetzt (ersetzen Sie * mit der ID des Elements).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{insert_module::*}}&amp;lt;/nowiki&amp;gt;	|| Dieses Tag wird mit dem referenzierten Modul ersetzt (ersetzen Sie * mit der ID des Moduls).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{article_teaser::*}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Teaser eines Artikels ersetzt (ersetzen Sie * mit der ID des Artikels).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{news_teaser::*}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Teaser einer Nachricht ersetzt (ersetzen Sie * mit der ID der Nachricht).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{event_teaser::*}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Teaser eines Events ersetzt (ersetzen Sie * mit der ID des Events).&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{file::*}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Inhalt einer .php- oder .tpl-Datei aus dem templates-Verzeichnis ersetzt (ersetzen Sie * mit dem Namen). Bei Bedarf können Sie Argumente übergeben: &amp;lt;nowiki&amp;gt;{{file::file.php?arg1=val&amp;amp;arg2=val}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{insert_form::*}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem referenzierten Formular ersetzt (ersetzen Sie * mit der ID oder dem Alias).&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Verschiedenes ===&lt;br /&gt;
&lt;br /&gt;
Mit den folgenden Inserttags können Sie verschiedene Aufgaben erledigen und z.B. das aktuelle Datum oder ein Lightbox-Bild einfügen.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
! '''Insert-Tag''' !! '''Beschreibung''' !! '''ab Version''' || '''bis Version'''&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{date}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem aktuellen Datum gemäß des globalen Datumsformats ersetzt. || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{date::*}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem aktuellen Datum gemäß eines individuellen Datumsformats ersetzt. || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{last_update}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit dem Datum der letzten Aktualisierung gemäß des globalen Datumsformats ersetzt. || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{last_update::*}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit Datum der letzten Aktualisierung gemäß eines individuellen Datumsformats ersetzt. || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{email::*}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit einem verschlüsselten Link zu einer E-Mail-Adresse ersetzt. || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{email_open::*}}&amp;lt;/nowiki&amp;gt; || '''???''' || 2.11 ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{email_url::*}}&amp;lt;/nowiki&amp;gt; || '''???''' || 2.11 ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{lang::*}}&amp;lt;/nowiki&amp;gt; || Mit diesem Tag können fremdsprachige Wörter in einem Text markiert werden: &amp;lt;nowiki&amp;gt;{{lang::fr}}Au revoir{{lang}}&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Wird ersetzt mit &amp;lt;nowiki&amp;gt;&amp;lt;span lang=&amp;quot;fr&amp;quot; xml:lang=&amp;quot;fr&amp;quot;&amp;gt;Au revoir&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;. || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{iflng::*}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird komplett entfernt, wenn die Sprache der Seite nicht mit der Tag-Sprache übereinstimmt. Sie können so sprachspezifische Bezeichnungen erstellen:&amp;lt;br /&amp;gt; &lt;br /&gt;
&amp;lt;nowiki&amp;gt;{{iflng::en}}Your name{{iflng}}{{iflng::de}}Ihr Name{{iflng}} &lt;br /&gt;
&amp;lt;/nowiki&amp;gt; || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{image::*}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit der Vorschauansicht eines Bildes ersetzt: &amp;lt;nowiki&amp;gt;{{image::tl_files/image.jpg?width=200&amp;amp;height=150}}&amp;lt;/nowiki&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
Argumente sind:&amp;lt;br /&amp;gt;&lt;br /&gt;
*width - Breite des Vorschaubildes&lt;br /&gt;
*height - Höhe des Vorschaubildes&lt;br /&gt;
*alt - Alternativer Text&lt;br /&gt;
*class CSS-Klasse&lt;br /&gt;
*rel rel-Attribut (z.B. &amp;quot;lightbox&amp;quot;)&lt;br /&gt;
*mode Modus (&amp;quot;proportional&amp;quot;, &amp;quot;crop&amp;quot; oder &amp;quot;box&amp;quot;) || 2.8.2 ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{label::*}}&amp;lt;/nowiki&amp;gt; || Dieses Tag wird mit einer Übersetzung ersetzt: &amp;lt;nowiki&amp;gt;{{label::CNT:au}}&amp;lt;/nowiki&amp;gt; oder &amp;lt;nowiki&amp;gt;{{label::tl_article:title:0}}&amp;lt;/nowiki&amp;gt;.&amp;lt;br /&amp;gt;Beachten Sie, dass innerhalb des Pfads zur Bezeichnung nur einfache Doppelpunkte verwendet werden. || ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{abbr::Abkürzungserklärung}}Abkürzung{{abbr}}&amp;lt;/nowiki&amp;gt; || - Mit diesem Tag können Abkürzungen in einem Text markiert werden: &amp;lt;nowiki&amp;gt;{{abbr::AGG}}Allgemeines Gleichstellungsgesetz{{abbr}}&amp;lt;/nowiki&amp;gt; wird ersetzt mit &amp;lt;nowiki&amp;gt;&amp;lt;span abbr=&amp;quot;AGG&amp;quot;&amp;gt;Allgemeines Gleichstellungsgesetz&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;. || 2.9.2 ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;nowiki&amp;gt;{{acronym::Akronymerklärung}}Akronym{{acronym}}&amp;lt;/nowiki&amp;gt; || - Mit diesem Tag können Akronyme in einem Text markiert werden: &amp;lt;nowiki&amp;gt;{{acronym::PISA}}Programme for International Student Assessment{{abbr}}&amp;lt;/nowiki&amp;gt; wird ersetzt mit &amp;lt;nowili&amp;gt;&amp;lt;span acronym=&amp;quot;PISA&amp;quot;&amp;gt;Programme for International Student Assessment&amp;lt;/span&amp;gt;&amp;lt;/nowiki&amp;gt;. || 2.9.2 || &lt;br /&gt;
| colspan=&amp;quot;3&amp;quot; | &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Weitere Inserttags ===&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;{{env::ua}}&amp;lt;/nowiki&amp;gt; - liefert den Usergent zurück&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;{{env::plugins_url}}&amp;lt;/nowiki&amp;gt; - liefert TL_PLUGINS_URL;&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;{{env::script_url}}&amp;lt;/nowiki&amp;gt; - liefert TL_SCRIPT_URL;&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;{{env::files_url}}&amp;lt;/nowiki&amp;gt; - liefert TL_FILES_URL;&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;{{env::ip}}&amp;lt;/nowiki&amp;gt; - liefert IP&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;{{env::http_host}}&amp;lt;/nowiki&amp;gt; - liefert den HTTP-Host&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;{{ifnlng::XX}}&amp;lt;/nowiki&amp;gt; - if '''not''' language&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;{{request_token}}&amp;lt;/nowiki&amp;gt; - Request Token&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;{{version}}&amp;lt;/nowiki&amp;gt; - Version&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;{{last_update}}&amp;lt;/nowiki&amp;gt; - letztes Update&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;{{calendar_feed::xx}}&amp;lt;/nowiki&amp;gt; - Kalender-Feed&lt;br /&gt;
*&amp;lt;nowiki&amp;gt;{{news_feed::xx}}&amp;lt;/nowiki&amp;gt; - News-Feed&lt;br /&gt;
&lt;br /&gt;
== Eigene Insert-Tags erstellen ==&lt;br /&gt;
Darüber hinaus gibt es Möglichkeiten, um eigene Insert-Tags zu erstellen Siehe auch: [[Eigene_insert_tags_erstellen]].&lt;br /&gt;
&lt;br /&gt;
== Insert-Tags von Extensions ==&lt;br /&gt;
&lt;br /&gt;
=== dlstats ===&lt;br /&gt;
Die Insert-Tags der Extension &amp;quot;dlstats&amp;quot; sind unter [[Dlstats#Insert-Tag_Nutzung]] aufgelistet.&lt;br /&gt;
&lt;br /&gt;
=== LastLogin ===&lt;br /&gt;
Die Insert-Tags der Extension &amp;quot;LastLogin&amp;quot; sind ab [[LastLogin#Letzter_Login]] aufgelistet.&lt;br /&gt;
&lt;br /&gt;
=== Visitors ===&lt;br /&gt;
Die Insert-Tags der Extension &amp;quot;Visitors&amp;quot; sind unter [[Visitors#Insert-Tags]] aufgelistet.&lt;br /&gt;
&lt;br /&gt;
=== Tags ===&lt;br /&gt;
&lt;br /&gt;
Die Insert-Tags der Extension &amp;quot;Tags&amp;quot; sind unter [[Tags#Insert_Tags]] aufgelistet.&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/GlobalContentelements</id>
		<title>GlobalContentelements</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/GlobalContentelements"/>
				<updated>2011-12-19T09:36:08Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: Die Seite wurde neu angelegt: „Category:Dev_HOWTOS Category:Development Category:Extensions {{ExtInfo | DevSite=http://www.4wardmedia.de.de | ExtVersion=1.0.0 | Version=2.10.x | ERL…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Dev_HOWTOS]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Extensions]]&lt;br /&gt;
{{ExtInfo&lt;br /&gt;
| DevSite=http://www.4wardmedia.de.de&lt;br /&gt;
| ExtVersion=1.0.0&lt;br /&gt;
| Version=2.10.x&lt;br /&gt;
| ERLink=http://www.contao.org/erweiterungsliste/view/GlobalContentelements.html&lt;br /&gt;
}}&lt;br /&gt;
'''Github''' https://github.com/psi-4ward/GlobalContentelements&lt;br /&gt;
&lt;br /&gt;
=GlobalContentelements=&lt;br /&gt;
&lt;br /&gt;
Diese Erweiterung ist für Entwickler gedacht. Sie erlaubt die Verwendung aller Inhaltselemente in eigenen Extensions durch Verwendung der tl_content.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispiel der Verwendung in News4ward==&lt;br /&gt;
&lt;br /&gt;
Ähnlich der tl_article stellt tl_news4ward_article einen News-Artikel dar. Hier sollen alle Inhaltselemente zur Verfügung stehen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_DCA']['tl_news4ward_article'] = array&lt;br /&gt;
(&lt;br /&gt;
&lt;br /&gt;
	// Config&lt;br /&gt;
	'config' =&amp;gt; array&lt;br /&gt;
	(&lt;br /&gt;
		'dataContainer'               =&amp;gt; 'Table',&lt;br /&gt;
		'ptable'                      =&amp;gt; 'tl_news4ward',&lt;br /&gt;
		'ctable'                      =&amp;gt; array('tl_content'),&lt;br /&gt;
		'switchToEdit'                =&amp;gt; true,&lt;br /&gt;
		'enableVersioning'            =&amp;gt; true,&lt;br /&gt;
		'onload_callback' =&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			array('tl_news4ward_article', 'checkPermission'),&lt;br /&gt;
		)&lt;br /&gt;
	),&lt;br /&gt;
.....&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die Datei news4ward/dca/tl_content.php: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// GlobalContentelements switch&lt;br /&gt;
if($this-&amp;gt;Input-&amp;gt;get('do') == 'news4ward')&lt;br /&gt;
{&lt;br /&gt;
	$GLOBALS['TL_DCA']['tl_content']['config']['ptable'] = 'tl_news4ward_article';&lt;br /&gt;
	&lt;br /&gt;
	// set news4wards checkPermissions function&lt;br /&gt;
	$GLOBALS['TL_DCA']['tl_content']['config']['onload_callback'][] = array('tl_content_news4ward', 'checkPermission');&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
class tl_content_news4ward extends Backend&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Import the back end user object&lt;br /&gt;
	 */&lt;br /&gt;
	public function __construct()&lt;br /&gt;
	{&lt;br /&gt;
		parent::__construct();&lt;br /&gt;
		$this-&amp;gt;import('BackendUser', 'User');&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Check permissions to edit table tl_content&lt;br /&gt;
	 */&lt;br /&gt;
	public function checkPermission()&lt;br /&gt;
	{&lt;br /&gt;
&lt;br /&gt;
		if ($this-&amp;gt;User-&amp;gt;isAdmin)&lt;br /&gt;
		{&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
// some more permission checks&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/AutocompleterTextfield</id>
		<title>AutocompleterTextfield</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/AutocompleterTextfield"/>
				<updated>2011-10-28T14:23:39Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Dev_HOWTOS]]&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Extensions]]&lt;br /&gt;
{{ExtInfo&lt;br /&gt;
| DevSite=http://www.4wardmedia.de.de&lt;br /&gt;
| ExtVersion=1.0.0&lt;br /&gt;
| Version=2.10.x&lt;br /&gt;
| ERLink=http://www.contao.org/erweiterungsliste/view/autocompleterTextfield.html&lt;br /&gt;
| TrackerLink=http://contao-forge.org/projects/autocompleterTextfield/issues&lt;br /&gt;
| SVN=http://svn.4wardmedia.de/autocompleterTextfield&lt;br /&gt;
}}&lt;br /&gt;
'''SVN''': http://svn.4wardmedia.de/autocompleterTextfield&lt;br /&gt;
&lt;br /&gt;
=AutocompleterTextfield=&lt;br /&gt;
&lt;br /&gt;
[[Datei:AutocompleterTextfield.png]]&lt;br /&gt;
&lt;br /&gt;
Autocompleting für ein Textfeld anhand von ''options'', ''options_callback'' oder ''foreignKey''.&lt;br /&gt;
Über die Eval-Option ''storeId'' kann die ID bzw. der Array-Key anstatt der Textwert gespeichert werden. &lt;br /&gt;
&lt;br /&gt;
==Einfaches Textfeld, Vervollständigung anhand der tl_page, Speicherung der tl_page.id==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
'myPage' =&amp;gt; array&lt;br /&gt;
(&lt;br /&gt;
	'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_tmp']['myPage'],&lt;br /&gt;
	'inputType'               =&amp;gt; 'autocompleterTextfield',&lt;br /&gt;
	'foreignKey'		  =&amp;gt; 'tl_page.title',&lt;br /&gt;
	'eval'                    =&amp;gt; array('storeId'=&amp;gt;true)&lt;br /&gt;
),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Einfaches Textfeld, Vervollständigung anhand von ''options''==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
'myPage' =&amp;gt; array&lt;br /&gt;
(&lt;br /&gt;
	'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_tmp']['myPage'],&lt;br /&gt;
	'inputType'               =&amp;gt; 'autocompleterTextfield',&lt;br /&gt;
	'options'		  =&amp;gt; array('Erster Eintrag','Zweiter Eintrag','Dritter Eintrag')&lt;br /&gt;
),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Verwendung im [[MultiColumnWizard]]==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
'einFeld' =&amp;gt; array&lt;br /&gt;
(&lt;br /&gt;
	'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_asd']['einFeld'],&lt;br /&gt;
	'inputType'               =&amp;gt; 'multiColumnWizard',&lt;br /&gt;
	'eval'                    =&amp;gt; array(&lt;br /&gt;
		'columnFields'	=&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'myTxt' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label'         =&amp;gt; array('label','desc'),&lt;br /&gt;
				'inputType'     =&amp;gt; 'autocompleterTextfield',&lt;br /&gt;
				'options'	=&amp;gt; array('Erster Eintrag','Zweiter Eintrag','Dritter Eintrag'),&lt;br /&gt;
				'eval' 		=&amp;gt; array('style'=&amp;gt;'width:180px')&lt;br /&gt;
			),&lt;br /&gt;
			'myTxt2' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label'         =&amp;gt; array('label','desc'),&lt;br /&gt;
				'inputType'     =&amp;gt; 'autocompleterTextfield',&lt;br /&gt;
				'options_callback' =&amp;gt; array('myClass','myCallback'),&lt;br /&gt;
				'eval' 		=&amp;gt; array('style'=&amp;gt;'width:180px')&lt;br /&gt;
			),&lt;br /&gt;
		)&lt;br /&gt;
	),&lt;br /&gt;
),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispiel für einen options_callback==&lt;br /&gt;
Falls die POST-Variable (&amp;quot;value&amp;quot;) gesetzt ist, kann eine Vorselektierung stattfinden. Sie wird vom Autocompleter-Javascript übermittelt und enthält den eingegebenen String.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function getProducts()&lt;br /&gt;
{&lt;br /&gt;
	$this-&amp;gt;import('Database');&lt;br /&gt;
	&lt;br /&gt;
	// perhaps do some validation, cause POST-Vars are evil&lt;br /&gt;
	if($this-&amp;gt;Input-&amp;gt;post('value'))&lt;br /&gt;
	{&lt;br /&gt;
		$objProducts = $this-&amp;gt;Database-&amp;gt;prepare('	SELECT id,name &lt;br /&gt;
												FROM tl_product &lt;br /&gt;
												WHERE name LIKE ?&lt;br /&gt;
												ORDER BY name')&lt;br /&gt;
					-&amp;gt;execute('%'.$this-&amp;gt;Input-&amp;gt;post('value').'%');&lt;br /&gt;
	}&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
		$objProducts = $this-&amp;gt;Database-&amp;gt;prepare('	SELECT id,name&lt;br /&gt;
													FROM tl_product&lt;br /&gt;
													ORDER BY name')&lt;br /&gt;
					-&amp;gt;execute();&lt;br /&gt;
	}&lt;br /&gt;
	$prods = array();&lt;br /&gt;
	while($objProducts-&amp;gt;next())	$prods[$objProducts-&amp;gt;id] = $objProducts-&amp;gt;name;&lt;br /&gt;
	return $prods;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/AutocompleterTextfield</id>
		<title>AutocompleterTextfield</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/AutocompleterTextfield"/>
				<updated>2011-10-28T13:51:41Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Extensions]]&lt;br /&gt;
{{ExtInfo&lt;br /&gt;
| DevSite=http://www.4wardmedia.de.de&lt;br /&gt;
| ExtVersion=1.0.0&lt;br /&gt;
| Version=2.10.x&lt;br /&gt;
| ERLink=http://www.contao.org/erweiterungsliste/view/autocompleterTextfield.html&lt;br /&gt;
| TrackerLink=http://contao-forge.org/projects/autocompleterTextfield/issues&lt;br /&gt;
| SVN=http://svn.4wardmedia.de/autocompleterTextfield&lt;br /&gt;
}}&lt;br /&gt;
'''SVN''': http://svn.4wardmedia.de/autocompleterTextfield&lt;br /&gt;
&lt;br /&gt;
[[Datei:AutocompleterTextfield.png]]&lt;br /&gt;
&lt;br /&gt;
Autocompleting für ein Textfeld anhand von ''options'', ''options_callback'' oder ''foreignKey''. \\&lt;br /&gt;
Über die Eval-Option ''storeId'' kann die ID bzw. der Array-Key anstatt der Textwert gespeichert werden. &lt;br /&gt;
&lt;br /&gt;
==Einfaches Textfeld, Vervollständigung anhand der tl_page, Speicherung der tl_page.id==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
'myPage' =&amp;gt; array&lt;br /&gt;
(&lt;br /&gt;
	'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_tmp']['myPage'],&lt;br /&gt;
	'inputType'               =&amp;gt; 'autocompleterTextfield',&lt;br /&gt;
	'foreignKey'		  =&amp;gt; 'tl_page.title',&lt;br /&gt;
	'eval'                    =&amp;gt; array('storeId'=&amp;gt;true)&lt;br /&gt;
),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Einfaches Textfeld, Vervollständigung anhand von ''options''==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
'myPage' =&amp;gt; array&lt;br /&gt;
(&lt;br /&gt;
	'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_tmp']['myPage'],&lt;br /&gt;
	'inputType'               =&amp;gt; 'autocompleterTextfield',&lt;br /&gt;
	'options'		  =&amp;gt; array('Erster Eintrag','Zweiter Eintrag','Dritter Eintrag')&lt;br /&gt;
),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Verwendung im [[MultiColumnWizard]]==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
'einFeld' =&amp;gt; array&lt;br /&gt;
(&lt;br /&gt;
	'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_asd']['einFeld'],&lt;br /&gt;
	'inputType'               =&amp;gt; 'multiColumnWizard',&lt;br /&gt;
	'eval'                    =&amp;gt; array(&lt;br /&gt;
		'columnFields'	=&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'myTxt' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label'         =&amp;gt; array('label','desc'),&lt;br /&gt;
				'inputType'     =&amp;gt; 'autocompleterTextfield',&lt;br /&gt;
				'options'	=&amp;gt; array('Erster Eintrag','Zweiter Eintrag','Dritter Eintrag'),&lt;br /&gt;
				'eval' 		=&amp;gt; array('style'=&amp;gt;'width:180px')&lt;br /&gt;
			),&lt;br /&gt;
			'myTxt2' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label'         =&amp;gt; array('label','desc'),&lt;br /&gt;
				'inputType'     =&amp;gt; 'autocompleterTextfield',&lt;br /&gt;
				'options_callback' =&amp;gt; array('myClass','myCallback'),&lt;br /&gt;
				'eval' 		=&amp;gt; array('style'=&amp;gt;'width:180px')&lt;br /&gt;
			),&lt;br /&gt;
		)&lt;br /&gt;
	),&lt;br /&gt;
),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/AutocompleterTextfield</id>
		<title>AutocompleterTextfield</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/AutocompleterTextfield"/>
				<updated>2011-10-28T13:51:17Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Extensions]]&lt;br /&gt;
{{ExtInfo&lt;br /&gt;
| DevSite=http://www.4wardmedia.de.de&lt;br /&gt;
| ExtVersion=1.0.0&lt;br /&gt;
| Version=2.10.x&lt;br /&gt;
| ERLink=http://www.contao.org/erweiterungsliste/view/autocompleterTextfield.html&lt;br /&gt;
| TrackerLink=http://contao-forge.org/projects/autocompleterTextfield/issues&lt;br /&gt;
| SVN=http://svn.4wardmedia.de/autocompleterTextfield&lt;br /&gt;
}}&lt;br /&gt;
'''SVN''': http://svn.4wardmedia.de/autocompleterTextfield&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:AutocompleterTextfield.png]]&lt;br /&gt;
&lt;br /&gt;
Autocompleting für ein Textfeld anhand von ''options'', ''options_callback'' oder ''foreignKey''. \\&lt;br /&gt;
Über die Eval-Option ''storeId'' kann die ID bzw. der Array-Key anstatt der Textwert gespeichert werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Einfaches Textfeld, Vervollständigung anhand der tl_page, Speicherung der tl_page.id==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
'myPage' =&amp;gt; array&lt;br /&gt;
(&lt;br /&gt;
	'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_tmp']['myPage'],&lt;br /&gt;
	'inputType'               =&amp;gt; 'autocompleterTextfield',&lt;br /&gt;
	'foreignKey'		  =&amp;gt; 'tl_page.title',&lt;br /&gt;
	'eval'                    =&amp;gt; array('storeId'=&amp;gt;true)&lt;br /&gt;
),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Einfaches Textfeld, Vervollständigung anhand von ''options''==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
'myPage' =&amp;gt; array&lt;br /&gt;
(&lt;br /&gt;
	'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_tmp']['myPage'],&lt;br /&gt;
	'inputType'               =&amp;gt; 'autocompleterTextfield',&lt;br /&gt;
	'options'		  =&amp;gt; array('Erster Eintrag','Zweiter Eintrag','Dritter Eintrag')&lt;br /&gt;
),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Verwendung im [[MultiColumnWizard]]==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
'einFeld' =&amp;gt; array&lt;br /&gt;
(&lt;br /&gt;
	'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_asd']['einFeld'],&lt;br /&gt;
	'inputType'               =&amp;gt; 'multiColumnWizard',&lt;br /&gt;
	'eval'                    =&amp;gt; array(&lt;br /&gt;
		'columnFields'	=&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'myTxt' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label'         =&amp;gt; array('label','desc'),&lt;br /&gt;
				'inputType'     =&amp;gt; 'autocompleterTextfield',&lt;br /&gt;
				'options'	=&amp;gt; array('Erster Eintrag','Zweiter Eintrag','Dritter Eintrag'),&lt;br /&gt;
				'eval' 		=&amp;gt; array('style'=&amp;gt;'width:180px')&lt;br /&gt;
			),&lt;br /&gt;
			'myTxt2' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label'         =&amp;gt; array('label','desc'),&lt;br /&gt;
				'inputType'     =&amp;gt; 'autocompleterTextfield',&lt;br /&gt;
				'options_callback' =&amp;gt; array('myClass','myCallback'),&lt;br /&gt;
				'eval' 		=&amp;gt; array('style'=&amp;gt;'width:180px')&lt;br /&gt;
			),&lt;br /&gt;
		)&lt;br /&gt;
	),&lt;br /&gt;
),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/AutocompleterTextfield</id>
		<title>AutocompleterTextfield</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/AutocompleterTextfield"/>
				<updated>2011-10-28T13:50:10Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Extensions]]&lt;br /&gt;
{{ExtInfo&lt;br /&gt;
| DevSite=http://www.4wardmedia.de.de&lt;br /&gt;
| ExtVersion=1.0.0&lt;br /&gt;
| Version=2.10.x&lt;br /&gt;
| ERLink=http://www.contao.org/erweiterungsliste/view/autocompleterTextfield.html&lt;br /&gt;
| TrackerLink=http://contao-forge.org/projects/autocompleterTextfield/issues&lt;br /&gt;
| SVN=http://svn.4wardmedia.de/autocompleterTextfield&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Datei:AutocompleterTextfield.png]]&lt;br /&gt;
&lt;br /&gt;
Autocompleting für ein Textfeld anhand von ''options'', ''options_callback'' oder ''foreignKey''. \\&lt;br /&gt;
Über die Eval-Option ''storeId'' kann die ID bzw. der Array-Key anstatt der Textwert gespeichert werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Einfaches Textfeld, Vervollständigung anhand der tl_page, Speicherung der tl_page.id==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
'myPage' =&amp;gt; array&lt;br /&gt;
(&lt;br /&gt;
	'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_tmp']['myPage'],&lt;br /&gt;
	'inputType'               =&amp;gt; 'autocompleterTextfield',&lt;br /&gt;
	'foreignKey'		  =&amp;gt; 'tl_page.title',&lt;br /&gt;
	'eval'                    =&amp;gt; array('storeId'=&amp;gt;true)&lt;br /&gt;
),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Einfaches Textfeld, Vervollständigung anhand von ''options''==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
'myPage' =&amp;gt; array&lt;br /&gt;
(&lt;br /&gt;
	'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_tmp']['myPage'],&lt;br /&gt;
	'inputType'               =&amp;gt; 'autocompleterTextfield',&lt;br /&gt;
	'options'		  =&amp;gt; array('Erster Eintrag','Zweiter Eintrag','Dritter Eintrag')&lt;br /&gt;
),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Verwendung im [[MultiColumnWizard]]==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
'einFeld' =&amp;gt; array&lt;br /&gt;
(&lt;br /&gt;
	'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_asd']['einFeld'],&lt;br /&gt;
	'inputType'               =&amp;gt; 'multiColumnWizard',&lt;br /&gt;
	'eval'                    =&amp;gt; array(&lt;br /&gt;
		'columnFields'	=&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'myTxt' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label'         =&amp;gt; array('label','desc'),&lt;br /&gt;
				'inputType'     =&amp;gt; 'autocompleterTextfield',&lt;br /&gt;
				'options'	=&amp;gt; array('Erster Eintrag','Zweiter Eintrag','Dritter Eintrag'),&lt;br /&gt;
				'eval' 		=&amp;gt; array('style'=&amp;gt;'width:180px')&lt;br /&gt;
			),&lt;br /&gt;
			'myTxt2' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label'         =&amp;gt; array('label','desc'),&lt;br /&gt;
				'inputType'     =&amp;gt; 'autocompleterTextfield',&lt;br /&gt;
				'options_callback' =&amp;gt; array('myClass','myCallback'),&lt;br /&gt;
				'eval' 		=&amp;gt; array('style'=&amp;gt;'width:180px')&lt;br /&gt;
			),&lt;br /&gt;
		)&lt;br /&gt;
	),&lt;br /&gt;
),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/AutocompleterTextfield</id>
		<title>AutocompleterTextfield</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/AutocompleterTextfield"/>
				<updated>2011-10-28T13:48:52Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: Die Seite wurde neu angelegt: „Category:Extensions {{ExtInfo | DevSite=http://www.4wardmedia.de.de | ExtVersion=1.0.0 | Version=2.10.x | ERLink=http://www.contao.org/erweiterungsliste/view/…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Extensions]]&lt;br /&gt;
{{ExtInfo&lt;br /&gt;
| DevSite=http://www.4wardmedia.de.de&lt;br /&gt;
| ExtVersion=1.0.0&lt;br /&gt;
| Version=2.10.x&lt;br /&gt;
| ERLink=http://www.contao.org/erweiterungsliste/view/autocompleterTextfield.html&lt;br /&gt;
| TrackerLink=http://contao-forge.org/projects/autocompleterTextfield/issues&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
[[Datei:AutocompleterTextfield.png]]&lt;br /&gt;
&lt;br /&gt;
Autocompleting für ein Textfeld anhand von ''options'', ''options_callback'' oder ''foreignKey''. \\&lt;br /&gt;
Über die Eval-Option ''storeId'' kann die ID bzw. der Array-Key anstatt der Textwert gespeichert werden. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Einfaches Textfeld, Vervollständigung anhand der tl_page, Speicherung der tl_page.id==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
'myPage' =&amp;gt; array&lt;br /&gt;
(&lt;br /&gt;
	'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_tmp']['myPage'],&lt;br /&gt;
	'inputType'               =&amp;gt; 'autocompleterTextfield',&lt;br /&gt;
	'foreignKey'		  =&amp;gt; 'tl_page.title',&lt;br /&gt;
	'eval'                    =&amp;gt; array('storeId'=&amp;gt;true)&lt;br /&gt;
),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Einfaches Textfeld, Vervollständigung anhand von ''options''==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
'myPage' =&amp;gt; array&lt;br /&gt;
(&lt;br /&gt;
	'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_tmp']['myPage'],&lt;br /&gt;
	'inputType'               =&amp;gt; 'autocompleterTextfield',&lt;br /&gt;
	'options'		  =&amp;gt; array('Erster Eintrag','Zweiter Eintrag','Dritter Eintrag')&lt;br /&gt;
),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Verwendung im [[MultiColumnWizard]]==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
'einFeld' =&amp;gt; array&lt;br /&gt;
(&lt;br /&gt;
	'label'                   =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_asd']['einFeld'],&lt;br /&gt;
	'inputType'               =&amp;gt; 'multiColumnWizard',&lt;br /&gt;
	'eval'                    =&amp;gt; array(&lt;br /&gt;
		'columnFields'	=&amp;gt; array&lt;br /&gt;
		(&lt;br /&gt;
			'myTxt' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label'         =&amp;gt; array('label','desc'),&lt;br /&gt;
				'inputType'     =&amp;gt; 'autocompleterTextfield',&lt;br /&gt;
				'options'	=&amp;gt; array('Erster Eintrag','Zweiter Eintrag','Dritter Eintrag'),&lt;br /&gt;
				'eval' 		=&amp;gt; array('style'=&amp;gt;'width:180px')&lt;br /&gt;
			),&lt;br /&gt;
			'myTxt2' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label'         =&amp;gt; array('label','desc'),&lt;br /&gt;
				'inputType'     =&amp;gt; 'autocompleterTextfield',&lt;br /&gt;
				'options_callback' =&amp;gt; array('myClass','myCallback'),&lt;br /&gt;
				'eval' 		=&amp;gt; array('style'=&amp;gt;'width:180px')&lt;br /&gt;
			),&lt;br /&gt;
		)&lt;br /&gt;
	),&lt;br /&gt;
),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Datei:AutocompleterTextfield.png</id>
		<title>Datei:AutocompleterTextfield.png</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Datei:AutocompleterTextfield.png"/>
				<updated>2011-10-28T13:47:24Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Futuretable</id>
		<title>Futuretable</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Futuretable"/>
				<updated>2011-09-06T20:51:00Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: /* Funktional */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Wir haben und wollen behalten=&lt;br /&gt;
&lt;br /&gt;
* Übersichtliches einfaches Backend&lt;br /&gt;
* Strukturierte Inhalte&lt;br /&gt;
* Frontend Themes aus Modulen, Layouts usw.&lt;br /&gt;
&lt;br /&gt;
=Wir haben und können eventuell drauf verzichten (zu Gunsten von etwas besserem)=&lt;br /&gt;
&lt;br /&gt;
* Einfaches Caching&lt;br /&gt;
* Einfache Request Klasse&lt;br /&gt;
* Session Handling für Logins etc.&lt;br /&gt;
* Browser Detection&lt;br /&gt;
* Class Loader&lt;br /&gt;
* File-Handling&lt;br /&gt;
* Übersetzungen für statischen Text&lt;br /&gt;
* Validatoren pro Widget&lt;br /&gt;
&lt;br /&gt;
=Ein Muss für die Zukunft=&lt;br /&gt;
&lt;br /&gt;
==Technisch==&lt;br /&gt;
&lt;br /&gt;
* PHP 5.3 Namespaces&lt;br /&gt;
* Database Abstraction Layer (DBAL) - Mögliche Frameworks: Doctrine DBAL&lt;br /&gt;
* Objective-Relational-Mapping (ORM) - Mögliche Frameworks: Doctrine ORM&lt;br /&gt;
* Umfangreiches Caching [Was ist hiermit gemeint? Was den FECache angeht, wäre es super, wenn wir das über die htaccess ziehen könnten, ähnlich wie das bei WP das Supercache Modul mach (backbone)]&lt;br /&gt;
* HTTP Request Handler [Was ist hiermit gemeint? (backbone) Klassen die mit HTTP-Requests umgehen (Toflar); Immer noch net genau genug? Klassen die mit dem derzeitigen Request umgehen? Da hat Symfony die Request/Response Klassen die man auch separat ohne das ganze FW nutzen könnte. Oder klassen die einen HTTP-Request ausführen können? (backbone);]&lt;br /&gt;
* Virtual File System, VFS&lt;br /&gt;
* Access Control List (ACL) (via Permissions) + Role Based (+ multiple Identities, also Trennung von Anmelde- und Benutzerinformationen)&lt;br /&gt;
* Globale Validatoren (damit Widgets, die identisch validieren, den gleichen Validator nutzen)&lt;br /&gt;
* Inhalts-Übersetzungen auch auf DB-Ebene [Würde das nicht auf DB-Ebene zwingen, lieber einen Übersetzungsdatei-Editor (backbone) Das meinte ich nicht, ich meine Datensätze für verschiedene Sprachen editierbar zu machen. Sowas gehört garantiert nicht in ein File ;-) (Toflar); hab mal das konkretisiert in im Stichpunkt (backbone)]&lt;br /&gt;
* Versionierung von Inhalten nicht über separate Tabelle, sondern in die Inhaltstabellen integriert&lt;br /&gt;
* Verbesserte relationale Baumstrukturen&lt;br /&gt;
&lt;br /&gt;
==Funktional==&lt;br /&gt;
&lt;br /&gt;
* Template Engine (Twig, Smarty)&lt;br /&gt;
* Ein neues, richtig geiles Extension Repository&lt;br /&gt;
* Gut Dokumentiert&lt;br /&gt;
* Einfach zu handhaben&lt;br /&gt;
* Auslagern von Standardkomponenten (Nachrichten, Events, Newsletter usw.) in Erweiterungen (die eventuell bei einer Standardinstallation mitgeliefert werden).&lt;br /&gt;
* Besseren Formulargenerator &lt;br /&gt;
** Subpaletten, wie gehabt&lt;br /&gt;
** bessere Widgets mit mehr Javascript&lt;br /&gt;
** Widgets alla MultiTextWizard zur Pflege von Kinddatensätzen, hier ggf. auch Subformulare (dcawizard)&lt;br /&gt;
** Formulare über mehrere Seiten&lt;br /&gt;
** abgekoppelt vom Speicherort&lt;br /&gt;
&lt;br /&gt;
=Nice to have=&lt;br /&gt;
&lt;br /&gt;
* Updatefähig (Contao 2 -&amp;gt; Contao 3) [auch ein Muss, aber wenn die Erweiterungen nicht kompatibel sind, stelle ich mir das schwer vor (Glen) Naja, der Core muss sich ja updaten können und ich denke da geht es vor allem um Content, nicht um Settings oder Dinge von Erweiterungen (Toflar)]&lt;br /&gt;
* Ein neues Backend-Theme, mehr Javascript/Ajax für den User wie z.B. Drag n' Drop etc. Dinge die uns HTML5 bringt - Dinge die nicht dazu erfunden wurden, um links liegen gelassen zu werden! [würde ich als Muss, bezeichnen (backbone)]&lt;br /&gt;
* WebDAV Access auf die Dateiverwaltung&lt;br /&gt;
* Zuordnung von Inhalten/Seiten zu Publication-Sets, welche von einer Publication verwendet werden um für einen bestimmten Zeitraum den Zustand der Seite zu representieren. Also sozusagen, ein integriertes Dev -&amp;gt; Stage -&amp;gt; Live System.&lt;br /&gt;
* Jeder Inhalt, der eine eigene Seite erfordert (Newseinträge), bekommt auch einen Eintrag in der Seitenstruktur, damit die Seitenstruktur die komplette URL-Struktur representiert.&lt;br /&gt;
* INSERT-only Prinzip für Inhalts-/Seiten-Tabellen (und DELETE von alten/ungenutzen Datensätzen)&lt;br /&gt;
* Dualer Datenbank Zugriff, Möglichkeit für 2 verschiedene Datenbankaccounts: Einer der alles außer GRANT darf und einer der nur DML darf. Somit kann sichergestellt werden das DDL nur nach expliziter Erlaubnis des Users möglich ist. (Der Code der DDL ausführen möchte, muss eine Art &amp;quot;Systemcall&amp;quot; durchführen, der checkt, ob der BE-Benutzer überhaupt die Permission für DDL hat, wenn ja wird der Nutzer explizit gefragt. Bei Bestätigung wird die DDL-Query ausgeführt und anschließend mit einem Callback im &amp;quot;Usercode&amp;quot; weitergemacht)&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Backboneit_navigation</id>
		<title>Backboneit navigation</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Backboneit_navigation"/>
				<updated>2011-08-09T14:47:26Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: /* Navigation per Hook erweitern */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Extensions]]&lt;br /&gt;
{{ExtInfo&lt;br /&gt;
| Dev=Oliver Hoff&lt;br /&gt;
| DevSite=http://www.hofff.com/&lt;br /&gt;
| ExtVersion=1.0.0&lt;br /&gt;
| Version=ab 2.9&lt;br /&gt;
| TLVersion=2.7.0 - 2.8.4&lt;br /&gt;
| TrackerLink=http://www.contao-forge.org/projects/backboneitnavigation/issues&lt;br /&gt;
| ERLink=http://www.contao.org/erweiterungsliste/view/backboneit_navigation.10000009.de.html&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= backboneit_navigation =&lt;br /&gt;
&lt;br /&gt;
Erweiterung bestehend aus einer Sammlung von Navigationselementen (vorerst nur ein erweitertes Navigationsmodul).&lt;br /&gt;
&lt;br /&gt;
Anmerkungen zum Bestimmen der Sichtbarkeit einer Seite:&lt;br /&gt;
* Der Veröffentlichungsstatus gilt ausschließlich für eine Seite selbst. Das heißt zum Beispiel, dass eine Navigation durchaus dargestellt wird, selbst wenn die Referenzseite nicht veröffentlicht ist.&lt;br /&gt;
* Der Seitenschutz für bestimmte Mitgliedergruppen vererbt sich auf alle Unterseiten, außer denjenigen die selbst explizit einen Seitenschutz für Mitgliedergruppen definieren und deren Unterseiten.&lt;br /&gt;
* Die Einstellung &amp;quot;Nur Gästen anzeigen&amp;quot; gilt nur für die Seite selbst. Tatsächlich ist die Seite für angemeldete Benutzer auch noch verfügbar, soll nur in keiner Navigation angezeigt werden. (Anders als zum Beispiel Artikel, die nur Gästen angezeigt werden. Diese werden gar nicht mehr gerendert.)&lt;br /&gt;
* &amp;quot;Im Menü verstecken&amp;quot; gilt nur für die Seite selbst.&lt;br /&gt;
&lt;br /&gt;
== Navigationsmenü ==&lt;br /&gt;
&lt;br /&gt;
Ein Multitalent: Es ist alles möglich was mit einem Navigationsmenü oder einer Individuellen Navigation möglich ist, Kombinationen aus beiden und noch einiges mehr. Einfach ausprobieren.&lt;br /&gt;
&lt;br /&gt;
Funktionen:&lt;br /&gt;
* Kompatibel zu den Templates für das Standard-Navigationsmenü (einziger Unterschied ist, das Seiten die CSS-Klasse &amp;quot;submenu&amp;quot; tatsächlich auch nur dann bekommen, wenn dieses Untermenü gerendert wird)&lt;br /&gt;
* Mehrere Referenzseiten (Wurzeln der Navigation)&lt;br /&gt;
* Aktuelle Seite als Referenzseite&lt;br /&gt;
* Startebene wird relativ zu den Referenzseiten berechnet (negative Startebene möglich)&lt;br /&gt;
* Hardlimit flexibel (Anmerkung: Stopebene und Hardlimit beziehen sich relativ zur Startebene &amp;amp;endash; diessollte auch durch die geänderten Labels der Moduleinstellungen hervorgehen.&lt;br /&gt;
* Versteckte und geschützte Seiten anzeigen&lt;br /&gt;
* Als Sitemap verwendbar&lt;br /&gt;
* Optimierte Algorithmen: Zum Beispiel wird pro Navigationsebene nur noch eine Datenbankabfrage durchgeführt, was vorallem bei einer sehr verzweigten Navigation Vorteile bringen sollte.&lt;br /&gt;
* Erweiterbar per Hook&lt;br /&gt;
&lt;br /&gt;
=== Navigation per Hook erweitern ===&lt;br /&gt;
config.php&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
$GLOBALS['TL_HOOKS']['backboneit_navigation_menu'][] = array('MyNavigationHook', 'hook');&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
MyNavigationHook.php&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
class MyNavigationHook {&lt;br /&gt;
&lt;br /&gt;
  // ... singleton dummy code ...&lt;br /&gt;
&lt;br /&gt;
  public function hook($objThis, $arrRoots) {&lt;br /&gt;
    $intParentID = 1; // the ID of the parent node, were your new node should be appended/inserted to.&lt;br /&gt;
&lt;br /&gt;
    if(!isset($objThis-&amp;gt;arrItems[$intParentID])) // test if the parent should be rendered (to avoid my hook, if it is not needed)&lt;br /&gt;
      return;&lt;br /&gt;
&lt;br /&gt;
    $strMyNewNodeID = 'MyNavigationHook' . 1; // to avoid collision do not use plain numbers (reservered for tl_page dataset IDs)&lt;br /&gt;
    // and prefix the ID with something specific to your hook&lt;br /&gt;
&lt;br /&gt;
    $objThis-&amp;gt;varActiveID = $strMyNewNodeID; // set my new node as active navigation item&lt;br /&gt;
&lt;br /&gt;
    $objThis-&amp;gt;arrSubpages[$intParentID][] = $strMyNewNodeID; // append the my new node to the end of $intParentIDs childs&lt;br /&gt;
    $arrRoots[] = $strMyNewNodeID; // additionally add my new node to the end of the first level&lt;br /&gt;
&lt;br /&gt;
    $objThis-&amp;gt;arrItems[$strMyNewNodeID] = array(&lt;br /&gt;
      'class' =&amp;gt; 'myclass',&lt;br /&gt;
      'isTrail' =&amp;gt; true, // whether this node is in the trail path of the active page&lt;br /&gt;
      // ... more rendering information for the navigation template (see class AbstractNavigationMenu for all fields) ...&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
    return $arrRoots; // return the modified first navigation level (not needed if unmodified)&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Beispiel ===&lt;br /&gt;
Folgendes Beispiel fügt einen Level_1 Eintrag und dazu mehrere Level_2 Einträge zum aktuellen Level_0 Eintrag hinzu:&lt;br /&gt;
&lt;br /&gt;
- Level_0&amp;lt;br&amp;gt;&lt;br /&gt;
-- Level_1 (wird eingefügt)&amp;lt;br&amp;gt;&lt;br /&gt;
--- Level_2.0 (wird eingefügt)&amp;lt;br&amp;gt;&lt;br /&gt;
--- Level_2.1 (wird eingefügt)&amp;lt;br&amp;gt;&lt;br /&gt;
--- Level_2.2 (wird eingefügt)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
/**&lt;br /&gt;
 * Helperclass to insert navigation-items&lt;br /&gt;
 * @author psi&lt;br /&gt;
 */&lt;br /&gt;
class Brands_BackboneNavi extends Controller&lt;br /&gt;
{&lt;br /&gt;
	&lt;br /&gt;
	public function hook($objNav, $arrRoots)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;import('Database');&lt;br /&gt;
		&lt;br /&gt;
		// Eine contao-seite enthält ein modul mit &amp;quot;virtuellen&amp;quot; unterseiten&lt;br /&gt;
		// Bsp: http://example.com/module-page/item1.html&lt;br /&gt;
		// Bsp2: http://example.com/module-page/item1/subitem1.html&lt;br /&gt;
		// herrausschneiden von &amp;quot;item1&amp;quot;&lt;br /&gt;
		if(!preg_match(&amp;quot;~^&amp;quot;.preg_quote($GLOBALS['objPage']-&amp;gt;alias,'~').&amp;quot;/([a-z0-9_-]+).*\.html$~i&amp;quot;,$this-&amp;gt;Environment-&amp;gt;request,$erg)) return;&lt;br /&gt;
		&lt;br /&gt;
		// level_1 Eintrag anhand von &amp;quot;item1&amp;quot; einfügen&lt;br /&gt;
		$objDesigner = $this-&amp;gt;Database-&amp;gt;prepare('SELECT id,title,alias FROM tl_brand WHERE alias=? AND published=?')-&amp;gt;execute($erg[1],'1');&lt;br /&gt;
		if(!$objDesigner-&amp;gt;numRows) return;&lt;br /&gt;
		&lt;br /&gt;
		// Seite in den Navigations-Pool hinzufügen&lt;br /&gt;
		$objNav-&amp;gt;arrItems[$objDesigner-&amp;gt;alias.'-'.$objDesigner-&amp;gt;id] = array&lt;br /&gt;
		(&lt;br /&gt;
			'link'	=&amp;gt; $objDesigner-&amp;gt;title,&lt;br /&gt;
			'href'  =&amp;gt; $this-&amp;gt;generateFrontendUrl($GLOBALS['objPage']-&amp;gt;row(),'/'.$objDesigner-&amp;gt;alias),&lt;br /&gt;
			// 'isTrail' =&amp;gt; (preg_match(&amp;quot;~&amp;quot;.preg_quote($objDesigner-&amp;gt;alias,'~').&amp;quot;\.html$~i&amp;quot;,$this-&amp;gt;Environment-&amp;gt;request))&lt;br /&gt;
			'isTrail' =&amp;gt; true // wir zeigen ohnehin immer nur einen Eintrag des level_1 an, deshalb immer true&lt;br /&gt;
		);	&lt;br /&gt;
		&lt;br /&gt;
		// als Unterseite von level_0 zuweisen &lt;br /&gt;
		$objNav-&amp;gt;arrSubpages[$GLOBALS['objPage']-&amp;gt;id][] = $objDesigner-&amp;gt;alias.'-'.$objDesigner-&amp;gt;id;&lt;br /&gt;
		&lt;br /&gt;
		&lt;br /&gt;
		// level_2 Einträge einfügen&lt;br /&gt;
		$objCats = $this-&amp;gt;Database-&amp;gt;prepare('SELECT category,categoryAlias FROM tl_brand_product WHERE pid=? AND published=? GROUP BY category')-&amp;gt;execute($objDesigner-&amp;gt;id,'1');&lt;br /&gt;
		while($objCats-&amp;gt;next())&lt;br /&gt;
		{&lt;br /&gt;
			// Seite in den Navigations-Pool hinzufügen&lt;br /&gt;
			$objNav-&amp;gt;arrItems[$objDesigner-&amp;gt;id.'-'.$objCats-&amp;gt;categoryAlias] = array&lt;br /&gt;
			(&lt;br /&gt;
				'link'	=&amp;gt; $objCats-&amp;gt;category,&lt;br /&gt;
				'href'  =&amp;gt; $this-&amp;gt;generateFrontendUrl($GLOBALS['objPage']-&amp;gt;row(),'/'.$objDesigner-&amp;gt;alias.'/'.$objCats-&amp;gt;categoryAlias),&lt;br /&gt;
				'isTrail' =&amp;gt; (preg_match(&amp;quot;~&amp;quot;.preg_quote($objCats-&amp;gt;categoryAlias,'~').&amp;quot;(/.+|.html)$~i&amp;quot;,$this-&amp;gt;Environment-&amp;gt;request)) &lt;br /&gt;
			);	&lt;br /&gt;
			// Seite als Unterseite des level_1 Eitnrags zuweisen&lt;br /&gt;
			$objNav-&amp;gt;arrSubpages[$objDesigner-&amp;gt;alias.'-'.$objDesigner-&amp;gt;id][] = $objDesigner-&amp;gt;id.'-'.$objCats-&amp;gt;categoryAlias;&lt;br /&gt;
		} &lt;br /&gt;
		&lt;br /&gt;
		return $arrRoots;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Stylepicker4ward</id>
		<title>Stylepicker4ward</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Stylepicker4ward"/>
				<updated>2011-06-29T15:05:08Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Extensions]]&lt;br /&gt;
&lt;br /&gt;
= Stylepicker =&lt;br /&gt;
&lt;br /&gt;
Wizard zur Auswahl von CSS-Klassennamen in Inhaltselementen und anderen Objekten. &amp;lt;br&amp;gt;&lt;br /&gt;
Die verfügbaren Klassennamen müssen zuvor im Theme als Vorlage eingetragen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Sie werden oft zur Designanpssung von einzelnen Elementen genutzt.&lt;br /&gt;
{{ExtInfo&lt;br /&gt;
| Dev=Christoph Wiechert ([[User:psi|psi]])&lt;br /&gt;
| DevSite=http://www.4wardmedia.de&lt;br /&gt;
| ExtVersion=1.0.0&lt;br /&gt;
| Version=2.9.5 - 2.9.10&lt;br /&gt;
| ERLink=http://www.contao.org/erweiterungsliste/view/Stylepicker4ward.de.html&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schrittweise Anleitung ==&lt;br /&gt;
&lt;br /&gt;
Nachdem der Installation aus dem Repository müssen im Theme die Klassennamen-Vorlagen erstellt werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Sie können neben dem Titel zusätzlich einen Beschreibungstext und ein Vorschaubild angeben.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Stylepicker Theme.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Datei:Stylepicker edit.png]]&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Datei:Stylepicker_edit.png</id>
		<title>Datei:Stylepicker edit.png</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Datei:Stylepicker_edit.png"/>
				<updated>2011-06-29T15:05:06Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Datei:Stylepicker_Theme.png</id>
		<title>Datei:Stylepicker Theme.png</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Datei:Stylepicker_Theme.png"/>
				<updated>2011-06-29T15:03:51Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Stylepicker4ward</id>
		<title>Stylepicker4ward</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Stylepicker4ward"/>
				<updated>2011-06-29T15:01:42Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: Die Seite wurde neu angelegt: „Kategorie:Extensions  = Stylepicker =  Wizard zur Auswahl von CSS-Klassennamen in Inhaltselementen und anderen Objekten. &amp;lt;br&amp;gt; Die verfügbaren Klassennamen m…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategorie:Extensions]]&lt;br /&gt;
&lt;br /&gt;
= Stylepicker =&lt;br /&gt;
&lt;br /&gt;
Wizard zur Auswahl von CSS-Klassennamen in Inhaltselementen und anderen Objekten. &amp;lt;br&amp;gt;&lt;br /&gt;
Die verfügbaren Klassennamen müssen zuvor im Theme als Vorlage eingetragen werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Sie werden oft zur Designanpssung von einzelnen Elementen genutzt.&lt;br /&gt;
{{ExtInfo&lt;br /&gt;
| Dev=Christoph Wiechert ([[User:psi|psi]])&lt;br /&gt;
| DevSite=http://www.4wardmedia.de&lt;br /&gt;
| ExtVersion=1.0.0&lt;br /&gt;
| Version=2.9.5 - 2.9.10&lt;br /&gt;
| ERLink=http://www.contao.org/erweiterungsliste/view/Stylepicker4ward.de.html&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Schrittweise Anleitung ==&lt;br /&gt;
&lt;br /&gt;
Nachdem der Installation aus dem Repository müssen im Theme die Klassennamen-Vorlagen erstellt werden. &amp;lt;br&amp;gt;&lt;br /&gt;
Sie können neben dem Titel zusätzlich einen Beschreibungstext und ein Vorschaubild angeben.&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/DCA:_Sortierung_anhand_einer_Kindtabelle</id>
		<title>DCA: Sortierung anhand einer Kindtabelle</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/DCA:_Sortierung_anhand_einer_Kindtabelle"/>
				<updated>2010-12-30T18:16:43Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Dev HOWTOS]]&lt;br /&gt;
[[Category:Dev Snippets]]&lt;br /&gt;
{{AppliesTo|Version=ab 2.9}}&lt;br /&gt;
&lt;br /&gt;
Es gibt die Möglichkeit eine Tabelle anhand von Kinddatensätzen zu sortieren.&lt;br /&gt;
Ich habe dieses Verhalten benötigt, da ich alle Sprachattribute (und damit auch den Title) in einer untergeordnete Tabelle ausgelagert habe.&lt;br /&gt;
&lt;br /&gt;
[[File:DCA_childsorting_schema.png|border|172x90px]]&lt;br /&gt;
&lt;br /&gt;
Um den ListView von '''tl_main''' zur Sortierung nach '''tl_sub.title''' zu bringen kann man ein Subquery als Sortierfeld angeben:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
...&lt;br /&gt;
'sorting' =&amp;gt; array&lt;br /&gt;
(&lt;br /&gt;
	'mode'                    =&amp;gt; 1,&lt;br /&gt;
	'fields'                  =&amp;gt; array('(SELECT title FROM tl_sub WHERE tl_sub.pid = tl_main.id)'),&lt;br /&gt;
	'flag'                    =&amp;gt; 11,&lt;br /&gt;
	'panelLayout'             =&amp;gt; 'filter;search,limit',&lt;br /&gt;
	'disableGrouping'         =&amp;gt; true&lt;br /&gt;
),&lt;br /&gt;
...&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--[[Benutzer:Psi|Psi]]&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/DCA:_Sortierung_anhand_einer_Kindtabelle</id>
		<title>DCA: Sortierung anhand einer Kindtabelle</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/DCA:_Sortierung_anhand_einer_Kindtabelle"/>
				<updated>2010-12-30T18:16:32Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Dev HOWTOS]]&lt;br /&gt;
[[Category:Dev Snippets]]&lt;br /&gt;
{{AppliesTo|Version=ab 2.9}}&lt;br /&gt;
&lt;br /&gt;
Es gibt die Möglichkeit eine Tabelle anhand von Kinddatensätzen zu sortieren.&lt;br /&gt;
Ich habe dieses Verhalten benötigt, da ich alle Sprachattribute (und damit auch den Title) in einer untergeordnete Tabelle ausgelagert habe.&lt;br /&gt;
&lt;br /&gt;
[[File:DCA_childsorting_schema.png|border|172x90px]]&lt;br /&gt;
&lt;br /&gt;
Um den ListView von '''tl_main''' zur Sortierung nach '''tl_sub.title''' zu bringen kann man ein Subquery als Sortierfeld angeben:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
...&lt;br /&gt;
'sorting' =&amp;gt; array&lt;br /&gt;
(&lt;br /&gt;
	'mode'                    =&amp;gt; 1,&lt;br /&gt;
	'fields'                  =&amp;gt; array('(SELECT title FROM tl_sub WHERE tl_sub.pid = tl_main.id)'),&lt;br /&gt;
	'flag'                    =&amp;gt; 11,&lt;br /&gt;
	'panelLayout'             =&amp;gt; 'filter;search,limit',&lt;br /&gt;
	'disableGrouping'         =&amp;gt; true&lt;br /&gt;
),&lt;br /&gt;
...&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
--[[Benutzer:Psi|Psi]]&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/DCA:_Sortierung_anhand_einer_Kindtabelle</id>
		<title>DCA: Sortierung anhand einer Kindtabelle</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/DCA:_Sortierung_anhand_einer_Kindtabelle"/>
				<updated>2010-12-30T18:14:59Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Dev HOWTOS]]&lt;br /&gt;
[[Category:Dev Snippets]]&lt;br /&gt;
{{AppliesTo|Version=ab 2.9}}&lt;br /&gt;
&lt;br /&gt;
Es gibt die Möglichkeit eine Tabelle anhand von Kinddatensätzen zu sortieren. Ich habe diese Verhalten benötigt, da ich alle Sprachattribute (und damit auch den Title) in einer untergeordnete Tabelle ausgelagert habe.&lt;br /&gt;
&lt;br /&gt;
[[File:DCA_childsorting_schema.png|border|172x90px]]&lt;br /&gt;
&lt;br /&gt;
Um den ListView von '''tl_main''' zur Sortierung nach '''tl_sub.title''' zu bringen kann man ein Subquery als Sortierfeld angeben:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
...&lt;br /&gt;
'sorting' =&amp;gt; array&lt;br /&gt;
(&lt;br /&gt;
	'mode'                    =&amp;gt; 1,&lt;br /&gt;
	'fields'                  =&amp;gt; array('(SELECT title FROM tl_sub WHERE tl_sub.pid = tl_main.id)'),&lt;br /&gt;
	'flag'                    =&amp;gt; 11,&lt;br /&gt;
	'panelLayout'             =&amp;gt; 'filter;search,limit',&lt;br /&gt;
	'disableGrouping'         =&amp;gt; true&lt;br /&gt;
),&lt;br /&gt;
...&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/DCA:_Sortierung_anhand_einer_Kindtabelle</id>
		<title>DCA: Sortierung anhand einer Kindtabelle</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/DCA:_Sortierung_anhand_einer_Kindtabelle"/>
				<updated>2010-12-30T18:14:23Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: Die Seite wurde neu angelegt: „=DCA: field mapping &amp;quot;user_id:tl_user.name&amp;quot;= Category:Dev HOWTOS Category:Dev Snippets {{AppliesTo|Version=ab 2.9}}  Es gibt die Möglichkeit eine Tabelle …“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=DCA: field mapping &amp;quot;user_id:tl_user.name&amp;quot;=&lt;br /&gt;
[[Category:Dev HOWTOS]]&lt;br /&gt;
[[Category:Dev Snippets]]&lt;br /&gt;
{{AppliesTo|Version=ab 2.9}}&lt;br /&gt;
&lt;br /&gt;
Es gibt die Möglichkeit eine Tabelle anhand von Kinddatensätzen zu sortieren. Ich habe diese Verhalten benötigt, da ich alle Sprachattribute (und damit auch den Title) in einer untergeordnete Tabelle ausgelagert habe.&lt;br /&gt;
&lt;br /&gt;
[[File:DCA_childsorting_schema.png|border|172x90px]]&lt;br /&gt;
&lt;br /&gt;
Um den ListView von '''tl_main''' zur Sortierung nach '''tl_sub.title''' zu bringen kann man ein Subquery als Sortierfeld angeben:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
...&lt;br /&gt;
'sorting' =&amp;gt; array&lt;br /&gt;
(&lt;br /&gt;
	'mode'                    =&amp;gt; 1,&lt;br /&gt;
	'fields'                  =&amp;gt; array('(SELECT title FROM tl_sub WHERE tl_sub.pid = tl_main.id)'),&lt;br /&gt;
	'flag'                    =&amp;gt; 11,&lt;br /&gt;
	'panelLayout'             =&amp;gt; 'filter;search,limit',&lt;br /&gt;
	'disableGrouping'         =&amp;gt; true&lt;br /&gt;
),&lt;br /&gt;
...&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Datei:DCA_childsorting_schema.png</id>
		<title>Datei:DCA childsorting schema.png</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Datei:DCA_childsorting_schema.png"/>
				<updated>2010-12-30T18:13:46Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: hat eine neue Version von „Datei:DCA childsorting schema.png“ hochgeladen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Datenbankschema Vater-Kindtabelle&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Datei:DCA_childsorting_schema.png</id>
		<title>Datei:DCA childsorting schema.png</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Datei:DCA_childsorting_schema.png"/>
				<updated>2010-12-30T18:05:56Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: hat eine neue Version von „Datei:DCA childsorting schema.png“ hochgeladen&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Datenbankschema Vater-Kindtabelle&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Datei:DCA_childsorting_schema.png</id>
		<title>Datei:DCA childsorting schema.png</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Datei:DCA_childsorting_schema.png"/>
				<updated>2010-12-30T18:04:02Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: Datenbankschema Vater-Kindtabelle&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Datenbankschema Vater-Kindtabelle&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Klasse_Formular</id>
		<title>Klasse Formular</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Klasse_Formular"/>
				<updated>2010-11-23T07:52:17Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Dev HOWTOS]]&lt;br /&gt;
[[Category:Dev Snippets]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SVN:''' http://svn.4wardmedia.de/Formular&lt;br /&gt;
&lt;br /&gt;
'''Im SVN befindet sich auch eine API-Doku.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Die Klasse ''Formular'' erstellt Formulare aus DCA-Arrays:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Die DCA-Definition&lt;br /&gt;
$dca = array&lt;br /&gt;
(&lt;br /&gt;
        'Kontaktdaten' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Ihre Kontaktdaten',&lt;br /&gt;
                'inputType'     =&amp;gt; 'headline'&lt;br /&gt;
        ),&lt;br /&gt;
        'vorname' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Vorname',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'default'       =&amp;gt; 'vorname',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true,'helpmessage'=&amp;gt;'Ihr Vorname')&lt;br /&gt;
        ),&lt;br /&gt;
        'nachname' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Nachname',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'default'       =&amp;gt; 'nachname',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true,'helpmessage'=&amp;gt;'Ihr Nachname')       &lt;br /&gt;
        ),&lt;br /&gt;
        'datum' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Datum',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'default'       =&amp;gt; date('d.m.Y'),&lt;br /&gt;
                'eval'          =&amp;gt; array('datepicker'=&amp;gt;$this-&amp;gt;getDatePickerString(),'cleardefault'=&amp;gt;false)      &lt;br /&gt;
        ),&lt;br /&gt;
&lt;br /&gt;
        'email' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'E-Mail',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true,'rgxp'=&amp;gt;'email')             &lt;br /&gt;
        ),&lt;br /&gt;
        'telefon' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Telefon',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true)             &lt;br /&gt;
        ),&lt;br /&gt;
        'bemerkung' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Bemerkung',&lt;br /&gt;
                'inputType'     =&amp;gt; 'textarea',&lt;br /&gt;
                'eval'          =&amp;gt; array('rte'=&amp;gt;'tinyMCE')&lt;br /&gt;
        ),&lt;br /&gt;
        'submit' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'speichern',&lt;br /&gt;
                'inputType'     =&amp;gt; 'submit'&lt;br /&gt;
        )&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
// Instantiirung mit der FormularID meinKontaktformular&lt;br /&gt;
$frm = new Formular('meinKontaktformular');&lt;br /&gt;
&lt;br /&gt;
// Übergabe des DCA-Arrays&lt;br /&gt;
$frm-&amp;gt;setDCA($dca);     &lt;br /&gt;
&lt;br /&gt;
// Konfiguration&lt;br /&gt;
$frm-&amp;gt;setConfig('generateFormat','&amp;lt;div&amp;gt;%label %field %error &amp;lt;/div&amp;gt;');&lt;br /&gt;
$frm-&amp;gt;setConfig('attributes',array('tableless'=&amp;gt;true));&lt;br /&gt;
&lt;br /&gt;
// Formular wurde abgeschickt und ist korrekt&lt;br /&gt;
if($frm-&amp;gt;isSubmitted() &amp;amp;&amp;amp; $frm-&amp;gt;validate())&lt;br /&gt;
{&lt;br /&gt;
        var_dump($frm-&amp;gt;getData());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Ausgabe des Formulars&lt;br /&gt;
echo $frm-&amp;gt;parse();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Konfiguration=&lt;br /&gt;
&lt;br /&gt;
Es gibt einige Parameter um die Erstellung des Formulars zu beeinflussen.&lt;br /&gt;
Grundlegend muss zwischen '''parse()''' und '''generate()''' unterschieden werden, wobei parse() die Methode generate() impliziert.&lt;br /&gt;
Formular::parse() bettet den Output von generate() in das ''Template'' ein.&lt;br /&gt;
&lt;br /&gt;
==Parameter==&lt;br /&gt;
Die Konfiguration der Klasse Formular kann über '''Formular::setConfig($param,$value)''' geändert werden.&lt;br /&gt;
&lt;br /&gt;
* str '''formTemplate''': Wird das Formular über parse() gerendert wird dieses Template benutzt. Vorgabe: form&lt;br /&gt;
* str '''class''':  Zusätzliche Klassenangabe&lt;br /&gt;
* str '''action''': action-Attribut des &amp;lt;form&amp;gt; Tags. Vorgabe: Environment-&amp;gt;request&lt;br /&gt;
* str '''method''': method-Attribut des &amp;lt;form&amp;gt; Tags. Vorgabe: post&lt;br /&gt;
* str '''generateFormat''': String mit Platzhaltern welche für jedes Widget durch deren Elemente ersetzt werden. Vorgabe &amp;quot;%parse&amp;quot;&lt;br /&gt;
            %parse Widget::parse()&lt;br /&gt;
            %label Widget::generateLabel()&lt;br /&gt;
            %field Widget::generate()&lt;br /&gt;
            %error Widget::getErrorAsHTML()&lt;br /&gt;
            %errorPlain Widget::getErrorAsString()&lt;br /&gt;
* array '''attributes''': Array mit Attributen für die Widget::parse() Methode. Z.B. array('tableless'=&amp;gt;true)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Systemweite Konfiguration==&lt;br /&gt;
Die Formular-Klasse versucht Konfigurationsoptionen aus $GLOBALS['TL_FORM'] zu lesen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_FORM'] = array&lt;br /&gt;
(&lt;br /&gt;
   'class'            =&amp;gt;'myFormular',&lt;br /&gt;
   'generateFormat'   =&amp;gt; '&amp;lt;div class=&amp;quot;formField&amp;quot;&amp;gt;%label %error %field&amp;lt;/div&amp;gt;',&lt;br /&gt;
   'formTemplate'     =&amp;gt; 'myFormularTemplate'&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Interaktion mit Erweiterungen=&lt;br /&gt;
&lt;br /&gt;
==cleardefault==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/cleardefault.de.html Cleardefault] löscht den Standardwert sobald das Textfeld den Fokus bekommt.&lt;br /&gt;
Ist die Erweiterung installiert werden alle Textfelder und Textareas mit diesem Verhalten versehen. Über das @eval@ Array kann es für ein &lt;br /&gt;
einzelnes Feld angepasst werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$dca = array(&lt;br /&gt;
    'datum' =&amp;gt; array&lt;br /&gt;
    (&lt;br /&gt;
        'label'      =&amp;gt; 'Datum',&lt;br /&gt;
        'inputType'  =&amp;gt; 'text',&lt;br /&gt;
        'default'    =&amp;gt; date('d.m.Y'),&lt;br /&gt;
        'eval'       =&amp;gt; array('cleardefault'=&amp;gt;false)      &lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
''' 'cleardefault'=&amp;gt;false''' deaktiviert das Löschen des Standardwertes für das Feld '''datum'''.&lt;br /&gt;
&lt;br /&gt;
==helpmessage==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/helpmessage.de.html Helpmessage] blendet per Javascript Hilfsnachrichten für das Feld ein.&lt;br /&gt;
Die Nachricht wird im '''eval''' Array hinterlegt. Falls über die Klasse '''FormularTL_DCA''' eine Tabelle gerendert wird, werden die Hilfstexte aus den Contao-Sprachdateien der Tabelle übernommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$dca = array(&lt;br /&gt;
    'datum' =&amp;gt; array&lt;br /&gt;
    (&lt;br /&gt;
        'label'      =&amp;gt; 'Datum',&lt;br /&gt;
        'inputType'  =&amp;gt; 'text',&lt;br /&gt;
        'default'    =&amp;gt; date('d.m.Y'),&lt;br /&gt;
        'eval'       =&amp;gt; array('helpmessage'=&amp;gt;'Das Datum muss im Format DD.MM.YYYY sein')&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==formcheck==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/formcheck.de.html Formcheck] validiert ein Formular per Javascript auf der Clientseite.&lt;br /&gt;
Falls die Erweiterung (ab Version 1.3!) installiert ist funktionierte diese ohne weitere Konfiguration.&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Klasse_Formular</id>
		<title>Klasse Formular</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Klasse_Formular"/>
				<updated>2010-11-22T18:25:52Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Module]]&lt;br /&gt;
{{stub}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SVN:''' http://svn.4wardmedia.de/Formular&lt;br /&gt;
&lt;br /&gt;
'''Im SVN befindet sich auch eine API-Doku.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Die Klasse ''Formular'' erstellt Formulare aus DCA-Arrays:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Die DCA-Definition&lt;br /&gt;
$dca = array&lt;br /&gt;
(&lt;br /&gt;
        'Kontaktdaten' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Ihre Kontaktdaten',&lt;br /&gt;
                'inputType'     =&amp;gt; 'headline'&lt;br /&gt;
        ),&lt;br /&gt;
        'vorname' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Vorname',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'default'       =&amp;gt; 'vorname',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true,'helpmessage'=&amp;gt;'Ihr Vorname')&lt;br /&gt;
        ),&lt;br /&gt;
        'nachname' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Nachname',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'default'       =&amp;gt; 'nachname',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true,'helpmessage'=&amp;gt;'Ihr Nachname')       &lt;br /&gt;
        ),&lt;br /&gt;
        'datum' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Datum',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'default'       =&amp;gt; date('d.m.Y'),&lt;br /&gt;
                'eval'          =&amp;gt; array('datepicker'=&amp;gt;$this-&amp;gt;getDatePickerString(),'cleardefault'=&amp;gt;false)      &lt;br /&gt;
        ),&lt;br /&gt;
&lt;br /&gt;
        'email' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'E-Mail',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true,'rgxp'=&amp;gt;'email')             &lt;br /&gt;
        ),&lt;br /&gt;
        'telefon' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Telefon',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true)             &lt;br /&gt;
        ),&lt;br /&gt;
        'bemerkung' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Bemerkung',&lt;br /&gt;
                'inputType'     =&amp;gt; 'textarea',&lt;br /&gt;
                'eval'          =&amp;gt; array('rte'=&amp;gt;'tinyMCE')&lt;br /&gt;
        ),&lt;br /&gt;
        'submit' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'speichern',&lt;br /&gt;
                'inputType'     =&amp;gt; 'submit'&lt;br /&gt;
        )&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
// Instantiirung mit der FormularID meinKontaktformular&lt;br /&gt;
$frm = new Formular('meinKontaktformular');&lt;br /&gt;
&lt;br /&gt;
// Übergabe des DCA-Arrays&lt;br /&gt;
$frm-&amp;gt;setDCA($dca);     &lt;br /&gt;
&lt;br /&gt;
// Konfiguration&lt;br /&gt;
$frm-&amp;gt;setConfig('generateFormat','&amp;lt;div&amp;gt;%label %field %error &amp;lt;/div&amp;gt;');&lt;br /&gt;
$frm-&amp;gt;setConfig('attributes',array('tableless'=&amp;gt;true));&lt;br /&gt;
&lt;br /&gt;
// Formular wurde abgeschickt und ist korrekt&lt;br /&gt;
if($frm-&amp;gt;isSubmitted() &amp;amp;&amp;amp; $frm-&amp;gt;validate())&lt;br /&gt;
{&lt;br /&gt;
        var_dump($frm-&amp;gt;getData());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Ausgabe des Formulars&lt;br /&gt;
echo $frm-&amp;gt;parse();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Konfiguration=&lt;br /&gt;
&lt;br /&gt;
Es gibt einige Parameter um die Erstellung des Formulars zu beeinflussen.&lt;br /&gt;
Grundlegend muss zwischen '''parse()''' und '''generate()''' unterschieden werden, wobei parse() die Methode generate() impliziert.&lt;br /&gt;
Formular::parse() bettet den Output von generate() in das ''Template'' ein.&lt;br /&gt;
&lt;br /&gt;
==Parameter==&lt;br /&gt;
Die Konfiguration der Klasse Formular kann über '''Formular::setConfig($param,$value)''' geändert werden.&lt;br /&gt;
&lt;br /&gt;
* str '''formTemplate''': Wird das Formular über parse() gerendert wird dieses Template benutzt. Vorgabe: form&lt;br /&gt;
* str '''class''':  Zusätzliche Klassenangabe&lt;br /&gt;
* str '''action''': action-Attribut des &amp;lt;form&amp;gt; Tags. Vorgabe: Environment-&amp;gt;request&lt;br /&gt;
* str '''method''': method-Attribut des &amp;lt;form&amp;gt; Tags. Vorgabe: post&lt;br /&gt;
* str '''generateFormat''': String mit Platzhaltern welche für jedes Widget durch deren Elemente ersetzt werden. Vorgabe &amp;quot;%parse&amp;quot;&lt;br /&gt;
            %parse Widget::parse()&lt;br /&gt;
            %label Widget::generateLabel()&lt;br /&gt;
            %field Widget::generate()&lt;br /&gt;
            %error Widget::getErrorAsHTML()&lt;br /&gt;
            %errorPlain Widget::getErrorAsString()&lt;br /&gt;
* array '''attributes''': Array mit Attributen für die Widget::parse() Methode. Z.B. array('tableless'=&amp;gt;true)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Systemweite Konfiguration==&lt;br /&gt;
Die Formular-Klasse versucht Konfigurationsoptionen aus $GLOBALS['TL_FORM'] zu lesen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_FORM'] = array&lt;br /&gt;
(&lt;br /&gt;
   'class'            =&amp;gt;'myFormular',&lt;br /&gt;
   'generateFormat'   =&amp;gt; '&amp;lt;div class=&amp;quot;formField&amp;quot;&amp;gt;%label %error %field&amp;lt;/div&amp;gt;',&lt;br /&gt;
   'formTemplate'     =&amp;gt; 'myFormularTemplate'&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Interaktion mit Erweiterungen=&lt;br /&gt;
&lt;br /&gt;
==cleardefault==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/cleardefault.de.html Cleardefault] löscht den Standardwert sobald das Textfeld den Fokus bekommt.&lt;br /&gt;
Ist die Erweiterung installiert werden alle Textfelder und Textareas mit diesem Verhalten versehen. Über das @eval@ Array kann es für ein &lt;br /&gt;
einzelnes Feld angepasst werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$dca = array(&lt;br /&gt;
    'datum' =&amp;gt; array&lt;br /&gt;
    (&lt;br /&gt;
        'label'      =&amp;gt; 'Datum',&lt;br /&gt;
        'inputType'  =&amp;gt; 'text',&lt;br /&gt;
        'default'    =&amp;gt; date('d.m.Y'),&lt;br /&gt;
        'eval'       =&amp;gt; array('cleardefault'=&amp;gt;false)      &lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
''' 'cleardefault'=&amp;gt;false''' deaktiviert das Löschen des Standardwertes für das Feld '''datum'''.&lt;br /&gt;
&lt;br /&gt;
==helpmessage==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/helpmessage.de.html Helpmessage] blendet per Javascript Hilfsnachrichten für das Feld ein.&lt;br /&gt;
Die Nachricht wird im '''eval''' Array hinterlegt. Falls über die Klasse '''FormularTL_DCA''' eine Tabelle gerendert wird, werden die Hilfstexte aus den Contao-Sprachdateien der Tabelle übernommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$dca = array(&lt;br /&gt;
    'datum' =&amp;gt; array&lt;br /&gt;
    (&lt;br /&gt;
        'label'      =&amp;gt; 'Datum',&lt;br /&gt;
        'inputType'  =&amp;gt; 'text',&lt;br /&gt;
        'default'    =&amp;gt; date('d.m.Y'),&lt;br /&gt;
        'eval'       =&amp;gt; array('helpmessage'=&amp;gt;'Das Datum muss im Format DD.MM.YYYY sein')&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==formcheck==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/formcheck.de.html Formcheck] validiert ein Formular per Javascript auf der Clientseite.&lt;br /&gt;
Falls die Erweiterung (ab Version 1.3!) installiert ist funktionierte diese ohne weitere Konfiguration.&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Klasse_Formular</id>
		<title>Klasse Formular</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Klasse_Formular"/>
				<updated>2010-11-22T18:25:12Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Module]]&lt;br /&gt;
{{stub}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SVN: http://svn.4wardmedia.de/Formular&lt;br /&gt;
Im SVN liegt auch die API-Doku.&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Die Klasse ''Formular'' erstellt Formulare aus DCA-Arrays:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Die DCA-Definition&lt;br /&gt;
$dca = array&lt;br /&gt;
(&lt;br /&gt;
        'Kontaktdaten' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Ihre Kontaktdaten',&lt;br /&gt;
                'inputType'     =&amp;gt; 'headline'&lt;br /&gt;
        ),&lt;br /&gt;
        'vorname' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Vorname',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'default'       =&amp;gt; 'vorname',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true,'helpmessage'=&amp;gt;'Ihr Vorname')&lt;br /&gt;
        ),&lt;br /&gt;
        'nachname' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Nachname',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'default'       =&amp;gt; 'nachname',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true,'helpmessage'=&amp;gt;'Ihr Nachname')       &lt;br /&gt;
        ),&lt;br /&gt;
        'datum' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Datum',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'default'       =&amp;gt; date('d.m.Y'),&lt;br /&gt;
                'eval'          =&amp;gt; array('datepicker'=&amp;gt;$this-&amp;gt;getDatePickerString(),'cleardefault'=&amp;gt;false)      &lt;br /&gt;
        ),&lt;br /&gt;
&lt;br /&gt;
        'email' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'E-Mail',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true,'rgxp'=&amp;gt;'email')             &lt;br /&gt;
        ),&lt;br /&gt;
        'telefon' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Telefon',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true)             &lt;br /&gt;
        ),&lt;br /&gt;
        'bemerkung' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Bemerkung',&lt;br /&gt;
                'inputType'     =&amp;gt; 'textarea',&lt;br /&gt;
                'eval'          =&amp;gt; array('rte'=&amp;gt;'tinyMCE')&lt;br /&gt;
        ),&lt;br /&gt;
        'submit' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'speichern',&lt;br /&gt;
                'inputType'     =&amp;gt; 'submit'&lt;br /&gt;
        )&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
// Instantiirung mit der FormularID meinKontaktformular&lt;br /&gt;
$frm = new Formular('meinKontaktformular');&lt;br /&gt;
&lt;br /&gt;
// Übergabe des DCA-Arrays&lt;br /&gt;
$frm-&amp;gt;setDCA($dca);     &lt;br /&gt;
&lt;br /&gt;
// Konfiguration&lt;br /&gt;
$frm-&amp;gt;setConfig('generateFormat','&amp;lt;div&amp;gt;%label %field %error &amp;lt;/div&amp;gt;');&lt;br /&gt;
$frm-&amp;gt;setConfig('attributes',array('tableless'=&amp;gt;true));&lt;br /&gt;
&lt;br /&gt;
// Formular wurde abgeschickt und ist korrekt&lt;br /&gt;
if($frm-&amp;gt;isSubmitted() &amp;amp;&amp;amp; $frm-&amp;gt;validate())&lt;br /&gt;
{&lt;br /&gt;
        var_dump($frm-&amp;gt;getData());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Ausgabe des Formulars&lt;br /&gt;
echo $frm-&amp;gt;parse();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Konfiguration=&lt;br /&gt;
&lt;br /&gt;
Es gibt einige Parameter um die Erstellung des Formulars zu beeinflussen.&lt;br /&gt;
Grundlegend muss zwischen '''parse()''' und '''generate()''' unterschieden werden, wobei parse() die Methode generate() impliziert.&lt;br /&gt;
Formular::parse() bettet den Output von generate() in das ''Template'' ein.&lt;br /&gt;
&lt;br /&gt;
==Parameter==&lt;br /&gt;
Die Konfiguration der Klasse Formular kann über '''Formular::setConfig($param,$value)''' geändert werden.&lt;br /&gt;
&lt;br /&gt;
* str '''formTemplate''': Wird das Formular über parse() gerendert wird dieses Template benutzt. Vorgabe: form&lt;br /&gt;
* str '''class''':  Zusätzliche Klassenangabe&lt;br /&gt;
* str '''action''': action-Attribut des &amp;lt;form&amp;gt; Tags. Vorgabe: Environment-&amp;gt;request&lt;br /&gt;
* str '''method''': method-Attribut des &amp;lt;form&amp;gt; Tags. Vorgabe: post&lt;br /&gt;
* str '''generateFormat''': String mit Platzhaltern welche für jedes Widget durch deren Elemente ersetzt werden. Vorgabe &amp;quot;%parse&amp;quot;&lt;br /&gt;
            %parse Widget::parse()&lt;br /&gt;
            %label Widget::generateLabel()&lt;br /&gt;
            %field Widget::generate()&lt;br /&gt;
            %error Widget::getErrorAsHTML()&lt;br /&gt;
            %errorPlain Widget::getErrorAsString()&lt;br /&gt;
* array '''attributes''': Array mit Attributen für die Widget::parse() Methode. Z.B. array('tableless'=&amp;gt;true)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Systemweite Konfiguration==&lt;br /&gt;
Die Formular-Klasse versucht Konfigurationsoptionen aus $GLOBALS['TL_FORM'] zu lesen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_FORM'] = array&lt;br /&gt;
(&lt;br /&gt;
   'class'            =&amp;gt;'myFormular',&lt;br /&gt;
   'generateFormat'   =&amp;gt; '&amp;lt;div class=&amp;quot;formField&amp;quot;&amp;gt;%label %error %field&amp;lt;/div&amp;gt;',&lt;br /&gt;
   'formTemplate'     =&amp;gt; 'myFormularTemplate'&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Interaktion mit Erweiterungen=&lt;br /&gt;
&lt;br /&gt;
==cleardefault==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/cleardefault.de.html Cleardefault] löscht den Standardwert sobald das Textfeld den Fokus bekommt.&lt;br /&gt;
Ist die Erweiterung installiert werden alle Textfelder und Textareas mit diesem Verhalten versehen. Über das @eval@ Array kann es für ein &lt;br /&gt;
einzelnes Feld angepasst werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$dca = array(&lt;br /&gt;
    'datum' =&amp;gt; array&lt;br /&gt;
    (&lt;br /&gt;
        'label'      =&amp;gt; 'Datum',&lt;br /&gt;
        'inputType'  =&amp;gt; 'text',&lt;br /&gt;
        'default'    =&amp;gt; date('d.m.Y'),&lt;br /&gt;
        'eval'       =&amp;gt; array('cleardefault'=&amp;gt;false)      &lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
''' 'cleardefault'=&amp;gt;false''' deaktiviert das Löschen des Standardwertes für das Feld '''datum'''.&lt;br /&gt;
&lt;br /&gt;
==helpmessage==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/helpmessage.de.html Helpmessage] blendet per Javascript Hilfsnachrichten für das Feld ein.&lt;br /&gt;
Die Nachricht wird im '''eval''' Array hinterlegt. Falls über die Klasse '''FormularTL_DCA''' eine Tabelle gerendert wird, werden die Hilfstexte aus den Contao-Sprachdateien der Tabelle übernommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$dca = array(&lt;br /&gt;
    'datum' =&amp;gt; array&lt;br /&gt;
    (&lt;br /&gt;
        'label'      =&amp;gt; 'Datum',&lt;br /&gt;
        'inputType'  =&amp;gt; 'text',&lt;br /&gt;
        'default'    =&amp;gt; date('d.m.Y'),&lt;br /&gt;
        'eval'       =&amp;gt; array('helpmessage'=&amp;gt;'Das Datum muss im Format DD.MM.YYYY sein')&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==formcheck==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/formcheck.de.html Formcheck] validiert ein Formular per Javascript auf der Clientseite.&lt;br /&gt;
Falls die Erweiterung (ab Version 1.3!) installiert ist funktionierte diese ohne weitere Konfiguration.&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Klasse_Formular</id>
		<title>Klasse Formular</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Klasse_Formular"/>
				<updated>2010-11-22T18:06:22Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: /* Konfiguration */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Module]]&lt;br /&gt;
{{stub}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Die Klasse ''Formular'' erstellt Formulare aus DCA-Arrays:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Die DCA-Definition&lt;br /&gt;
$dca = array&lt;br /&gt;
(&lt;br /&gt;
        'Kontaktdaten' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Ihre Kontaktdaten',&lt;br /&gt;
                'inputType'     =&amp;gt; 'headline'&lt;br /&gt;
        ),&lt;br /&gt;
        'vorname' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Vorname',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'default'       =&amp;gt; 'vorname',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true,'helpmessage'=&amp;gt;'Ihr Vorname')&lt;br /&gt;
        ),&lt;br /&gt;
        'nachname' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Nachname',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'default'       =&amp;gt; 'nachname',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true,'helpmessage'=&amp;gt;'Ihr Nachname')       &lt;br /&gt;
        ),&lt;br /&gt;
        'datum' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Datum',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'default'       =&amp;gt; date('d.m.Y'),&lt;br /&gt;
                'eval'          =&amp;gt; array('datepicker'=&amp;gt;$this-&amp;gt;getDatePickerString(),'cleardefault'=&amp;gt;false)      &lt;br /&gt;
        ),&lt;br /&gt;
&lt;br /&gt;
        'email' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'E-Mail',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true,'rgxp'=&amp;gt;'email')             &lt;br /&gt;
        ),&lt;br /&gt;
        'telefon' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Telefon',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true)             &lt;br /&gt;
        ),&lt;br /&gt;
        'bemerkung' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Bemerkung',&lt;br /&gt;
                'inputType'     =&amp;gt; 'textarea',&lt;br /&gt;
                'eval'          =&amp;gt; array('rte'=&amp;gt;'tinyMCE')&lt;br /&gt;
        ),&lt;br /&gt;
        'submit' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'speichern',&lt;br /&gt;
                'inputType'     =&amp;gt; 'submit'&lt;br /&gt;
        )&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
// Instantiirung mit der FormularID meinKontaktformular&lt;br /&gt;
$frm = new Formular('meinKontaktformular');&lt;br /&gt;
&lt;br /&gt;
// Übergabe des DCA-Arrays&lt;br /&gt;
$frm-&amp;gt;setDCA($dca);     &lt;br /&gt;
&lt;br /&gt;
// Konfiguration&lt;br /&gt;
$frm-&amp;gt;setConfig('generateFormat','&amp;lt;div&amp;gt;%label %field %error &amp;lt;/div&amp;gt;');&lt;br /&gt;
$frm-&amp;gt;setConfig('attributes',array('tableless'=&amp;gt;true));&lt;br /&gt;
&lt;br /&gt;
// Formular wurde abgeschickt und ist korrekt&lt;br /&gt;
if($frm-&amp;gt;isSubmitted() &amp;amp;&amp;amp; $frm-&amp;gt;validate())&lt;br /&gt;
{&lt;br /&gt;
        var_dump($frm-&amp;gt;getData());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Ausgabe des Formulars&lt;br /&gt;
echo $frm-&amp;gt;parse();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Konfiguration=&lt;br /&gt;
&lt;br /&gt;
Es gibt einige Parameter um die Erstellung des Formulars zu beeinflussen.&lt;br /&gt;
Grundlegend muss zwischen '''parse()''' und '''generate()''' unterschieden werden, wobei parse() die Methode generate() impliziert.&lt;br /&gt;
Formular::parse() bettet den Output von generate() in das ''Template'' ein.&lt;br /&gt;
&lt;br /&gt;
==Parameter==&lt;br /&gt;
Die Konfiguration der Klasse Formular kann über '''Formular::setConfig($param,$value)''' geändert werden.&lt;br /&gt;
&lt;br /&gt;
* str '''formTemplate''': Wird das Formular über parse() gerendert wird dieses Template benutzt. Vorgabe: form&lt;br /&gt;
* str '''class''':  Zusätzliche Klassenangabe&lt;br /&gt;
* str '''action''': action-Attribut des &amp;lt;form&amp;gt; Tags. Vorgabe: Environment-&amp;gt;request&lt;br /&gt;
* str '''method''': method-Attribut des &amp;lt;form&amp;gt; Tags. Vorgabe: post&lt;br /&gt;
* str '''generateFormat''': String mit Platzhaltern welche für jedes Widget durch deren Elemente ersetzt werden. Vorgabe &amp;quot;%parse&amp;quot;&lt;br /&gt;
            %parse Widget::parse()&lt;br /&gt;
            %label Widget::generateLabel()&lt;br /&gt;
            %field Widget::generate()&lt;br /&gt;
            %error Widget::getErrorAsHTML()&lt;br /&gt;
            %errorPlain Widget::getErrorAsString()&lt;br /&gt;
* array '''attributes''': Array mit Attributen für die Widget::parse() Methode. Z.B. array('tableless'=&amp;gt;true)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Systemweite Konfiguration==&lt;br /&gt;
Die Formular-Klasse versucht Konfigurationsoptionen aus $GLOBALS['TL_FORM'] zu lesen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_FORM'] = array&lt;br /&gt;
(&lt;br /&gt;
   'class'            =&amp;gt;'myFormular',&lt;br /&gt;
   'generateFormat'   =&amp;gt; '&amp;lt;div class=&amp;quot;formField&amp;quot;&amp;gt;%label %error %field&amp;lt;/div&amp;gt;',&lt;br /&gt;
   'formTemplate'     =&amp;gt; 'myFormularTemplate'&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Interaktion mit Erweiterungen=&lt;br /&gt;
&lt;br /&gt;
==cleardefault==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/cleardefault.de.html Cleardefault] löscht den Standardwert sobald das Textfeld den Fokus bekommt.&lt;br /&gt;
Ist die Erweiterung installiert werden alle Textfelder und Textareas mit diesem Verhalten versehen. Über das @eval@ Array kann es für ein &lt;br /&gt;
einzelnes Feld angepasst werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$dca = array(&lt;br /&gt;
    'datum' =&amp;gt; array&lt;br /&gt;
    (&lt;br /&gt;
        'label'      =&amp;gt; 'Datum',&lt;br /&gt;
        'inputType'  =&amp;gt; 'text',&lt;br /&gt;
        'default'    =&amp;gt; date('d.m.Y'),&lt;br /&gt;
        'eval'       =&amp;gt; array('cleardefault'=&amp;gt;false)      &lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
''' 'cleardefault'=&amp;gt;false''' deaktiviert das Löschen des Standardwertes für das Feld '''datum'''.&lt;br /&gt;
&lt;br /&gt;
==helpmessage==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/helpmessage.de.html Helpmessage] blendet per Javascript Hilfsnachrichten für das Feld ein.&lt;br /&gt;
Die Nachricht wird im '''eval''' Array hinterlegt. Falls über die Klasse '''FormularTL_DCA''' eine Tabelle gerendert wird, werden die Hilfstexte aus den Contao-Sprachdateien der Tabelle übernommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$dca = array(&lt;br /&gt;
    'datum' =&amp;gt; array&lt;br /&gt;
    (&lt;br /&gt;
        'label'      =&amp;gt; 'Datum',&lt;br /&gt;
        'inputType'  =&amp;gt; 'text',&lt;br /&gt;
        'default'    =&amp;gt; date('d.m.Y'),&lt;br /&gt;
        'eval'       =&amp;gt; array('helpmessage'=&amp;gt;'Das Datum muss im Format DD.MM.YYYY sein')&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==formcheck==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/formcheck.de.html Formcheck] validiert ein Formular per Javascript auf der Clientseite.&lt;br /&gt;
Falls die Erweiterung (ab Version 1.3!) installiert ist funktionierte diese ohne weitere Konfiguration.&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Klasse_Formular</id>
		<title>Klasse Formular</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Klasse_Formular"/>
				<updated>2010-11-22T17:45:44Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: /* Funktionsweise und Methoden */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Module]]&lt;br /&gt;
{{stub}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Beispiel =&lt;br /&gt;
&lt;br /&gt;
Die Klasse ''Formular'' erstellt Formulare aus DCA-Arrays:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Die DCA-Definition&lt;br /&gt;
$dca = array&lt;br /&gt;
(&lt;br /&gt;
        'Kontaktdaten' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Ihre Kontaktdaten',&lt;br /&gt;
                'inputType'     =&amp;gt; 'headline'&lt;br /&gt;
        ),&lt;br /&gt;
        'vorname' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Vorname',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'default'       =&amp;gt; 'vorname',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true,'helpmessage'=&amp;gt;'Ihr Vorname')&lt;br /&gt;
        ),&lt;br /&gt;
        'nachname' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Nachname',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'default'       =&amp;gt; 'nachname',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true,'helpmessage'=&amp;gt;'Ihr Nachname')       &lt;br /&gt;
        ),&lt;br /&gt;
        'datum' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Datum',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'default'       =&amp;gt; date('d.m.Y'),&lt;br /&gt;
                'eval'          =&amp;gt; array('datepicker'=&amp;gt;$this-&amp;gt;getDatePickerString(),'cleardefault'=&amp;gt;false)      &lt;br /&gt;
        ),&lt;br /&gt;
&lt;br /&gt;
        'email' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'E-Mail',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true,'rgxp'=&amp;gt;'email')             &lt;br /&gt;
        ),&lt;br /&gt;
        'telefon' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Telefon',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true)             &lt;br /&gt;
        ),&lt;br /&gt;
        'bemerkung' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Bemerkung',&lt;br /&gt;
                'inputType'     =&amp;gt; 'textarea',&lt;br /&gt;
                'eval'          =&amp;gt; array('rte'=&amp;gt;'tinyMCE')&lt;br /&gt;
        ),&lt;br /&gt;
        'submit' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'speichern',&lt;br /&gt;
                'inputType'     =&amp;gt; 'submit'&lt;br /&gt;
        )&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
// Instantiirung mit der FormularID meinKontaktformular&lt;br /&gt;
$frm = new Formular('meinKontaktformular');&lt;br /&gt;
&lt;br /&gt;
// Übergabe des DCA-Arrays&lt;br /&gt;
$frm-&amp;gt;setDCA($dca);     &lt;br /&gt;
&lt;br /&gt;
// Konfiguration&lt;br /&gt;
$frm-&amp;gt;setConfig('generateFormat','&amp;lt;div&amp;gt;%label %field %error &amp;lt;/div&amp;gt;');&lt;br /&gt;
$frm-&amp;gt;setConfig('attributes',array('tableless'=&amp;gt;true));&lt;br /&gt;
&lt;br /&gt;
// Formular wurde abgeschickt und ist korrekt&lt;br /&gt;
if($frm-&amp;gt;isSubmitted() &amp;amp;&amp;amp; $frm-&amp;gt;validate())&lt;br /&gt;
{&lt;br /&gt;
        var_dump($frm-&amp;gt;getData());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Ausgabe des Formulars&lt;br /&gt;
echo $frm-&amp;gt;parse();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Konfiguration=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Interaktion mit Erweiterungen=&lt;br /&gt;
&lt;br /&gt;
==cleardefault==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/cleardefault.de.html Cleardefault] löscht den Standardwert sobald das Textfeld den Fokus bekommt.&lt;br /&gt;
Ist die Erweiterung installiert werden alle Textfelder und Textareas mit diesem Verhalten versehen. Über das @eval@ Array kann es für ein &lt;br /&gt;
einzelnes Feld angepasst werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$dca = array(&lt;br /&gt;
    'datum' =&amp;gt; array&lt;br /&gt;
    (&lt;br /&gt;
        'label'      =&amp;gt; 'Datum',&lt;br /&gt;
        'inputType'  =&amp;gt; 'text',&lt;br /&gt;
        'default'    =&amp;gt; date('d.m.Y'),&lt;br /&gt;
        'eval'       =&amp;gt; array('cleardefault'=&amp;gt;false)      &lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
''' 'cleardefault'=&amp;gt;false''' deaktiviert das Löschen des Standardwertes für das Feld '''datum'''.&lt;br /&gt;
&lt;br /&gt;
==helpmessage==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/helpmessage.de.html Helpmessage] blendet per Javascript Hilfsnachrichten für das Feld ein.&lt;br /&gt;
Die Nachricht wird im '''eval''' Array hinterlegt. Falls über die Klasse '''FormularTL_DCA''' eine Tabelle gerendert wird, werden die Hilfstexte aus den Contao-Sprachdateien der Tabelle übernommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$dca = array(&lt;br /&gt;
    'datum' =&amp;gt; array&lt;br /&gt;
    (&lt;br /&gt;
        'label'      =&amp;gt; 'Datum',&lt;br /&gt;
        'inputType'  =&amp;gt; 'text',&lt;br /&gt;
        'default'    =&amp;gt; date('d.m.Y'),&lt;br /&gt;
        'eval'       =&amp;gt; array('helpmessage'=&amp;gt;'Das Datum muss im Format DD.MM.YYYY sein')&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==formcheck==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/formcheck.de.html Formcheck] validiert ein Formular per Javascript auf der Clientseite.&lt;br /&gt;
Falls die Erweiterung (ab Version 1.3!) installiert ist funktionierte diese ohne weitere Konfiguration.&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Klasse_Formular</id>
		<title>Klasse Formular</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Klasse_Formular"/>
				<updated>2010-11-22T17:45:15Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: /* Interaktion mit Erweiterungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Module]]&lt;br /&gt;
{{stub}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Funktionsweise und Methoden =&lt;br /&gt;
&lt;br /&gt;
Die Klasse ''Formular'' erstellt Formulare aus DCA-Arrays:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
// Die DCA-Definition&lt;br /&gt;
$dca = array&lt;br /&gt;
(&lt;br /&gt;
        'Kontaktdaten' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Ihre Kontaktdaten',&lt;br /&gt;
                'inputType'     =&amp;gt; 'headline'&lt;br /&gt;
        ),&lt;br /&gt;
        'vorname' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Vorname',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'default'       =&amp;gt; 'vorname',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true,'helpmessage'=&amp;gt;'Ihr Vorname')&lt;br /&gt;
        ),&lt;br /&gt;
        'nachname' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Nachname',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'default'       =&amp;gt; 'nachname',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true,'helpmessage'=&amp;gt;'Ihr Nachname')       &lt;br /&gt;
        ),&lt;br /&gt;
        'datum' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Datum',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'default'       =&amp;gt; date('d.m.Y'),&lt;br /&gt;
                'eval'          =&amp;gt; array('datepicker'=&amp;gt;$this-&amp;gt;getDatePickerString(),'cleardefault'=&amp;gt;false)      &lt;br /&gt;
        ),&lt;br /&gt;
&lt;br /&gt;
        'email' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'E-Mail',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true,'rgxp'=&amp;gt;'email')             &lt;br /&gt;
        ),&lt;br /&gt;
        'telefon' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Telefon',&lt;br /&gt;
                'inputType'     =&amp;gt; 'text',&lt;br /&gt;
                'eval'          =&amp;gt; array('mandatory'=&amp;gt;true)             &lt;br /&gt;
        ),&lt;br /&gt;
        'bemerkung' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'Bemerkung',&lt;br /&gt;
                'inputType'     =&amp;gt; 'textarea',&lt;br /&gt;
                'eval'          =&amp;gt; array('rte'=&amp;gt;'tinyMCE')&lt;br /&gt;
        ),&lt;br /&gt;
        'submit' =&amp;gt; array&lt;br /&gt;
        (&lt;br /&gt;
                'label'         =&amp;gt; 'speichern',&lt;br /&gt;
                'inputType'     =&amp;gt; 'submit'&lt;br /&gt;
        )&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
// Instantiirung mit der FormularID meinKontaktformular&lt;br /&gt;
$frm = new Formular('meinKontaktformular');&lt;br /&gt;
&lt;br /&gt;
// Übergabe des DCA-Arrays&lt;br /&gt;
$frm-&amp;gt;setDCA($dca);     &lt;br /&gt;
&lt;br /&gt;
// Konfiguration&lt;br /&gt;
$frm-&amp;gt;setConfig('generateFormat','&amp;lt;div&amp;gt;%label %field %error &amp;lt;/div&amp;gt;');&lt;br /&gt;
$frm-&amp;gt;setConfig('attributes',array('tableless'=&amp;gt;true));&lt;br /&gt;
&lt;br /&gt;
// Formular wurde abgeschickt und ist korrekt&lt;br /&gt;
if($frm-&amp;gt;isSubmitted() &amp;amp;&amp;amp; $frm-&amp;gt;validate())&lt;br /&gt;
{&lt;br /&gt;
        var_dump($frm-&amp;gt;getData());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Ausgabe des Formulars&lt;br /&gt;
echo $frm-&amp;gt;parse();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Konfiguration=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Interaktion mit Erweiterungen=&lt;br /&gt;
&lt;br /&gt;
==cleardefault==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/cleardefault.de.html Cleardefault] löscht den Standardwert sobald das Textfeld den Fokus bekommt.&lt;br /&gt;
Ist die Erweiterung installiert werden alle Textfelder und Textareas mit diesem Verhalten versehen. Über das @eval@ Array kann es für ein &lt;br /&gt;
einzelnes Feld angepasst werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$dca = array(&lt;br /&gt;
    'datum' =&amp;gt; array&lt;br /&gt;
    (&lt;br /&gt;
        'label'      =&amp;gt; 'Datum',&lt;br /&gt;
        'inputType'  =&amp;gt; 'text',&lt;br /&gt;
        'default'    =&amp;gt; date('d.m.Y'),&lt;br /&gt;
        'eval'       =&amp;gt; array('cleardefault'=&amp;gt;false)      &lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
''' 'cleardefault'=&amp;gt;false''' deaktiviert das Löschen des Standardwertes für das Feld '''datum'''.&lt;br /&gt;
&lt;br /&gt;
==helpmessage==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/helpmessage.de.html Helpmessage] blendet per Javascript Hilfsnachrichten für das Feld ein.&lt;br /&gt;
Die Nachricht wird im '''eval''' Array hinterlegt. Falls über die Klasse '''FormularTL_DCA''' eine Tabelle gerendert wird, werden die Hilfstexte aus den Contao-Sprachdateien der Tabelle übernommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$dca = array(&lt;br /&gt;
    'datum' =&amp;gt; array&lt;br /&gt;
    (&lt;br /&gt;
        'label'      =&amp;gt; 'Datum',&lt;br /&gt;
        'inputType'  =&amp;gt; 'text',&lt;br /&gt;
        'default'    =&amp;gt; date('d.m.Y'),&lt;br /&gt;
        'eval'       =&amp;gt; array('helpmessage'=&amp;gt;'Das Datum muss im Format DD.MM.YYYY sein')&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==formcheck==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/formcheck.de.html Formcheck] validiert ein Formular per Javascript auf der Clientseite.&lt;br /&gt;
Falls die Erweiterung (ab Version 1.3!) installiert ist funktionierte diese ohne weitere Konfiguration.&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Klasse_Formular</id>
		<title>Klasse Formular</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Klasse_Formular"/>
				<updated>2010-11-22T17:37:29Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: /* helpmessage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Module]]&lt;br /&gt;
{{stub}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Interaktion mit Erweiterungen=&lt;br /&gt;
&lt;br /&gt;
==cleardefault==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/cleardefault.de.html Cleardefault] löscht den Standardwert sobald das Textfeld den Fokus bekommt.&lt;br /&gt;
Ist die Erweiterung installiert werden alle Textfelder und Textareas mit diesem Verhalten versehen. Über das @eval@ Array kann es für ein &lt;br /&gt;
einzelnes Feld angepasst werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$dca = array(&lt;br /&gt;
    'datum' =&amp;gt; array&lt;br /&gt;
    (&lt;br /&gt;
        'label'      =&amp;gt; 'Datum',&lt;br /&gt;
        'inputType'  =&amp;gt; 'text',&lt;br /&gt;
        'default'    =&amp;gt; date('d.m.Y'),&lt;br /&gt;
        'eval'       =&amp;gt; array('cleardefault'=&amp;gt;false)      &lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
''' 'cleardefault'=&amp;gt;false''' deaktiviert das Löschen des Standardwertes für das Feld '''datum'''.&lt;br /&gt;
&lt;br /&gt;
==helpmessage==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/helpmessage.de.html Helpmessage] blendet per Javascript Hilfsnachrichten für das Feld ein.&lt;br /&gt;
Die Nachricht wird im '''eval''' Array hinterlegt. Falls über die Klasse '''FormularTL_DCA''' eine Tabelle gerendert wird, werden die Hilfstexte aus den Contao-Sprachdateien der Tabelle übernommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$dca = array(&lt;br /&gt;
    'datum' =&amp;gt; array&lt;br /&gt;
    (&lt;br /&gt;
        'label'      =&amp;gt; 'Datum',&lt;br /&gt;
        'inputType'  =&amp;gt; 'text',&lt;br /&gt;
        'default'    =&amp;gt; date('d.m.Y'),&lt;br /&gt;
        'eval'       =&amp;gt; array('helpmessage'=&amp;gt;'Das Datum muss im Format DD.MM.YYYY sein')&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==formcheck==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/formcheck.de.html Formcheck] validiert ein Formular per Javascript auf der Clientseite.&lt;br /&gt;
Falls die Erweiterung (ab Version 1.3!) installiert ist funktionierte diese ohne weitere Konfiguration.&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Klasse_Formular</id>
		<title>Klasse Formular</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Klasse_Formular"/>
				<updated>2010-11-22T17:31:57Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: /* cleardefault */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Module]]&lt;br /&gt;
{{stub}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Interaktion mit Erweiterungen=&lt;br /&gt;
&lt;br /&gt;
==cleardefault==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/cleardefault.de.html Cleardefault] löscht den Standardwert sobald das Textfeld den Fokus bekommt.&lt;br /&gt;
Ist die Erweiterung installiert werden alle Textfelder und Textareas mit diesem Verhalten versehen. Über das @eval@ Array kann es für ein &lt;br /&gt;
einzelnes Feld angepasst werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$dca = array(&lt;br /&gt;
    'datum' =&amp;gt; array&lt;br /&gt;
    (&lt;br /&gt;
        'label'      =&amp;gt; 'Datum',&lt;br /&gt;
        'inputType'  =&amp;gt; 'text',&lt;br /&gt;
        'default'    =&amp;gt; date('d.m.Y'),&lt;br /&gt;
        'eval'       =&amp;gt; array('cleardefault'=&amp;gt;false)      &lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
''' 'cleardefault'=&amp;gt;false''' deaktiviert das Löschen des Standardwertes für das Feld '''datum'''.&lt;br /&gt;
&lt;br /&gt;
==helpmessage==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/helpmessage.de.html Helpmessage] blendet per Javascript Hilfsnachrichten für das Feld ein.&lt;br /&gt;
Die Nachricht wird im '''eval''' Array hinterlegt. Falls über die Klasse '''FormularTL_DCA''' eine Tabelle gerendert wird, werden die Hilfstexte aus den Contao-Sprachdateien der Tabelle übernommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$dca = array(&lt;br /&gt;
    'datum' =&amp;gt; array&lt;br /&gt;
    (&lt;br /&gt;
        'label'      =&amp;gt; 'Datum',&lt;br /&gt;
        'inputType'  =&amp;gt; 'text',&lt;br /&gt;
        'default'    =&amp;gt; date('d.m.Y'),&lt;br /&gt;
        'eval'       =&amp;gt; array('helpmessage'=&amp;gt;'Das Datum muss im Format DD.MM.YYYY sein')&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Klasse_Formular</id>
		<title>Klasse Formular</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Klasse_Formular"/>
				<updated>2010-11-22T17:31:01Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: /* helpmessage */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Module]]&lt;br /&gt;
{{stub}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Interaktion mit Erweiterungen=&lt;br /&gt;
&lt;br /&gt;
==cleardefault==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/cleardefault.de.html Cleardefault] löscht den Standardwert sobald das Textfeld den Fokus bekommt.&lt;br /&gt;
Ist die Erweiterung installiert werden alle Textfelder und Textareas mit diesem Verhalten versehen. Über das @eval@ Array kann es für ein &lt;br /&gt;
einzelnes Feld angepasst werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$dca = array(&lt;br /&gt;
    'datum' =&amp;gt; array&lt;br /&gt;
    (&lt;br /&gt;
        'label'      =&amp;gt; 'Datum',&lt;br /&gt;
        'inputType'  =&amp;gt; 'text',&lt;br /&gt;
        'default'    =&amp;gt; date('d.m.Y'),&lt;br /&gt;
        'eval'       =&amp;gt; array('cleardefault'=&amp;gt;false)      &lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
''' 'cleardefault'=&amp;gt;false''' deaktiviert das Löschen des Standardwertes für das Feld '''datum'''.&lt;br /&gt;
&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
==helpmessage==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/helpmessage.de.html Helpmessage] blendet per Javascript Hilfsnachrichten für das Feld ein.&lt;br /&gt;
Die Nachricht wird im '''eval''' Array hinterlegt. Falls über die Klasse '''FormularTL_DCA''' eine Tabelle gerendert wird, werden die Hilfstexte aus den Contao-Sprachdateien der Tabelle übernommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$dca = array(&lt;br /&gt;
    'datum' =&amp;gt; array&lt;br /&gt;
    (&lt;br /&gt;
        'label'      =&amp;gt; 'Datum',&lt;br /&gt;
        'inputType'  =&amp;gt; 'text',&lt;br /&gt;
        'default'    =&amp;gt; date('d.m.Y'),&lt;br /&gt;
        'eval'       =&amp;gt; array('helpmessage'=&amp;gt;'Das Datum muss im Format DD.MM.YYYY sein')&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Klasse_Formular</id>
		<title>Klasse Formular</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Klasse_Formular"/>
				<updated>2010-11-22T17:29:26Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: Die Seite wurde neu angelegt: „Category:Module {{stub}}   =Interaktion mit Erweiterungen=  ==cleardefault==  [http://www.contao.org/erweiterungsliste/view/cleardefault.de.html Cleardefault]…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Module]]&lt;br /&gt;
{{stub}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Interaktion mit Erweiterungen=&lt;br /&gt;
&lt;br /&gt;
==cleardefault==&lt;br /&gt;
&lt;br /&gt;
[http://www.contao.org/erweiterungsliste/view/cleardefault.de.html Cleardefault] löscht den Standardwert sobald das Textfeld den Fokus bekommt.&lt;br /&gt;
Ist die Erweiterung installiert werden alle Textfelder und Textareas mit diesem Verhalten versehen. Über das @eval@ Array kann es für ein &lt;br /&gt;
einzelnes Feld angepasst werden:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$dca = array(&lt;br /&gt;
    'datum' =&amp;gt; array&lt;br /&gt;
    (&lt;br /&gt;
        'label'      =&amp;gt; 'Datum',&lt;br /&gt;
        'inputType'  =&amp;gt; 'text',&lt;br /&gt;
        'default'    =&amp;gt; date('d.m.Y'),&lt;br /&gt;
        'eval'       =&amp;gt; array('cleardefault'=&amp;gt;false)      &lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
''' 'cleardefault'=&amp;gt;false''' deaktiviert das Löschen des Standardwertes für das Feld '''datum'''.&lt;br /&gt;
&lt;br /&gt;
-&lt;br /&gt;
&lt;br /&gt;
==helpmessage==&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Helpmessage&amp;quot;:http://www.contao.org/erweiterungsliste/view/helpmessage.de.html blender per Javascript Hilfsnachrichten für das Feld ein.&lt;br /&gt;
Die Nachricht wird im @eval@ Array hinterlegt. Falls über die Klasse @FormularTL_DCA@ eine Tabelle gerendert wird, werden die Hilfstexte aus den&lt;br /&gt;
Contao-Sprachdateien der Tabelle übernommen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;code class=&amp;quot;ruby&amp;quot;&amp;gt;&lt;br /&gt;
$dca = array(&lt;br /&gt;
    'datum' =&amp;gt; array&lt;br /&gt;
    (&lt;br /&gt;
        'label'      =&amp;gt; 'Datum',&lt;br /&gt;
        'inputType'  =&amp;gt; 'text',&lt;br /&gt;
        'default'    =&amp;gt; date('d.m.Y'),&lt;br /&gt;
        'eval'       =&amp;gt; array('helpmessage'=&amp;gt;'Das Datum muss im Format DD.MM.YYYY sein')&lt;br /&gt;
    )&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Xampp_Multidomain</id>
		<title>Xampp Multidomain</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Xampp_Multidomain"/>
				<updated>2010-06-24T16:56:01Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Admin_HOWTOS]]&lt;br /&gt;
[[Category:Installation_und_Updates]]&lt;br /&gt;
[[Category:Sonstiges]]&lt;br /&gt;
Dieses Tutorial beschreibt die Einrichtung einer lokalen Entwicklungsumgebung mit XAMPP für mehrere parallele oder mehrsprachige Contao Installationen.&lt;br /&gt;
&lt;br /&gt;
=Einrichtung=&lt;br /&gt;
Bei dieser Anleitung wird mit einem portablen [http://www.apachefriends.org/de/xampp.html XAMPP] Zip-Paket in Windows gearbeitet (aktuelle Version: 1.7.3). XAMPP steht für Apache, MySQL, PHP und Pearl und stellt somit ein vorkonfiguriertes Webserver-Paket bereit. Neben den eigentlichen Servern bringt XAMPP auch ein paar nette Konfigurationstools wie den PhpMyAdmin oder einen Mailserver mit. Die Pakete gibt es für Windows, Linux sowie für den Mac.&lt;br /&gt;
&lt;br /&gt;
Das Zip-Paket wird in C:\webdev entpackt, was auch ausdrücklich empfohlen wird. Gerade bei Verzeichnissen mit Leer- oder Sonderzeichen (z. B. C:\Program Files\xampp) könnte es später zu Problemen kommen. Nach dem Entpacken ruft man die Datei ''C:\webdev\xampp\setup_xampp.bat'', welche die Konfiguration von XAMPP übernimmt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;200&amp;quot; heights=&amp;quot;300&amp;quot;caption=&amp;quot;XAMPP Setup Script&amp;quot;&amp;gt;&lt;br /&gt;
  Datei:xampp-setup-1.png|Setupscript Screen 1&lt;br /&gt;
  Datei:xampp-setup-2.png|Setupscript Screen 2&lt;br /&gt;
  Datei:xampp-setup-3.png|Setupscript Screen 3&lt;br /&gt;
  Datei:xampp-setup-4.png|Setupscript Screen 4&lt;br /&gt;
  Datei:xampp-setup-5.png|Setupscript Screen 5&lt;br /&gt;
  Datei:xampp-setup-6.png|Setupscript Screen 6&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nach erfolgter Konfiguration wird das Setup-Script mit Eingabe eines ''x'' beendet. &lt;br /&gt;
&lt;br /&gt;
Anschließend ruft man die Datei ''C:\webdev\xampp\xampp-contol.exe'' auf und startet die Module ''Apache'', ''MySQL'' und ''Mercury''.&lt;br /&gt;
&lt;br /&gt;
[[Datei:xampp-controlpanel.png|Controlpanel]]&lt;br /&gt;
&lt;br /&gt;
Wenn alle Module gestartet sind, wird dieser Status im Control Panel angezeigt.&lt;br /&gt;
&lt;br /&gt;
[[Datei:xampp-controlpanelstarted.png|Controlpanel mit gestarteten Modulen]]&lt;br /&gt;
&lt;br /&gt;
Ruft man jetzt die Adresse ''&amp;lt;nowiki&amp;gt;http://localhost&amp;lt;/nowiki&amp;gt;'' im Browser auf, sollte man das XAMPP-Logo mit einer Sprachauswahl sehen. Nach Auswahl der entsprechenden Sprache erscheint die eigentliche XAMPP-Seite, bei der unter dem Menüpunkt ''Status'' Informationen über einzelne Module ausgegeben werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:xampp-status.png|XAMPP Status]]&lt;br /&gt;
&lt;br /&gt;
Wichtig ist hier nur, dass MySQL und PHP AKTIVIERT ist. Der Menüpunkt ''phpinfo()'' zeigt viele Informationen über die installierte PHP-Version und deren Module an; hier sollte eine Version ab 5.2 zu sehen sein.&lt;br /&gt;
&lt;br /&gt;
Zum Schluss sollte man noch über die Seite ''&amp;lt;nowiki&amp;gt;http://localhost/security/xamppsecurity.php&amp;lt;/nowiki&amp;gt;''  das ROOT-Passwort für den MySQL-Server setzen. Nebenbei kann man auch das XAMPP-Verzeichnis mit einem Passwortschutz versehen. Diese Aktionen sind zwar für die Funktionalität nicht zwingend nötig, aber aus Sicherheitsgründen zu empfehlen. ''&amp;quot;Paranoia is applied security&amp;quot;'' …  Nach dem Ändern des Passwortes muss über das XAMPP Control Panel der MySQL-Server neu gestartet werden, damit die Passwortänderung wirksam wird.&lt;br /&gt;
&lt;br /&gt;
=Installation einer Contao Umgebung=&lt;br /&gt;
Um Contao installieren zu können, muss zuerst ein Contao-Paket von der [http://www.contao.org/herunterladen.html Projekt-Homepage] heruntergeladen und in das Verzeichnis ''C:\webdev\xampp\htdocs\contao'' entpackt werden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Anschließend wird über die Adresse ''&amp;lt;nowiki&amp;gt;http://localhost/phpmyadmin/&amp;lt;/nowiki&amp;gt;'' eine neue Datenbank inkl. neuen Datenbank-Benutzer angelegt. Aus Sicherheitsgründen sollte man für die Datenbank den ROOT-Benutzer nicht verwenden.&amp;lt;br /&amp;gt;&lt;br /&gt;
Über den Reiter ''Rechte'' kommt man zur Benutzerübersicht. In dieser Übersicht findet man einen Button ''Neuen Benutzer hinzufügen''. Hier kann man sehr bequem einen Benutzer samt Datenbank anlegen. Als Host wählt man immer ''Lokal'', da Webserver und Datenbanksystem auf dem selben Rechner laufen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:xampp-newdbuser.png|Neuen Datenbank Benutzer inkl. Datenbank erstellen]]&lt;br /&gt;
&lt;br /&gt;
Jetzt kann mit der [[Installation]] von Contao begonnen werden.&lt;br /&gt;
&lt;br /&gt;
Im Grunde könnte man auf diese Art beliebig viele Contao-Umgebungen parallel betreiben, natürlich in jeweils verschiedenen Verzeichnissen. Hier bestehen aber zwei grundsätzliche Probleme:&lt;br /&gt;
*Contao ist in einem Unterverzeichnis installiert, was an einigen Stellen zu Problemen führen kann. Contao ist hier aber sehr kulant.&lt;br /&gt;
*Auf diese Art ist pro Contao-Umgebung nur eine Seite realisierbar.&lt;br /&gt;
&lt;br /&gt;
=Ausbau auf verschiedene Hostnamen=&lt;br /&gt;
Um die oben genannten Probleme zu beheben, kann für jede Contao Umgebung ein eigener Hostnamen angelegt werden, also ein Alias zu ''localhost''. Hostnamen sind für den Menschen da und werden vom Betriebssystem automatisch zu einer IP-Adresse aufgelöst. Der ''localhost'' ist dabei voreingestellt und zeigt immer auf ''127.0.0.1'', was per Definition immer der Computer ist, auf dem die Auflösung statt findet. Diese Zuordnung macht sich der Webserver zu nutze und unterscheidet damit die verschiedenen Websites.&lt;br /&gt;
&lt;br /&gt;
==hosts-Datei==&lt;br /&gt;
Es gibt verschieden Instanzen der Namensauflösung, der erste Schritt hierbei ist in jedem Fall die sogenannte hosts-Datei, welche in jedem System existiert und erst wenn hier keine Entsprechung gefunden werden konnten, werden weitere DNS-Server befragt.&lt;br /&gt;
&lt;br /&gt;
Um nun eigene Hostnamen für die IP ''127.0.0.1'' einzurichten, öffnet man mit einem Editor die Datei hosts (ohne Endung), welche bei &lt;br /&gt;
*Windows unter C:\WINDOWS\system32\drivers\etc\&lt;br /&gt;
*Linux und Mac unter /etc/&lt;br /&gt;
zu finden ist. Um die Datei zu ändern, sind Administrator bzw. ROOT Rechte notwendig.&lt;br /&gt;
&lt;br /&gt;
Für jede Hostnamen&amp;lt;-&amp;gt;IP-Adresse-Kombination steht eine Zeile, wobei die Hostnamen eindeutig sein müssen. Es dürfen also keine zwei identische Hostnamen auf eine IP-Adresse zeigen.&lt;br /&gt;
&lt;br /&gt;
[[Datei:xampp-hosts.png|Datei hosts bearbeiten]]&lt;br /&gt;
&lt;br /&gt;
Öffnet man nun eine der neu angelegten Hostnamen im Browser, z.B. ''&amp;lt;nowiki&amp;gt;http://xampp&amp;lt;/nowiki&amp;gt;'', dann sollte die gleiche Ausgabe wie bei Aufruf von ''&amp;lt;nowiki&amp;gt;http://localhost&amp;lt;/nowiki&amp;gt;'' erscheinen. Bei der Wahl der Hostnamen sollte man darauf achten, dass keine Überschneidung mit reell existierenden Domains entstehen. Trägt man beispielsweise &lt;br /&gt;
&amp;lt;pre&amp;gt;127.0.0.1		www.contao.org&amp;lt;/pre&amp;gt;&lt;br /&gt;
in die hosts-Datei ein, wird man von nun ab den lokalen Webserver unter der Adresse www.contao.org erreichen, und nicht mehr die Contao-Website.&amp;lt;br /&amp;gt;&lt;br /&gt;
Es gibt einige spezielle hosts-Editoren, die das Editieren erleichtern sollen. Google weiß mehr darüber.&lt;br /&gt;
&lt;br /&gt;
==vHost-Konfiguration==&lt;br /&gt;
Um die verschiedenen Hostnamen den unterschiedlichen Contao-Umgebungen zuzuweisen, muss der Webserver entsprechend konfiguriert werden. Über die sogenannten virtuellen Hosts pflegt der Apache die Unterscheidung zwischen den einzelnen Umgebungen.&lt;br /&gt;
&lt;br /&gt;
Hierzu stellt XAMPP die Konfigurationsdatei ''C:\webdev\xampp\apache\conf\extra\httpd-vhosts.conf'' bereit, die ebenfalls per Editor bearbeitet wird.&lt;br /&gt;
Man kann hier die Gelegenheit nutzen, um das htdocs-Verzeichnis mit den Contao-Dateien an einen anderen Ort zu legen, z.B. ''C:\webdev\webfiles''. Die restlichen XAMPP-htdocs sollte man unberührt lassen.&lt;br /&gt;
&lt;br /&gt;
Zuerst muss man den Apache anweisen, virtuelle Hosts über die Hostnamen aufzulösen. Dazu wird das Kommentarzeichen vor ''NameVirtualHost'' entfernt.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#&lt;br /&gt;
# Use name-based virtual hosting.&lt;br /&gt;
#&lt;br /&gt;
NameVirtualHost *:80&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Die Zugriffsrechte für das Web-Verzeichnis schränken wir entsprechend ein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Zugriff auf das webfiles-Verzeichnis nur vom lokalen Rechner zulassen&lt;br /&gt;
&amp;lt;Directory C:/webdev/webfiles&amp;gt;&lt;br /&gt;
    Order deny,allow&lt;br /&gt;
    Allow from 127.0.0.1&lt;br /&gt;
    AllowOverride All&lt;br /&gt;
&amp;lt;/Directory&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Jetzt erstellt man den ersten vHost-Eintrag. Diesen benutzt man für das normale ''localhost''-Verhalten. Es sollen also einfach alle Dateien aufgelistet werden. Da dies der erste vHost-Eintrag ist, erhält er auch eine Sonderstellung. Passt kein anderer vHost-Eintrag auf die Anfrage, wird dieser stellvertretend benutzt.&lt;br /&gt;
&lt;br /&gt;
Ein weiteres Gimmik ist das Rewrite-Script. Es dient dazu, Subdomains auf Verzeichnisse abzubilden. Beispielweise wird die Anfrage ''&amp;lt;nowiki&amp;gt;http://verzeichnis.local/index.php&amp;lt;/nowiki&amp;gt;'' auf die Datei ''C:\webdev\webfiles\*verzeichnis*\index.php'' abgebildet. Dies hat den großen Vorteil, dass ein neuer Subdomain-vHost ohne Anpassung der Serverkonfiguration erstellt werden kann. Es muss lediglich das Verzeichnis erstellt werden.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### Default vHost&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    DocumentRoot C:/webdev/webfiles&lt;br /&gt;
    ServerName localhost&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;Directory C:/webdev/webfiles&amp;gt;&lt;br /&gt;
        Options +Indexes&lt;br /&gt;
    &amp;lt;/Directory&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    # Der vHost soll auch alle Anfragen annehmen, die mit &amp;quot;.local&amp;quot; enden.&lt;br /&gt;
    ServerAlias *.local  &lt;br /&gt;
&lt;br /&gt;
    # Script zur Umleitung in das Verzeichnis, welches über dem Präfix von &amp;quot;.local&amp;quot; referenziert wird&lt;br /&gt;
    # Bsp.: neu.local nutzt als DocumentRoot C:/webdev/webfiles/neu&lt;br /&gt;
    UseCanonicalName Off&lt;br /&gt;
    RewriteEngine On&lt;br /&gt;
    RewriteCond %{HTTP_HOST}            ^[^.]+\.local$&lt;br /&gt;
    RewriteCond %{REQUEST_URI}          !^/icons&lt;br /&gt;
    RewriteRule ^(.+)                   %{HTTP_HOST}$1      [C]&lt;br /&gt;
    RewriteRule ^([^.]+)\.local(.*)     C:/webdev/webfiles/$1$2&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Nun wird ein vHost zum Zugriff auf die XAMPP-Weboberfläche erstellt:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### XAMPP vHost&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    DocumentRoot c:/webdev/xampp/htdocs&lt;br /&gt;
    ServerName xampp&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ein vHost zum Zugriff auf eine Contao-Umgebung:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### contao vHost&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    DocumentRoot c:/webdev/webfiles/contao&lt;br /&gt;
    ServerName contao&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Diese vHost dient zum Zugriff auf das Verzeichnis multilang. Man achte auf den ServerAlias, welcher es ermöglicht, beliebige Subdomain-Hostnamen der Form xxx.multilang anzulagen (de.multilang, en.multilang,...).&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
### multilang vHost&lt;br /&gt;
&amp;lt;VirtualHost *:80&amp;gt;&lt;br /&gt;
    DocumentRoot c:/webdev/webfiles/multilang&lt;br /&gt;
    ServerName multilang&lt;br /&gt;
    ServerAlias *.multilang&lt;br /&gt;
&amp;lt;/VirtualHost&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Zusammenfassung der Syntax:&lt;br /&gt;
*Ein &amp;amp;lt;VirtualHost *:80&amp;amp;gt;-Block pro vHost&lt;br /&gt;
*''ServerName'' gibt den verwendeten Hostnamen an&lt;br /&gt;
*''ServerAlias'' gibt weitere Hostnamen an, für die dieser vHost gilt. Hier sind Wildcards erlaubt&lt;br /&gt;
*''DocumentRoot'' steht für das physische Verzeichnis der Dateien&lt;br /&gt;
&lt;br /&gt;
Natürlich gibt es noch eine Vielzahl weiterer Konfigurationsoptionen, diese können in der [http://httpd.apache.org/docs/ Apache-Dokumentation] nachgelesen werden.&lt;br /&gt;
&lt;br /&gt;
Nachdem die Datei angepasst wurde, wird der Syntax in der Eingabeaufforderung mit ''httpd.exe -S'' überprüft (unter C:\webdev\xampp\apache\bin). Sind keine Fehler aufgetreten, kann der Webserver über das XAMPP Control Panel neu gestartet werden.&lt;br /&gt;
&lt;br /&gt;
Jetzt sollten folgende vHost aktiv sein:&lt;br /&gt;
*''&amp;lt;nowiki&amp;gt;http://localhost&amp;lt;/nowiki&amp;gt;'' -&amp;gt; ''C:\webdev\webfiles'' - Mit Auflistung des Inhalts. Praktisch, wenn man für etwas Kleines keinen extra vHost anlegen möchte.&lt;br /&gt;
*''&amp;lt;nowiki&amp;gt;http://contao&amp;lt;/nowiki&amp;gt;'' -&amp;gt; ''C:\webdev\webfiles\contao''&lt;br /&gt;
*''&amp;lt;nowiki&amp;gt;http://[ordner].local&amp;lt;/nowiki&amp;gt;'' -&amp;gt; C:\webdev\webfiles\[ordner] - wobei [ordner] beliebig sein kann, es darf nur kein Punkt oder Sonderzeichen enthalten sein. Damit hat man praktisch einen Wildcard-vHost ohne wirklich die Serverkonfiguration ändern zu müssen. '''Wichtig:''' ''[ordner].local'' muss auch in der hosts-Datei notiert werden.&lt;br /&gt;
*''&amp;lt;nowiki&amp;gt;http://xampp&amp;lt;/nowiki&amp;gt;'' -&amp;gt; ''C:\webdev\xampp\htdocs'' - Über diesen vHost kann man auf die XAMPP-Weboberfläche zugreifen.&lt;br /&gt;
*''&amp;lt;nowiki&amp;gt;http://*.multilang&amp;lt;/nowiki&amp;gt;'' -&amp;gt; ''C:\webdev\webfiles\mutlilang'', auch hier kann man als Subdomain alles angeben, was man in der Hosts-Datei notiert hat. Besonderheit zum oberen Beispiel: Es wird immer das selbe Verzeichnis und damit die selbe Contao-Umgebung referenziert. Damit kann man also mehrsprachige oder mehrseitige Auftritte erstellen.&lt;br /&gt;
&lt;br /&gt;
=Sicherheitseinstellungen - Apache=&lt;br /&gt;
Abschließend werden noch ein paar Einstellungen zur Sicherheit vorgenommen.&lt;br /&gt;
&lt;br /&gt;
==Zugriff von außen sperren==&lt;br /&gt;
In der Datei ''C:\webdev\xampp\apache\conf\httpd.conf'' befindet sich ab der Zeile 42:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Change this to Listen on specific IP addresses as shown below to &lt;br /&gt;
# prevent Apache from glomming onto all bound IP addresses.&lt;br /&gt;
#&lt;br /&gt;
#Listen 0.0.0.0:80&lt;br /&gt;
#Listen [::]:80&lt;br /&gt;
Listen 80&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Hier ändert man den ''Listen''-Wert auf:&lt;br /&gt;
 Listen 127.0.0.1:80&lt;br /&gt;
Das veranlasst den Apache nur noch Verbindungen über das ''localhost''-Interface anzunehmen und keine Verbindungen, die über das Netzwerk von anderen Computer kommen.&lt;br /&gt;
&lt;br /&gt;
In der Datei ''C:\webdev\xampp\apache\conf\extra\httpd-ssl.conf'' steht die Einstellung für HTTPS, also verschlüsselte Seiten. Hier muss in Zeile 41&lt;br /&gt;
 Listen 443&lt;br /&gt;
in&lt;br /&gt;
 Listen 127.0.0.1:443&lt;br /&gt;
geändert werden.&lt;br /&gt;
&lt;br /&gt;
=Sicherheitseinstellungen - MySQL=&lt;br /&gt;
Auch dem MySQL-Server verbietet man den Zugriff von außen. In die Datei ''C:\webdev\xampp\mysql\bin\my.ini'' fügt man folgenden Zeile unter der Sektion ''[mysqld]'' ein:&lt;br /&gt;
 bind-address = 127.0.0.1&lt;br /&gt;
Damit sieht die Konfigurationsdatei ab Zeile 27 so aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# The MySQL server&lt;br /&gt;
[mysqld]&lt;br /&gt;
basedir                 = &amp;quot;/webdev/xampp/mysql/&amp;quot;&lt;br /&gt;
datadir                 = &amp;quot;/webdev/xampp/mysql/data/&amp;quot;&lt;br /&gt;
port		            = 3306&lt;br /&gt;
socket		            = &amp;quot;MySQL&amp;quot;&lt;br /&gt;
skip-locking&lt;br /&gt;
key_buffer              = 16M&lt;br /&gt;
max_allowed_packet      = 1M&lt;br /&gt;
table_cache             = 64&lt;br /&gt;
sort_buffer_size        = 512K&lt;br /&gt;
net_buffer_length       = 8K&lt;br /&gt;
read_buffer_size        = 256K&lt;br /&gt;
read_rnd_buffer_size    = 512K&lt;br /&gt;
myisam_sort_buffer_size = 8M&lt;br /&gt;
bind-address = 127.0.0.1&lt;br /&gt;
&lt;br /&gt;
default-time-zone       = &amp;quot;Europe/Paris&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ein Neustart des MySQL-Servers macht die Konfiguration aktiv.&lt;br /&gt;
&lt;br /&gt;
=.htaccess=&lt;br /&gt;
Standardmässig ist die Datei ''.htaccess'' nicht in der Contao-Installation aktiv. Es liegt jedoch eine vorbereitete Datei bereit; sie lautet ''.htaccess.default''. Diese muss in ''.htaccess'' umbenannt werden. Die Datei ''.htaccess'' aus dem Basisverzeichnis der Contao-Installation dient hauptsächlich dazu, schönere URLs zu erzeugen. Damit das Rewriting von Webserver entsprechend ausgeführt werden kann, muss die Option ''RewriteBase'' angepasst werden. Sie besagt, in welchem Unterverzeichnis die Installation bezüglich der Domain liegt. Hat man das System in einem Unterverzeichnis installiert (''&amp;lt;nowiki&amp;gt;http://localhost/contao/&amp;lt;/nowiki&amp;gt;''), dann muss die ''RewriteBase'' auf ''/contao/'' geändert werden. Die veränderte ''.htaccess'' sieht dann ab Zeile 39 wie folgt aus:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  # Uncomment the following line to set the RewriteBase.&lt;br /&gt;
  ##&lt;br /&gt;
  RewriteBase /contao/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Mercury - Mailserver=&lt;br /&gt;
Damit man auch die Mailfunktionalität von Contao lokal testen kann, bedarf es einem Mailserver. Diesen bringt XAMPP in Form von Mercury-Mail mit.&lt;br /&gt;
&lt;br /&gt;
Über das ''XAMPP Control Panel'' wird dei Mailserver gestartet und per klick auf ''Admin'' öffnet sich die Mercury-Verwaltungsoberfläche.&lt;br /&gt;
Da nur ein SMTP-Server (für den Mailversand) und ein POP3-Server (für den Mailempfang) benötigt werden, deaktiviert man alle anderen Dienste von Mercury. Das wird über den Button ''Configuration - Protocol modules'' erledigt, wo alle Haken bis auf SMTP und POP3 entfernt werden:&lt;br /&gt;
&amp;lt;gallery widths=&amp;quot;300&amp;quot; heights=&amp;quot;300&amp;quot;caption=&amp;quot;Mercury Security Settings&amp;quot;&amp;gt;&lt;br /&gt;
  Datei:xampp-mercury.png|Mercury Admin Page&lt;br /&gt;
  Datei:xampp-mercuryprotocolmodules.png|Mercury Protocol Modules&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
Nun den Mercury-Server über das ''XAMPP Control Panel'' neustarten.&lt;br /&gt;
&lt;br /&gt;
Ähnlich wie für den Apache veranlasst man auch Mercury nur Verbindungen vom ''localhost'' anzunehmen. Über ''Configuration - Mercury SMTP Server'' erreicht man die Einstellungen und unter anderem das Feld ''IP Interface to use'', was auf 127.0.0.1 zu setzen ist:&lt;br /&gt;
&lt;br /&gt;
[[Datei:xampp-mercurysmtp.png|Mercury SMTP Server]]&lt;br /&gt;
&lt;br /&gt;
Analog für den POP3-Server unter ''Configuration - Mercury POP3 Server'':&lt;br /&gt;
&lt;br /&gt;
[[Datei:xampp-mercurypop3.png|Mercury PPOP3 Server]]&lt;br /&gt;
&lt;br /&gt;
Um nun Mails empfangen zu können muss noch ein Mailbenutzer in Mercury angelegt werden. Unter ''Configuration - Manage local users'' kann man beliebige Mailkonten anlegen, an welche man dann per Contao Mails schicken kann. Am besten ändert man hierfür den schon angelegten ''newuser'' ab.&lt;br /&gt;
&lt;br /&gt;
Damit die E-Mails auch abgeholt werden, richtet man sich das neue E-Mail Konto in einem Mailclient ein, beispielsweise Outlook Express. Die Logindaten hierfür sind:&lt;br /&gt;
* POP3-Server: ''localhost''&lt;br /&gt;
* SMTP-Server: ''localhost''&lt;br /&gt;
* Benutzer: ''user@localhost''&lt;br /&gt;
&lt;br /&gt;
Die XAMPP-Weboberfläche (&amp;lt;nowiki&amp;gt;http://xampp&amp;lt;/nowiki&amp;gt;) bietet den Menüpunkt Mercury Mail, hier kann man sich über PHP eine E-Mail zustellen, um die Konfiguration zu testen.&lt;br /&gt;
&lt;br /&gt;
=Umzug auf ein Live-System=&lt;br /&gt;
Der Umzug von Contao auf ein Livesystem gestaltet sich normalerweise sehr angenehm und ist nur mit wenigen Handgriffen zu bewerkstelligen:&lt;br /&gt;
#Unter Systemwartung den Cache löschen.&lt;br /&gt;
#Mit Hilfe der [[BackupDB|Backup-DB Erweiterung]] ein Website-Template erstellen&lt;br /&gt;
#Die ganze Website auf den Server laden (z.B. per FTP)&lt;br /&gt;
#Die .htaccess-Datei anpassen. Falls die Contao-Installation lokal in einem Unterverzeichnis lag, muss die RewriteBase wieder auf &amp;quot;/&amp;quot; gestellt werden.&lt;br /&gt;
#Nun über das Install-Tool die Contao-Seite installieren und am Ende das mit BackupDB erstellte Template in die Datenbank einfügen.&lt;br /&gt;
&lt;br /&gt;
Das sollte es schon gewesen sein.&lt;br /&gt;
&lt;br /&gt;
Da diese Anleitung auf einem portablen XAMPP-Server aufgebaut ist, ist es möglich, das komplette Verzeichnis (C:\webdev) auf einen USB-Stick zu betreiben. Dies erleichtert z.B. die Presentation bei Kunden. Es befindet sich alles in diesem Verzeichnis und bedarf keiner Installation. Lediglich die angepasste [[#hosts-Datei|hosts-Datei]] kann nicht übernommen werden.&lt;br /&gt;
&lt;br /&gt;
=Credits=&lt;br /&gt;
Die Orginal-Anleitung wurde erstellt von [[Benutzer:Psi|Psi]] ([http://www.4wardmedia.de 4ward.media])&amp;lt;br /&amp;gt;&lt;br /&gt;
Div. Modifikationen und Anpassungen an die aktuelle XAMPP-Version / Contao-Version durch manitougs&lt;br /&gt;
&lt;br /&gt;
[[Datei:4ward signature.png|link=http://www.4wardmedia.de|4ward.media]]&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Accordion_extended</id>
		<title>Accordion extended</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Accordion_extended"/>
				<updated>2010-06-24T16:54:59Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: /* Beispiel für eine CSS-Einstellung */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Admin HOWTOS]]&lt;br /&gt;
{{AppliesTo|TLVersion=ab 2.8}}&lt;br /&gt;
=Accordion mit Active/Hover-Effekten=&lt;br /&gt;
&lt;br /&gt;
Mit ein paar kleinen Tricks kann man das Accordion von Contao dazu bringen,&lt;br /&gt;
dass es je nach Status die CSS-Klassen ''hover'' und ''active'' setzt.&lt;br /&gt;
Damit können Beispielsweise Effekte beim Überfahren mit der Maus oder&lt;br /&gt;
verschiedene Ansichten für ein auf/zu geklapptes Akkordion realisiert werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Accordion extended.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Bearbeitung des Javascript-Templates '''''moo_accordion.tpl'''''==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--//--&amp;gt;&amp;lt;![CDATA[//&amp;gt;&amp;lt;!--&lt;br /&gt;
window.addEvent('domready', function() {&lt;br /&gt;
  new Accordion($$('div.toggler'), $$('div.accordion'), {&lt;br /&gt;
    alwaysHide: true,&lt;br /&gt;
    opacity: false,&lt;br /&gt;
    display: -1, // -1, alle Akkordions sind am Anfang eingeklappt&lt;br /&gt;
    onActive: function(toggler,elem) {&lt;br /&gt;
		toggler.addClass('active');&lt;br /&gt;
    },&lt;br /&gt;
    onBackground: function(toggler,elem) {&lt;br /&gt;
		toggler.removeClass('active');&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
  $$('div.toggler').each(function(elem){&lt;br /&gt;
	elem.addEvents({&lt;br /&gt;
		'mouseenter': function(){&lt;br /&gt;
			elem.addClass('hover');&lt;br /&gt;
		},&lt;br /&gt;
		'mouseleave': function(){&lt;br /&gt;
			elem.removeClass('hover');&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
//--&amp;gt;&amp;lt;!]]&amp;gt;&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Durch dieses Template erhält das Toggler-Div zusätzlich:&lt;br /&gt;
* Die Klasse '''hover''' beim überfahren mit der Maus&lt;br /&gt;
* Die Klasse '''active''' wenn das Element ausgeklappt ist&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispiel für eine CSS-Einstellung==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* Style für den Akkordion Inhalt */&lt;br /&gt;
.ce_accordion div.accordion &amp;gt; div {&lt;br /&gt;
    margin-bottom:2px;&lt;br /&gt;
    padding-top:10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Style des zugeklappten Akkordion-Togglers */&lt;br /&gt;
.ce_accordion div.toggler {&lt;br /&gt;
    margin-bottom:3px;&lt;br /&gt;
    padding:0 10px;&lt;br /&gt;
    background:#B7B7B7 url(&amp;quot;tl_files/layout/accord_zugeklappt.png&amp;quot;) right center no-repeat;&lt;br /&gt;
    font-weight:bold;&lt;br /&gt;
    color:#FFFFFF;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Style für das aufgeklappte Akkordion */&lt;br /&gt;
.ce_accordion div.active {&lt;br /&gt;
    padding:0 10px;&lt;br /&gt;
    background:#CA2130 url(&amp;quot;tl_files/layout/accord_aufgeklappt.png&amp;quot;) right center no-repeat;&lt;br /&gt;
    font-weight:bold;&lt;br /&gt;
    color:#FFFFFF;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Style für den Mouseover-Effekt */&lt;br /&gt;
.ce_accordion div.hover {&lt;br /&gt;
    text-decoration:underline;&lt;br /&gt;
    background:#CA2130 url(&amp;quot;tl_files/layout/accord_mouseover.png&amp;quot;) right center no-repeat;&lt;br /&gt;
    cursor:pointer;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
erstellt von --[[Benutzer:Psi|Psi]], [http://www.4wardmedia.de 4ward.media]&lt;br /&gt;
&lt;br /&gt;
[[Datei:4ward signature.png|link=http://www.4wardmedia.de|4ward.media]]&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Accordion_extended</id>
		<title>Accordion extended</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Accordion_extended"/>
				<updated>2010-06-24T16:54:02Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Admin HOWTOS]]&lt;br /&gt;
{{AppliesTo|TLVersion=ab 2.8}}&lt;br /&gt;
=Accordion mit Active/Hover-Effekten=&lt;br /&gt;
&lt;br /&gt;
Mit ein paar kleinen Tricks kann man das Accordion von Contao dazu bringen,&lt;br /&gt;
dass es je nach Status die CSS-Klassen ''hover'' und ''active'' setzt.&lt;br /&gt;
Damit können Beispielsweise Effekte beim Überfahren mit der Maus oder&lt;br /&gt;
verschiedene Ansichten für ein auf/zu geklapptes Akkordion realisiert werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Accordion extended.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Bearbeitung des Javascript-Templates '''''moo_accordion.tpl'''''==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--//--&amp;gt;&amp;lt;![CDATA[//&amp;gt;&amp;lt;!--&lt;br /&gt;
window.addEvent('domready', function() {&lt;br /&gt;
  new Accordion($$('div.toggler'), $$('div.accordion'), {&lt;br /&gt;
    alwaysHide: true,&lt;br /&gt;
    opacity: false,&lt;br /&gt;
    display: -1, // -1, alle Akkordions sind am Anfang eingeklappt&lt;br /&gt;
    onActive: function(toggler,elem) {&lt;br /&gt;
		toggler.addClass('active');&lt;br /&gt;
    },&lt;br /&gt;
    onBackground: function(toggler,elem) {&lt;br /&gt;
		toggler.removeClass('active');&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
  $$('div.toggler').each(function(elem){&lt;br /&gt;
	elem.addEvents({&lt;br /&gt;
		'mouseenter': function(){&lt;br /&gt;
			elem.addClass('hover');&lt;br /&gt;
		},&lt;br /&gt;
		'mouseleave': function(){&lt;br /&gt;
			elem.removeClass('hover');&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
//--&amp;gt;&amp;lt;!]]&amp;gt;&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Durch dieses Template erhält das Toggler-Div zusätzlich:&lt;br /&gt;
* Die Klasse '''hover''' beim überfahren mit der Maus&lt;br /&gt;
* Die Klasse '''active''' wenn das Element ausgeklappt ist&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispiel für eine CSS-Einstellung==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* Style für den Akkordion Inhalt */&lt;br /&gt;
.ce_accordion div.accordion &amp;gt; div {&lt;br /&gt;
    margin-bottom:2px;&lt;br /&gt;
    padding-top:10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Style des zugeklappten Akkordion-Togglers */&lt;br /&gt;
.ce_accordion div.toggler {&lt;br /&gt;
    margin-bottom:3px;&lt;br /&gt;
    padding:0 10px;&lt;br /&gt;
    background:#B7B7B7 url(&amp;quot;tl_files/layout/accord_zugeklappt.png&amp;quot;) right center no-repeat;&lt;br /&gt;
    font-weight:bold;&lt;br /&gt;
    color:#FFFFFF;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Style für das aufgeklappte Akkordion */&lt;br /&gt;
.ce_accordion div.active {&lt;br /&gt;
    padding:0 10px;&lt;br /&gt;
    background:#CA2130 url(&amp;quot;tl_files/layout/accord_aufgeklappt.png&amp;quot;) right center no-repeat;&lt;br /&gt;
    font-weight:bold;&lt;br /&gt;
    color:#FFFFFF;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Style für den Mouseover-Effekt */&lt;br /&gt;
.ce_accordion div.hover {&lt;br /&gt;
    text-decoration:underline;&lt;br /&gt;
    background:#CA2130 url(&amp;quot;tl_files/layout/accord_mouseover.png&amp;quot;) right center no-repeat;&lt;br /&gt;
    cursor:pointer;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
erstellt von --[[Benutzer:Psi|Psi]], [http://www.4wardmedia.de 4ward.media]&lt;br /&gt;
&lt;br /&gt;
[[Datei:4ward signature.png]]&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	<entry>
		<id>https://de.contaowiki.org/Accordion_extended</id>
		<title>Accordion extended</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Accordion_extended"/>
				<updated>2010-06-24T16:53:36Z</updated>
		
		<summary type="html">&lt;p&gt;Psi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Admin HOWTOS]]&lt;br /&gt;
{{AppliesTo|TLVersion=ab 2.8}}&lt;br /&gt;
&lt;br /&gt;
=Accordion mit Active/Hover-Effekten=&lt;br /&gt;
&lt;br /&gt;
Mit ein paar kleinen Tricks kann man das Accordion von Contao dazu bringen,&lt;br /&gt;
dass es je nach Status die CSS-Klassen ''hover'' und ''active'' setzt.&lt;br /&gt;
Damit können Beispielsweise Effekte beim Überfahren mit der Maus oder&lt;br /&gt;
verschiedene Ansichten für ein auf/zu geklapptes Akkordion realisiert werden.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Accordion extended.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Bearbeitung des Javascript-Templates '''''moo_accordion.tpl'''''==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!--//--&amp;gt;&amp;lt;![CDATA[//&amp;gt;&amp;lt;!--&lt;br /&gt;
window.addEvent('domready', function() {&lt;br /&gt;
  new Accordion($$('div.toggler'), $$('div.accordion'), {&lt;br /&gt;
    alwaysHide: true,&lt;br /&gt;
    opacity: false,&lt;br /&gt;
    display: -1, // -1, alle Akkordions sind am Anfang eingeklappt&lt;br /&gt;
    onActive: function(toggler,elem) {&lt;br /&gt;
		toggler.addClass('active');&lt;br /&gt;
    },&lt;br /&gt;
    onBackground: function(toggler,elem) {&lt;br /&gt;
		toggler.removeClass('active');&lt;br /&gt;
    }&lt;br /&gt;
  });&lt;br /&gt;
  $$('div.toggler').each(function(elem){&lt;br /&gt;
	elem.addEvents({&lt;br /&gt;
		'mouseenter': function(){&lt;br /&gt;
			elem.addClass('hover');&lt;br /&gt;
		},&lt;br /&gt;
		'mouseleave': function(){&lt;br /&gt;
			elem.removeClass('hover');&lt;br /&gt;
		}&lt;br /&gt;
	});&lt;br /&gt;
  });&lt;br /&gt;
});&lt;br /&gt;
//--&amp;gt;&amp;lt;!]]&amp;gt;&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;lt;/pre&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Durch dieses Template erhält das Toggler-Div zusätzlich:&lt;br /&gt;
* Die Klasse '''hover''' beim überfahren mit der Maus&lt;br /&gt;
* Die Klasse '''active''' wenn das Element ausgeklappt ist&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Beispiel für eine CSS-Einstellung==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* Style für den Akkordion Inhalt */&lt;br /&gt;
.ce_accordion div.accordion &amp;gt; div {&lt;br /&gt;
    margin-bottom:2px;&lt;br /&gt;
    padding-top:10px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Style des zugeklappten Akkordion-Togglers */&lt;br /&gt;
.ce_accordion div.toggler {&lt;br /&gt;
    margin-bottom:3px;&lt;br /&gt;
    padding:0 10px;&lt;br /&gt;
    background:#B7B7B7 url(&amp;quot;tl_files/layout/accord_zugeklappt.png&amp;quot;) right center no-repeat;&lt;br /&gt;
    font-weight:bold;&lt;br /&gt;
    color:#FFFFFF;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Style für das aufgeklappte Akkordion */&lt;br /&gt;
.ce_accordion div.active {&lt;br /&gt;
    padding:0 10px;&lt;br /&gt;
    background:#CA2130 url(&amp;quot;tl_files/layout/accord_aufgeklappt.png&amp;quot;) right center no-repeat;&lt;br /&gt;
    font-weight:bold;&lt;br /&gt;
    color:#FFFFFF;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Style für den Mouseover-Effekt */&lt;br /&gt;
.ce_accordion div.hover {&lt;br /&gt;
    text-decoration:underline;&lt;br /&gt;
    background:#CA2130 url(&amp;quot;tl_files/layout/accord_mouseover.png&amp;quot;) right center no-repeat;&lt;br /&gt;
    cursor:pointer;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
erstellt von --[[Benutzer:Psi|Psi]], [http://www.4wardmedia.de 4ward.media]&lt;br /&gt;
&lt;br /&gt;
[[Datei:4ward signature.png]]&lt;/div&gt;</summary>
		<author><name>Psi</name></author>	</entry>

	</feed>