<?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=Christian.Schmidt</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=Christian.Schmidt"/>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/Spezial:Beitr%C3%A4ge/Christian.Schmidt"/>
		<updated>2026-04-30T19:03:45Z</updated>
		<subtitle>Benutzerbeiträge</subtitle>
		<generator>MediaWiki 1.22.6</generator>

	<entry>
		<id>https://de.contaowiki.org/MultiColumnWizard</id>
		<title>MultiColumnWizard</title>
		<link rel="alternate" type="text/html" href="https://de.contaowiki.org/MultiColumnWizard"/>
				<updated>2021-01-16T16:02:23Z</updated>
		
		<summary type="html">&lt;p&gt;Christian.Schmidt: /* Unterstützte Contao Eval-Optionen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[en:MultiSelectWizard]]&lt;br /&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=http://www.contao.org/erweiterungsliste/view/MultiColumnWizard.html&lt;br /&gt;
| TrackerLink=https://github.com/menatwork/MultiColumnWizard/issues&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
Der MultiColumnWizard ist ein Widget zur Abbildung von mehreren Feldern ''gleichen'' und/oder ''unterschiedlichen'' Typs (''Inputtype'') in einem DCA-Element. Die einzelnen Felder des MCW werden im Backend spaltenweise geführt und sind als Gruppe zeilenweise erweiterbar. Die Anordnung entspricht einem multidimensionalen Array der Form ''array[Zeilen][Felder]'', das als serialisiertes Array in der Datenbank abgelegt wird. Das Widget ist quasi identisch zu [[MultiTextWizard]] oder [[MultiSelectWizard]]. Es erweitert die Funktionalitäten für beliebige Widgets.&lt;br /&gt;
&lt;br /&gt;
=Aussehen=&lt;br /&gt;
Die Extension kann für jede Art von Inputtype verwendet werden, eine Mischung der einzelnen Typen ist kein Problem.&lt;br /&gt;
[[Datei:MultiColumnWizard.jpg|MultiColumnWizard|frame|center]]&lt;br /&gt;
&lt;br /&gt;
=Verwendung=&lt;br /&gt;
Es gibt zwei Verwendungsmöglichkeiten. Entweder direkt mit der Angabe von &amp;quot;columnFields&amp;quot; im &amp;quot;eval&amp;quot;-Array oder mit einem Callback.&lt;br /&gt;
&lt;br /&gt;
==Angabe mit columnFields==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_DCA']['tl_theme']['fields']['templateSelection'] = array&lt;br /&gt;
(&lt;br /&gt;
	'label'			=&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_theme']['templateSelection'],&lt;br /&gt;
	'exclude' 		=&amp;gt; true,&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;
			'ts_client_os' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label'                 =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_theme']['ts_client_os'],&lt;br /&gt;
				'exclude'               =&amp;gt; true,&lt;br /&gt;
				'inputType'             =&amp;gt; 'select',&lt;br /&gt;
				'options'            	=&amp;gt; array&lt;br /&gt;
				(&lt;br /&gt;
					'option1'       =&amp;gt; 'Option 1',&lt;br /&gt;
					'option2'     	=&amp;gt; 'Option 2',&lt;br /&gt;
				),&lt;br /&gt;
				'eval' 			=&amp;gt; array('style' =&amp;gt; 'width:250px', 'includeBlankOption'=&amp;gt;true, 'chosen'=&amp;gt;true)&lt;br /&gt;
			),&lt;br /&gt;
			'ts_client_browser' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label'                 =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_theme']['ts_client_browser'],&lt;br /&gt;
				'exclude'               =&amp;gt; true,&lt;br /&gt;
				'inputType'             =&amp;gt; 'text',&lt;br /&gt;
				'eval' 			=&amp;gt; array('style'=&amp;gt;'width:180px')&lt;br /&gt;
			),&lt;br /&gt;
			'ts_client_mobile' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label'                 =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_theme']['ts_client_mobile'],&lt;br /&gt;
				'exclude'               =&amp;gt; true,&lt;br /&gt;
				'inputType'             =&amp;gt; 'checkbox',&lt;br /&gt;
				'eval'                  =&amp;gt; array('style'=&amp;gt;'width:40px')&lt;br /&gt;
&lt;br /&gt;
			),&lt;br /&gt;
			'ts_extension' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label' 		=&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_theme']['ts_extension'],&lt;br /&gt;
				'inputType' 		=&amp;gt; 'text',&lt;br /&gt;
				'eval'                  =&amp;gt; array('mandatory'=&amp;gt;true, 'style'=&amp;gt;'width:115px')&lt;br /&gt;
			),&lt;br /&gt;
		)&lt;br /&gt;
	),&lt;br /&gt;
	'sql'                     =&amp;gt; &amp;quot;blob NULL&amp;quot;&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Das ''''chosen'=&amp;gt;true''' im eval vom Select Feld (ts_client_os) ist für Contao 2.11 wichtig, da sonst die Anzeige nicht korrekt funktioniert.&amp;lt;br /&amp;gt;Für Contao 2.10 ist das nicht nötig, stört aber nicht und ist somit kompatibel für beide Versionen. Das SQL-Feld ist nur nötig, wenn es keine database.sql gibt.&lt;br /&gt;
&lt;br /&gt;
==Angabe mit Callback==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$GLOBALS['TL_DCA']['tl_table']['fields']['anything'] = array&lt;br /&gt;
(&lt;br /&gt;
	'label'                 =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_table']['anything'],&lt;br /&gt;
	'exclude'		=&amp;gt; true,&lt;br /&gt;
	'inputType'		=&amp;gt; 'multiColumnWizard',&lt;br /&gt;
	'eval'			=&amp;gt; array('mandatory'=&amp;gt;true,'columnsCallback'=&amp;gt;array('Class', 'Method'))&lt;br /&gt;
										&lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wobei natürlich der Return-Wert genau das selbe Array sein muss, wie bei der &amp;quot;columnFields&amp;quot;-Variante.&lt;br /&gt;
&lt;br /&gt;
==Verfügbare MultiColumnWizard Eval-Optionen==&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;20&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| '''Schlüssel''' || '''Wert''' || '''Beschreibung''' || '''Beispiel'''&lt;br /&gt;
|-&lt;br /&gt;
| columnPos || Gruppenname&amp;lt;br /&amp;gt;''string'' || Gruppiert Felder und zeigt Sie untereinander an. || &lt;br /&gt;
|-&lt;br /&gt;
| maxCount || Menge&amp;lt;br /&amp;gt;''integer'' || Legt die maximale Anzahl an Felder fest, die angelegt werden dürfen. || &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$GLOBALS['TL_DCA']['tl_example']['fields']['mcwExample']['eval']['maxCount'] = 4;&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| minCount || Menge&amp;lt;br /&amp;gt;''integer'' || Legt die minimale Anzahl an Felder fest, die angelegt werden dürfen. || &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$GLOBALS['TL_DCA']['tl_example']['fields']['mcwExample']['eval']['minCount '] = 2;&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| valign || Position&amp;lt;br /&amp;gt;''string'' || Legt die vertikale Position der Zelle in der Tabelle fest. || &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$GLOBALS['TL_DCA']['tl_example']['fields']['mcwExample']['eval']['valign'] = 'top';&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| buttonPos || Position&amp;lt;br /&amp;gt;''string'' || Legt die vertikale Position der Zelle, in der sich die Buttons befinden, fest. || &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$GLOBALS['TL_DCA']['tl_example']['fields']['mcwExample']['eval']['buttonPos'] = 'bottom';&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| buttons || Buttonnamen&amp;lt;br /&amp;gt;''associative array'' || Legt fest, mit welchen Icons die Buttons &amp;quot;up&amp;quot;, &amp;quot;down&amp;quot;, &amp;quot;move&amp;quot;, &amp;quot;new&amp;quot;, &amp;quot;copy&amp;quot;, &amp;quot;delete&amp;quot; dargestellt werden. Dabei ist der Buttonname der Schlüssel und der Pfad zum Icon der Wert. Wird ein Wert für einen Button explizit auf ''false'' gesetzt, so wird dieser versteckt. || &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$GLOBALS['TL_DCA']['tl_example']['fields']['mcwExample']['eval']['buttons'] = ['copy' =&amp;gt; false, 'delete' =&amp;gt; false, 'up' =&amp;gt; 'myUpIcon.png'];&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| hideButtons || Buttons ausblenden?&amp;lt;br /&amp;gt;''boolean'' || Wird die Option ''hideButtons'' auf ''true'' gesetzt, werden keine Buttons angezeigt. || &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$GLOBALS['TL_DCA']['tl_example']['fields']['mcwExample']['eval']['hideButtons '] = true;&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| disableSorting || Zeilen verschieben deaktivieren?&amp;lt;br /&amp;gt;''boolean'' || Wird die Option ''disableSorting'' auf ''true'' gesetzt, lässt sich die Reihenfolge der Zeichen nicht ändern (die Buttons &amp;quot;up&amp;quot; und &amp;quot;down&amp;quot; bzw. &amp;quot;move&amp;quot; werden nicht angezeigt). || &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$GLOBALS['TL_DCA']['tl_example']['fields']['mcwExample']['eval']['disableSorting'] = true;&amp;lt;/source&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| dragAndDrop || Verschieben der Zeilen per &amp;quot;Drag and Drop&amp;quot; aktivieren?&amp;lt;br /&amp;gt;''boolean'' || Wird die Option ''dragAndDrop'' auf ''true'' gesetzt, die Buttons &amp;quot;up&amp;quot; und &amp;quot;down&amp;quot; durch den Button &amp;quot;move&amp;quot; ersetzt). || &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;$GLOBALS['TL_DCA']['tl_example']['fields']['mcwExample']['eval']['dragAndDrop'] = true;&amp;lt;/source&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Unterstützte Contao Eval-Optionen==&lt;br /&gt;
Diese Eval-Optionen werden für die &amp;quot;Kindwidgets&amp;quot; - oder besser &amp;quot;komponierten Widgets&amp;quot; - unterstützt.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|-&lt;br /&gt;
| '''Schlüssel''' || '''Status'''&lt;br /&gt;
|-&lt;br /&gt;
| nospace || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| multiple || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| size || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| rgxp || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| style || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| tl_class || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| preserveTags || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| allowHtml || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| trailingSlash || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| mandatory || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| spaceToUnderscore || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| includeBlankOption || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| maxlength || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| minlength || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| chosen || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| readonly || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| minval || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| maxval || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| fieldType || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| files || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| filesOnly || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| extensions || Unterstützt&lt;br /&gt;
|-&lt;br /&gt;
| rte || Unterstützt&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Hinweise==&lt;br /&gt;
===options_callback===&lt;br /&gt;
Im Beispiel oben wird für das Select Feld ein Optionsliste direkt definiert über 'options'. Das geht auch über 'options_callback'. Im Gegensatz zum Core wird der Methode jedoch kein Datacontainer $dc übermittelt.&lt;br /&gt;
&lt;br /&gt;
Beispiel für eine Liste abhängig von der Contao Version:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
			'ts_client_os' =&amp;gt; array&lt;br /&gt;
			(&lt;br /&gt;
				'label'                 =&amp;gt; &amp;amp;$GLOBALS['TL_LANG']['tl_theme']['ts_client_os'],&lt;br /&gt;
				'exclude'               =&amp;gt; true,&lt;br /&gt;
				'inputType'             =&amp;gt; 'select',&lt;br /&gt;
				'options_callback'      =&amp;gt; array('tl_theme', 'getOptions'), &lt;br /&gt;
				'eval' 			=&amp;gt; array('style' =&amp;gt; 'width:250px', 'includeBlankOption'=&amp;gt;true, 'chosen'=&amp;gt;true)&lt;br /&gt;
			),&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Nun wie üblich im DCA die Klasse mit der Methode:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class tl_theme extends Backend&lt;br /&gt;
{&lt;br /&gt;
    /**&lt;br /&gt;
     * Return options&lt;br /&gt;
     * @return array&lt;br /&gt;
     */&lt;br /&gt;
    public function getOptions()&lt;br /&gt;
    {&lt;br /&gt;
        $arrOptions = array(&lt;br /&gt;
		'option1'       =&amp;gt; 'Option 1',&lt;br /&gt;
		'option2'     	=&amp;gt; 'Option 2',&lt;br /&gt;
		'option3'     	=&amp;gt; 'Option 3',&lt;br /&gt;
		);&lt;br /&gt;
        //option3 not in Contao 2.10&lt;br /&gt;
        if (version_compare(VERSION, '2.11', '&amp;lt;'))&lt;br /&gt;
        {&lt;br /&gt;
            $arrOptions = array(&lt;br /&gt;
		'option1'       =&amp;gt; 'Option 1',&lt;br /&gt;
		'option2'     	=&amp;gt; 'Option 2',&lt;br /&gt;
		);&lt;br /&gt;
        }&lt;br /&gt;
        return $arrOptions;&lt;br /&gt;
    }&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Christian.Schmidt</name></author>	</entry>

	</feed>