MultiSelectWizard: Unterschied zwischen den Versionen

Aus Contao Community Documentation

(Angabe mit columnsData)
 
(11 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Dieses Widget ist dafür gedacht, mehrere Select-Inputs nebeneinander zu definieren.
+
[[en:MultiSelectWizard]]
Das Widget ist eigentlich das gleiche wie der [[MultiTextWizard]] nur halt mit Dropdownfeldern.
+
[[Category:Extensions]]
 +
{{ExtInfo
 +
| Dev=Yanick Witschi
 +
| DevSite=http://www.certo-net.ch
 +
| ExtVersion=1.1.0
 +
| Version=2.9.0 - 2.9.3
 +
| TLVersion=2.7.0 - 2.8.4
 +
| ERLink=http://www.contao.org/erweiterungsliste/view/MultiSelectWizard.html
 +
| TrackerLink=http://contao-forge.org/projects/multiselectwizard
 +
}}
  
Version: 2.7.0 - 2.9.3
+
Dieses Widget ist dafür gedacht, mehrere Select-Inputs untereinander zu definieren.<br />
Entwickler: Yanick Witschi (Toflar)
+
Das Widget ist eigentlich das gleiche wie der [[MultiTextWizard]], jedoch mit Dropdown-Feldern.
Firma: certo web & design GmbH [http://www.certo-net.ch]
+
Lizenz: LGPL
+
Wendet sich an: Entwickler
+
  
- Wie sieht's aus? -
+
=Aussehen=
 
Das Modul sieht haargenau gleich aus wie der ModuleWizard vom Contao-Core. Das Problem bei diesem Wizard ist nur, dass die Quellen alle hardgecodet sind und es deshalb für Drittentwickler unbrauchbar ist.
 
Das Modul sieht haargenau gleich aus wie der ModuleWizard vom Contao-Core. Das Problem bei diesem Wizard ist nur, dass die Quellen alle hardgecodet sind und es deshalb für Drittentwickler unbrauchbar ist.
[[Datei:Beispiel.jpg]]
+
[[Datei:MultiSelectWizard.png|MultiSelectWizard|frame|center]]
  
- Verwendung -
+
=Verwendung=
 
Es gibt zwei Verwendungsmöglichkeiten. Entweder direkt mit der Angabe von "columnsData" im "eval"-Array oder mit einem Callback.
 
Es gibt zwei Verwendungsmöglichkeiten. Entweder direkt mit der Angabe von "columnsData" im "eval"-Array oder mit einem Callback.
  
-- "columnsData" --
+
==Angabe mit columnsData==
[phpcode]
+
 
 +
<source lang="php">
 
$GLOBALS['TL_DCA']['tl_table']['fields']['anything'] = array
 
$GLOBALS['TL_DCA']['tl_table']['fields']['anything'] = array
 
(
 
(
'label'                 => &$GLOBALS['TL_LANG']['tl_table']['anything'],
+
'label'         => &$GLOBALS['TL_LANG']['tl_table']['anything'],
'exclude' => true,
+
'exclude' => true,
'inputType' => 'multiSelectWizard',
+
'inputType' => 'multiSelectWizard',
'eval' => array
+
'eval' => array
  (
+
  (
  'mandatory'=>true,
+
  'mandatory'=>true,
  'columnsData'=> array
+
  'columnsData'=> array
(
+
(
'columns' => array
+
'columns' => array
(
+
(
'key' => 'language',
+
'key' => 'language',
'label' => $GLOBALS['TL_LANG']['MSC']['mylanguagelabel'],
+
'label' => $GLOBALS['TL_LANG']['MSC']['mylanguagelabel'],
'source' => $this->getLanguages(),
+
'source' => $this->getLanguages(),
'style' => 'width:200px'
+
'style' => 'width:200px'
),
+
),
array
+
array
(
+
(
'key' => 'secondcolumn',
+
'key' => 'secondcolumn',
'label' => $GLOBALS['TL_LANG']['MSC']['secondcolumn'],
+
'label' => $GLOBALS['TL_LANG']['MSC']['secondcolumn'],
'source' => array
+
'source' => array
(
+
(
'option1' => $GLOBALS['TL_LANG']['MSC']['option1'],
+
'option1' => $GLOBALS['TL_LANG']['MSC']['option1'],
'option2' => $GLOBALS['TL_LANG']['MSC']['option2'],
+
'option2' => $GLOBALS['TL_LANG']['MSC']['option2'],
'option3' => $GLOBALS['TL_LANG']['MSC']['option3']
+
'option3' => $GLOBALS['TL_LANG']['MSC']['option3']
),
+
),
'style' => 'width:100px'
+
'style' => 'width:100px'
)
+
),
)
+
array
)
+
(
 +
'key' => 'columnwithforeignkey',
 +
'label' => $GLOBALS['TL_LANG']['MSC']['columnwithforeignkey'],
 +
'source' => 'tl_table.column'
 +
)
 +
)
 +
)
 
);
 
);
[/phpcode]
+
</source>
  
-- Callback --
+
==Angabe mit Callback==
[phpcode]
+
<source lang="php">
 
$GLOBALS['TL_DCA']['tl_table']['fields']['anything'] = array
 
$GLOBALS['TL_DCA']['tl_table']['fields']['anything'] = array
 
(
 
(
 
'label'                => &$GLOBALS['TL_LANG']['tl_table']['anything'],
 
'label'                => &$GLOBALS['TL_LANG']['tl_table']['anything'],
'exclude' => true,
+
'exclude' => true,
'inputType' => 'multiSelectWizard',
+
'inputType' => 'multiSelectWizard',
'eval' => array('mandatory'=>true,'columnsCallback'=>array('Class', 'Method'))
+
'eval' => array('mandatory'=>true,'columnsCallback'=>array('Class', 'Method'))
 
 
 
);
 
);
[/phpcode]
+
</source>
  
 
Wobei natürlich der Return-Wert genau das selbe Array sein muss, wie bei der "columnsData"-Variante.
 
Wobei natürlich der Return-Wert genau das selbe Array sein muss, wie bei der "columnsData"-Variante.
 +
 +
==Javascript-Fallback==
 +
Falls kein Javascript vorhanden ist, werden die Modifikationen (hinzufügen, löschen etc.) manuell ausgeführt. Viele Widgets führen dabei eine Datenbankoperation aus, was zwar in 99.9% aller Fälle korrekt ist, jedoch gibt es auch Ausnahmen, wie z.B. die Speicherung in der localconfig.php.
 +
Der MultiSelectWizard unterstützt sowohl die localconfig.php als auch eine beliebige Routine, welche per Callback definiert werden kann.
 +
 +
===localconfig.php===
 +
<source lang="php">
 +
'eval' => array('storeInLocalConfig'=>true)
 +
</source>
 +
 +
===Beliebige Routine===
 +
<source lang="php">
 +
'eval' => array('storeCallback'=>array('MyClass','MyMethod'))
 +
</source>
 +
<source lang="php">
 +
class MyClass extends Backend
 +
{
 +
  public function MyMethod($objWidget)
 +
  {
 +
  }
 +
}
 +
</source>
 +
 +
==Helper Methoden==
 +
In der Erweiterung wurden auch Helper-Methoden eingebaut, die man verwenden kann.
 +
 +
===getByKey===
 +
Die einfachere Methode ist mittels '''<code>MultiSelectWizard::getByKey($strSerialized, $strKey)</code>'''. Einfach den serialisierten Wert aus der Datenbank plus den gewünschten Key mitgeben (im obigen Beispiel z.B. "language") und man bekommt ein aggregiertes Array mit allen Werten von dieser Spalte.
 +
<source lang="php">
 +
$arrLanguages = MultiSelectWizard::getByKey($obj->myField, 'language');
 +
</source>
 +
 +
===getFilteredByKey (AND Verknüpfung)===
 +
Die etwas kompliziertere Methode ist mit '''<code>MultiSelectWizard::getFilteredByKey($strSerialized, $strKey, $arrAnotherKey)</code>'''. Der Anfang ist genau gleich: Man übergibt einen serialisierter Wert und Key. Dann kommt ein Array, mit dessen Hilfe man Return-Werte filtern kann.
 +
Wenn man also alle Sprachen möchte, die in der "secondcolumn" den Wert "option2" haben, nutzt man die Methode wie folgt:
 +
<source lang="php">
 +
$arrLanguagesOption2 = MultiSelectWizard::getFilteredByKey($obj->myField, 'language', array('secondcolumn'=>'option2'));
 +
</source>
 +
 +
Selbstverständlich kann man auch mehrere Filterangaben mitgeben. Einfach immer im Stil von "column_key" => "source_value". Als Rückgabe erhält man nur diejenigen Werte, die mit '''allen''' Filterparametern übereinstimmen.

Aktuelle Version vom 21. März 2011, 14:52 Uhr


Erweiterungs-Übersicht
Name des Entwicklers Yanick Witschi
Entwickler Webseite http://www.certo-net.ch
Version der Erweiterung 1.1.0
Kompatibilität mit Contao Version 2.9.0 - 2.9.3
Kompatibilität mit TYPOlight Version 2.7.0 - 2.8.4
Link zum Extension Repository http://www.contao.org/erweiterungsliste/view/MultiSelectWizard.html
Link zum Tracker http://contao-forge.org/projects/multiselectwizard


Dieses Widget ist dafür gedacht, mehrere Select-Inputs untereinander zu definieren.
Das Widget ist eigentlich das gleiche wie der MultiTextWizard, jedoch mit Dropdown-Feldern.

Aussehen

Das Modul sieht haargenau gleich aus wie der ModuleWizard vom Contao-Core. Das Problem bei diesem Wizard ist nur, dass die Quellen alle hardgecodet sind und es deshalb für Drittentwickler unbrauchbar ist.

MultiSelectWizard

Verwendung

Es gibt zwei Verwendungsmöglichkeiten. Entweder direkt mit der Angabe von "columnsData" im "eval"-Array oder mit einem Callback.

Angabe mit columnsData

$GLOBALS['TL_DCA']['tl_table']['fields']['anything'] = array
(
	'label'          => &$GLOBALS['TL_LANG']['tl_table']['anything'],
	'exclude'	 => true,
	'inputType'	 => 'multiSelectWizard',
	'eval'		 => array
				   (
				   		'mandatory'=>true,
				   		'columnsData'=> array
						(
							'columns' => array
							(
								'key'	=> 'language',
								'label' => $GLOBALS['TL_LANG']['MSC']['mylanguagelabel'],
								'source' => $this->getLanguages(),
								'style' => 'width:200px'
							),
							array
							(
								'key'	=> 'secondcolumn',
								'label' => $GLOBALS['TL_LANG']['MSC']['secondcolumn'],
								'source' => array
								(
									'option1'	=> $GLOBALS['TL_LANG']['MSC']['option1'],
									'option2'	=> $GLOBALS['TL_LANG']['MSC']['option2'],
									'option3'	=> $GLOBALS['TL_LANG']['MSC']['option3']
								),
								'style' => 'width:100px'
							),
							array
							(
								'key'	=> 'columnwithforeignkey',
								'label' => $GLOBALS['TL_LANG']['MSC']['columnwithforeignkey'],
								'source' => 'tl_table.column'
							)
						)
					)
);

Angabe mit Callback

$GLOBALS['TL_DCA']['tl_table']['fields']['anything'] = array
(
		'label'                 => &$GLOBALS['TL_LANG']['tl_table']['anything'],
		'exclude'		=> true,
		'inputType'		=> 'multiSelectWizard',
		'eval'			=> array('mandatory'=>true,'columnsCallback'=>array('Class', 'Method'))
 
);

Wobei natürlich der Return-Wert genau das selbe Array sein muss, wie bei der "columnsData"-Variante.

Javascript-Fallback

Falls kein Javascript vorhanden ist, werden die Modifikationen (hinzufügen, löschen etc.) manuell ausgeführt. Viele Widgets führen dabei eine Datenbankoperation aus, was zwar in 99.9% aller Fälle korrekt ist, jedoch gibt es auch Ausnahmen, wie z.B. die Speicherung in der localconfig.php. Der MultiSelectWizard unterstützt sowohl die localconfig.php als auch eine beliebige Routine, welche per Callback definiert werden kann.

localconfig.php

'eval'	=> array('storeInLocalConfig'=>true)

Beliebige Routine

'eval'	=> array('storeCallback'=>array('MyClass','MyMethod'))
class MyClass extends Backend
{
   public function MyMethod($objWidget)
   {
   }
}

Helper Methoden

In der Erweiterung wurden auch Helper-Methoden eingebaut, die man verwenden kann.

getByKey

Die einfachere Methode ist mittels MultiSelectWizard::getByKey($strSerialized, $strKey). Einfach den serialisierten Wert aus der Datenbank plus den gewünschten Key mitgeben (im obigen Beispiel z.B. "language") und man bekommt ein aggregiertes Array mit allen Werten von dieser Spalte.

$arrLanguages = MultiSelectWizard::getByKey($obj->myField, 'language');

getFilteredByKey (AND Verknüpfung)

Die etwas kompliziertere Methode ist mit MultiSelectWizard::getFilteredByKey($strSerialized, $strKey, $arrAnotherKey). Der Anfang ist genau gleich: Man übergibt einen serialisierter Wert und Key. Dann kommt ein Array, mit dessen Hilfe man Return-Werte filtern kann. Wenn man also alle Sprachen möchte, die in der "secondcolumn" den Wert "option2" haben, nutzt man die Methode wie folgt:

$arrLanguagesOption2 = MultiSelectWizard::getFilteredByKey($obj->myField, 'language', array('secondcolumn'=>'option2'));

Selbstverständlich kann man auch mehrere Filterangaben mitgeben. Einfach immer im Stil von "column_key" => "source_value". Als Rückgabe erhält man nur diejenigen Werte, die mit allen Filterparametern übereinstimmen.

Ansichten
Meine Werkzeuge

Contao Community Documentation

marcules: ich hätte gedacht du sieht mehr aus wie alan cox

Leo Unglaub
In anderen Sprachen
Navigation
Verstehen
Verwenden
Entwickeln
Verschiedenes
Werkzeuge