MetaPalettes: Unterschied zwischen den Versionen
Aus Contao Community Documentation
(Informationen zu Namespace zwischen Version 1 und 2 hinzugefügt.) |
(Hinweis zur Versionskompatibilität) |
||
Zeile 183: | Zeile 183: | ||
Ab Version 1.1 kann man vorhandene Paletten ganz einfach ergänzen. Dazu stehen 3 '''statische''' Methoden zur Verfügung. Ab Version 1.11 ist die Klasse unter dem Namespace "ContaoCommunityAlliance\MetaPalettes\MetaPalettes" zu finden, der auch in Version 2.0 verwendet wird. Die alten Namespaces "MetaPalettes" und "Bit3\MetaPalettes\MetaPalettes" stehen in Version 2 nicht mehr zur Verfügung! | Ab Version 1.1 kann man vorhandene Paletten ganz einfach ergänzen. Dazu stehen 3 '''statische''' Methoden zur Verfügung. Ab Version 1.11 ist die Klasse unter dem Namespace "ContaoCommunityAlliance\MetaPalettes\MetaPalettes" zu finden, der auch in Version 2.0 verwendet wird. Die alten Namespaces "MetaPalettes" und "Bit3\MetaPalettes\MetaPalettes" stehen in Version 2 nicht mehr zur Verfügung! | ||
+ | |||
+ | {Hinweis|Um möglichst mit anderen Erweiterungen kompatibel zu sein, empfiehlt es sich sowohl Version 2 und 1 zu unterstützen. Mit der Versionsanforderung "^2.0 || ^1.11" ist dies möglich. Selbstredend sollten dann nur Features verwendet werden, die in beiden Versionen funktionieren. } | ||
==MetaPalettes::appendTo(..)== | ==MetaPalettes::appendTo(..)== |
Version vom 8. Januar 2018, 13:24 Uhr
Mit der Erweiterung MetaPalettes lassen sich die DCA Paletten in einem Array, statt einem String definieren. Dadurch wird es einfacher die Paletten später zu verändern.
Erweiterungs-Übersicht | |
---|---|
Name des Entwicklers | Contao Community Alliance |
Version der Erweiterung | 2.0.0 |
Kompatibilität mit Contao Version | 4.4+ (Version 1.11 ist sowohl mit Contao >= 3.5 und Contao 4.4 kompatibel) |
Link zum Extension Repository | http://www.contao.org/erweiterungsliste/view/metapalettes.de.html |
MetaPalettes generiert aus einem Mehrdimensionalen-Array das im DCA festgelegt wird die Haupt- und Unterpaletten.
Inhaltsverzeichnis
Anwendungsbeispiel
Beispiel für eine MetaPalette aus der Erweiterung htaccess:
/** * DCA tl_htaccess */ $GLOBALS['TL_DCA']['tl_htaccess'] = array ( ... // meta pallettes 'metapalettes' => array ( 'default' => array ( 'htaccess_settings' => array(':hide', 'htaccess_load_settings'), 'htaccess_base' => array('htaccess_template'), 'htaccess_etag' => array('htaccess_etag_disable'), 'htaccess_mime' => array('htaccess_mime_types'), 'htaccess_deflate' => array('htaccess_deflate_files'), 'htaccess_headers' => array(), 'htaccess_expires' => array('htaccess_expires_default', 'htaccess_expires'), 'htaccess_custom' => array('htaccess_custom'), 'htaccess_rewrite' => array('htaccess_rewrite_rules', 'htaccess_rewrite_prepend_www', 'htaccess_rewrite_remove_www', 'htaccess_rewrite_gzip', 'htaccess_rewrite_suffix'), 'htaccess_h5bp' => array('htaccess_h5bp_ie_x_ua_compatible', 'htaccess_h5bp_cross_domain_ajax', 'htaccess_h5bp_concatenation_include', 'htaccess_h5bp_ie_flicker_fix') ) ), ... );
Anstelle einer palette
wird ein Feld metapalette
definiert. Die Schlüssel für das Array definieren wie gewohnt die Palette, jedoch werden die einzelnen Abschnitte mit den Feldern nicht als Zeichenkette, sondern als Array definiert. Der Schlüssel aus dem Meta Array beschreibt den Abschnitt, darunter kommt wiederum als Array die Felder.
Paletten definieren
Am besten zeigt sich der Zusammenhang an einem kleinen Beispiel:
$GLOBALS['TL_DCA']['tl_example'] = array ( ... 'metapalettes' => array ( 'default' => array ( 'chapter_one' => array('field_one', 'field_two'), 'chapter_two' => array(':hide', 'field_three') ) ) ... );
Daraus wird:
$GLOBALS['TL_DCA']['tl_example'] = array ( ... 'palettes' => array ( 'default' => '{chapter_one_legend},field_one,field_two;{chapter_two_legend:hide},field_three' ) ... );
Der Array Key definieren jeweils die Legende für den Abschnitt, das _legend wird dabei automatisch hinzugefügt.
:hide und andere Modifikatoren
Eine Palette kann versteckt angezeigt werden, wie oben chapter_two: {chapter_two_legend:hide}
.
Dazu muss einfach das Schlüsselwort :hide
in das Felder-Array hinzugefügt werden.
MetaPalettes betrachtet alle mit : beginnenden Felder als Modifikatoren, diese werden aus der Feldliste extrahiert.
Zur Zeit wird aber nur das Schlüsselwort :hide
unterstützt.
Subpaletten definieren
Auch Subpaletten lassen sich definieren:
$GLOBALS['TL_DCA']['tl_example'] = array ( ... 'metasubpalettes' => array ( 'field_three' => array('field_four', 'field_five') ) ... );
Daraus wird:
$GLOBALS['TL_DCA']['tl_example'] = array ( ... 'palettes' => array ( '__selector__' => array('field_three'), ... ), 'subpalettes' => array ( 'field_three' => 'field_four,field_five' ) ... );
Das __selector__
Array wird automatisch gefüllt, es ist also nicht mehr notwendig dieses Array von Hand zu befüllen.
SubSelectpaletten definieren
(seit Version 1.2.0)
Normalerweise verwendet Contao select
Felder, die als Selectoren markiert sind dazu eine Palette auszuwählen. Das ist allerdings nicht immer sinnvoll, weil man dann viele Paletten definieren muss, die oft stark redundant sind. Mit SubSelectpaletten ist es möglich, ähnlich den Subpaletten einer Checkbox Untermengen von Feldern den einzelnen Select Werten zuzuordnen.
$GLOBALS['TL_DCA']['tl_example'] = array ( ... 'metapalettes' => array ( 'default' => array ( 'example' => array('subselect_field') ) ), ... 'metasubselectpalettes' => array ( 'subselect_field' => array ( 'value1' => array('value1_subfield1', 'value1_subfield2'), 'value2' => array('value2_subfield1'), 'value3' => array('value3_subfield1', 'value3_subfield2', 'value3_subfield3') ) ), ... 'fields' => array ( 'subselect_field' => array ( 'label' => array('SubSelect Example', 'Switch field and see how the subfields changing'), 'inputType' => 'select', 'options' => array('value1', 'value2', 'value3'), 'eval' => array('submitOnChange'=>true) ) ) );
Um die Definition einfacher zu gestalten, kann man mit einem ! (Ausrufezeichen) vor dem Wert auch Negativ-Paletten definieren. Diese werden immer dann angezeigt, wenn ein Wert nicht ausgewählt ist.
$GLOBALS['TL_DCA']['tl_example'] = array ( ... 'metasubselectpalettes' => array ( 'subselect_field' => array ( 'value1' => array('value1_subfield1', 'value1_subfield2'), '!value2' => array('value2_subfield1'), 'value3' => array('value3_subfield1', 'value3_subfield2', 'value3_subfield3') ) ) ... );
Das Feld value2_subfield1 wird immer dann angezeigt, wenn value1 oder value3 ausgewählt sind.
Paletten ergänzen
Ab Version 1.1 kann man vorhandene Paletten ganz einfach ergänzen. Dazu stehen 3 statische Methoden zur Verfügung. Ab Version 1.11 ist die Klasse unter dem Namespace "ContaoCommunityAlliance\MetaPalettes\MetaPalettes" zu finden, der auch in Version 2.0 verwendet wird. Die alten Namespaces "MetaPalettes" und "Bit3\MetaPalettes\MetaPalettes" stehen in Version 2 nicht mehr zur Verfügung!
{Hinweis|Um möglichst mit anderen Erweiterungen kompatibel zu sein, empfiehlt es sich sowohl Version 2 und 1 zu unterstützen. Mit der Versionsanforderung "^2.0 || ^1.11" ist dies möglich. Selbstredend sollten dann nur Features verwendet werden, die in beiden Versionen funktionieren. }
MetaPalettes::appendTo(..)
Fügt eine Meta Palette am Ende hinzu.
\ContaoCommunityAlliance\MetaPalettes\MetaPalettes::appendTo('tl_settings', array( 'my_custom_settings' => array(':hide', 'my_custom_field1', 'my_custom_field2', 'my_custom_field3') ));
Fügt den Block my_custom_settings am Ende der default Palette von tl_settings hinzu.
Wenn eine andere Palette gewünscht ist, kann diese als 2. Parameter angegeben werden.
\ContaoCommunityAlliance\MetaPalettes\MetaPalettes::appendTo('tl_content', 'text', array( 'my_custom_settings' => array(':hide', 'my_custom_field1', 'my_custom_field2', 'my_custom_field3') ));
Fügt den Block my_custom_settings am Ende der text Palette von tl_content hinzu.
MetaPalettes::appendBefore(..) & MetaPalettes::appendAfter(..)
Fügt eine Meta Palette vor oder nach einem Block ein.
\ContaoCommunityAlliance\MetaPalettes\MetaPalettes::appendBefore('tl_settings', 'title', array( 'my_custom_settings' => array(':hide', 'my_custom_field1', 'my_custom_field2', 'my_custom_field3') ));
Fügt den Block my_custom_settings vor den Block title_legend der default Palette von tl_settings hinzu.
Wenn eine andere Palette gewünscht ist, kann diese als 3. Parameter angegeben werden.
\ContaoCommunityAlliance\MetaPalettes\MetaPalettes::appendBefore('tl_content', 'published', 'text', array( 'my_custom_settings' => array(':hide', 'my_custom_field1', 'my_custom_field2', 'my_custom_field3') ));
Fügt den Block my_custom_settings vor den Block published_legend der text Palette von tl_content hinzu.
Die Methode MetaPalettes::appendAfter(..)
verhält sich äquivalent zu MetaPalettes::appendBefore(..)
, nur dass der Block nicht vor, sondern nach dem anderen Block eingefügt wird.
Hinweis: Sollte der Block vor oder nach dem eingefügt werden soll nicht gefunden werden, wird die Palette am Ende hinzugefügt (wie bei MetaPalettes::appendTo(..) )
|
MetaPalettes::appendFields(..) & MetaPalettes::prependFields(..)
(seit Version 1.2.0)
Fügt eine Felder am Anfang oder Ende eines Blocks hinzu.
\ContaoCommunityAlliance\MetaPalettes\MetaPalettes::appendFields('tl_settings', 'title', array( array('my_custom_field1', 'my_custom_field2', 'my_custom_field3') ));
Fügt dem Block title_legend der default Palette die Felder my_custom_field1, my_custom_field2 und my_custom_field3 hinzu.
Wenn eine andere Palette gewünscht ist, kann diese als 2. Parameter angegeben werden.
\ContaoCommunityAlliance\MetaPalettes\MetaPalettes::prependFields('tl_content', 'text', 'title', array( array('my_custom_field1', 'my_custom_field2', 'my_custom_field3') ));
Fügt dem Block title_legend der text Palette die Felder my_custom_field1, my_custom_field2 und my_custom_field3 am Anfang hinzu.
Paletten vererben
(seit Version 1.3.0)
Paletten lassen sich mit einfachen regeln vererben, die ererbten Regeln
/** * DCA tl_example */ $GLOBALS['TL_DCA']['tl_example'] = array ( ... // meta pallettes 'metapalettes' => array ( '_base_' => array ( 'chapter_one' => array('field_one', 'field_two'), 'chapter_two' => array(':hide', 'field_three') ), 'default extends _base_' => array ( 'chapter_three' => array('field_four', 'field_five') ) ), ... );
Hinweis: Die _X_ Notation mit den Unterstrichen ist nicht obligatorisch. Sie soll nur zeigen, dass diese Palette niemals direkt verwendet wird sondern nur als Basis für eine andere Palette dient! |
Daraus wird:
$GLOBALS['TL_DCA']['tl_example'] = array ( ... 'palettes' => array ( '_base_' => '{chapter_one_legend},field_one,field_two;{chapter_two_legend:hide},field_three', 'default' => '{chapter_one_legend},field_one,field_two;{chapter_two_legend:hide},field_three;{chapter_three_legend},field_four,field_five' ) ... );
Um eine Palette zu erben wird also die einfache Notation <palette> extends <base> verwendet.
fein granulare Vererbung
Gruppe überschreiben
/** * DCA tl_example */ $GLOBALS['TL_DCA']['tl_example'] = array ( ... // meta pallettes 'metapalettes' => array ( '_base_' => array ( 'chapter_one' => array('field_one', 'field_two'), 'chapter_two' => array(':hide', 'field_three') ), 'default extends _base_' => array ( 'chapter_two' => array('field_four') ) ), ... );
→ die Gruppe chapter_two enthält später das Feld field_four.
Löschen von Gruppen
/** * DCA tl_example */ $GLOBALS['TL_DCA']['tl_example'] = array ( ... // meta pallettes 'metapalettes' => array ( '_base_' => array ( 'chapter_one' => array('field_one', 'field_two'), 'chapter_two' => array(':hide', 'field_three') ), 'default extends _base_' => array ( 'chapter_two' => array() ) ), ... );
→ die Gruppe chapter_two wird gelöscht (leer gesetzt und damit nicht angezeigt).
Gruppe positionieren
/** * DCA tl_example */ $GLOBALS['TL_DCA']['tl_example'] = array ( ... // meta pallettes 'metapalettes' => array ( '_base_' => array ( 'chapter_one' => array('field_one', 'field_two'), 'chapter_two' => array(':hide', 'field_three') ), 'default extends _base_' => array ( 'chapter_three before chapter_two' => array('field_four') ) ), ... );
→ die Gruppe chapter_three wird vor der Gruppe chapter_two eingefügt. Mit dem after Schlüsselwort wird die Gruppe nach einer anderen Gruppe eingefügt.
Einzelne Felder hinzufügen
/** * DCA tl_example */ $GLOBALS['TL_DCA']['tl_example'] = array ( ... // meta pallettes 'metapalettes' => array ( '_base_' => array ( 'chapter_one' => array('field_one', 'field_two'), 'chapter_two' => array(':hide', 'field_three') ), 'default extends _base_' => array ( '+chapter_two' => array('field_four') ) ), ... );
→ der Gruppe chapter_two wird das Feld field_four am Ende hinzugefügt.
Einzelne Felder entfernen
/** * DCA tl_example */ $GLOBALS['TL_DCA']['tl_example'] = array ( ... // meta pallettes 'metapalettes' => array ( '_base_' => array ( 'chapter_one' => array('field_one', 'field_two'), 'chapter_two' => array(':hide', 'field_three') ), 'default extends _base_' => array ( '-chapter_two' => array('field_three') ) ), ... );
→ aus der Gruppe chapter_two wird das Feld field_three entfernt.
Felder an bestimmter Position hinzufügen und entfernen
/** * DCA tl_example */ $GLOBALS['TL_DCA']['tl_example'] = array ( ... // meta pallettes 'metapalettes' => array ( '_base_' => array ( 'chapter_one' => array('field_one', 'field_two'), 'chapter_two' => array(':hide', 'field_three') ), 'default extends _base_' => array ( '+chapter_one' => array('field_four before field_one', '-field_two') ) ), ... );
→ fügt der Gruppe chapter_two das Feld field_four vor dem Feld field_one hinzu und entfernt das Feld field_two. Mit after kann ein Feld auch nach einem anderen hinzugefügt werden.
Der Operator (+/-) im Palettennamen definiert die Operation für alle Felder ohne eigenem Operator. Die Operatoren können also auch umgekehrt werden.
/** * DCA tl_example */ $GLOBALS['TL_DCA']['tl_example'] = array ( ... // meta pallettes 'metapalettes' => array ( '_base_' => array ( 'chapter_one' => array('field_one', 'field_two'), 'chapter_two' => array(':hide', 'field_three') ), 'default extends _base_' => array ( '-chapter_one' => array('+field_four before field_one', 'field_two') ) ), ... );
Hat die gleiche Bedeutung wie im vorherigen Beispiel.