typo3 tca benutzerfreundlich einrichten
DESCRIPTION
Vortrag zum Thema TYPO3 TCA vom TYPO3 Camp MünchenTRANSCRIPT
Peter Schuhmann, Dynamic Lines GmbH
TCATYPO3 Configuration Arraybenutzerfreundlich einrichten
Peter Schuhmann, Dynamic Lines GmbH
zusätzliches Label immer anzeigen
'label' => 'lastname','label_alt' => 'firstname','label_alt_force' => TRUE,
Ergebnis
ext_tables.php
Peter Schuhmann, Dynamic Lines GmbH
Tabs verwenden
'dividers2tabs' => TRUE,
Ergebnis
ext_tables.php
'types' => array('0' => array('showitem' => 'hidden;;1;;1-1-1, ctype , lastname, ,--div--;Address,address, street, zip, city')
),
tca.php
Ein Tab wird mit „--div--;<tabname>,“ deklariert. Für <tabname> kann auch auf Locallang zugegriffen werden. Wird der erste Tab nicht manuell festgelegt, wird dieser als „General“ festgelegt.
Peter Schuhmann, Dynamic Lines GmbH
Hidden Fields
Beispiel
Das TCA bietet kein direktes Feld, welches als Hidden Field deklariert werden kann. Da im TCA unter types festgelegten Felder die Sichtbarkeit der Felder steuert, kann man das Feld, welches nicht angezeigt werden soll einfach aus der Typ-Deklaration entfernen. Mittels Hook kann das Feld dann nach wie vor beschrieben werden.
Ein Hidden Field kann beispielsweise genutzt werden um eine eigene Darstellung im Listen-Modul zu ermöglichen. Dieses Feld kann dann als Label für die Tabelle genutzt werden um Redakteuren den Zugriff zu vereinfachen. Beispielsweise kann so neben dem Vor- und Nachnamen auch der Firmenname mit ausgegeben werden.
Peter Schuhmann, Dynamic Lines GmbH
Types einrichten
$TCA['<tabelname>'] = array('ctrl' => $TCA['<tabelname>']['ctrl'],'interface' => array(
'showRecordFieldList' => 'hidden,firstname,lastname,address,street,zip,city,ctype'),'feInterface' => $TCA['<tabelname>']['feInterface'],
'columns' => array(...
'ctype' => array('exclude' => 0,'label' => 'LLL:EXT:<extname>/locallang_db.xml:tx_<extname>_order.ctype','config' => array(
'type' => 'select','items' => array(
/* Label der unterschiedlichen Typen */array('LLL:EXT:<extname>/locallang_db.xml:tx_<extname>_order.ctype.I.0', '0'),array('LLL:EXT:<extname>/locallang_db.xml:tx_<extname>_order.ctype.I.1', '1'),
),'size' => 1,'maxitems' => 1,
))...)
'types' => array(/* Welche Felder sollen bei welchem Typen angezeigt werden (Reihenfolge entscheidend) (0 = Default) */
'0' => array('showitem' => 'hidden;;1;;1-1-1, ctype , lastname,address, street, zip, city'),'1' => array('showitem' => 'hidden;;1;;1-1-1, ctype, lastname')
),'palettes' => array(
'1' => array('showitem' => ''))
);
) ),
tca.php
5
Peter Schuhmann, Dynamic Lines GmbH
Types einrichten
'type' => 'ctype',
Ergebnis
ext_tables.php
Mit diesem Befehl wird angegeben, welches Feld für die Typumschaltung zuständig ist. Ändert sich der Wert dieses Feldes, wird die Seite neugeladen. In diesem Fall lautet der Name des Feldes ctype.
Peter Schuhmann, Dynamic Lines GmbH
IRRE
Nachteil
VorteilLeichte Pflege der Daten für den Anwender. Die Daten befinden sich dort, wo man sie erwartet.
Angelegte Kindelemente werden in der Listenansicht angezeigt. Bearbeitet der Anwender einen Kinddatensatz direkt, wird die Eltern-ID entfernt und der Kinddatensatz wird zum Hauptdatensatz.
Peter Schuhmann, Dynamic Lines GmbH
IRRE
ext_localconf.php
LösungIn der Datei „typo3/class.db_list.inc“ - die für die Ausführung der Datenbankabfrage der Listenansicht verantwortlich ist - befindet sich ein Hook, mit welchem die Darstellung angepasst werden kann. Alternativ die Extension „tca_addWhere“ aus dem Repository laden (wird die nächsten Tage online gestellt).
<?phpclass tx_tcaaddwhere_hook {
public function makeQueryArray_post(&$queryParts, $piObj, $table, $id, $addWhere, $fieldList, $_params) {
if ($table == 'tx_demo_domain_model_category') {$queryParts['WHERE'] .= ' AND parentcategory = 0';}
}}?>
$TYPO3_CONF_VARS['SC_OPTIONS']['typo3/class.db_list.inc']['makeQueryArray'][] = 'EXT:tca_addWhere/class.tx_tcaaddwhere_hook.php:tx_tcaaddwhere_hook';
class.tx_tcaaddwhere_hook.php
Ergebnis
Peter Schuhmann, Dynamic Lines GmbH
'category' => array('exclude' => 1,'label' => 'LLL:EXT:demo/Resources/Private/Language/locallang_db.xml:tx_demo_domain_model_course.category','config' => array(
'type' => 'select','foreign_table' => 'tx_demo_domain_model_category','MM' => 'tx_demo_course_category_mm','size' => 10,'autoSizeMax' => 30,'maxitems' => 9999,'multiple' => 0,'renderMode' => 'tree','treeConfig' => array(
'parentField' => 'parentcategory','appearance' => array(
'expandAll' => TRUE,'showHeader' => TRUE,'maxLevels' => 999,
))
),),
Treeview rendern
Ergebnis
tca.php
Voraussetzung ist, dass die Tabelle tx_demo_domain_model_category auf sich selbst verweist.
Peter Schuhmann, Dynamic Lines GmbH
Links
Core Documentationhttp://typo3.org/documentation/document-library/core-documentation/doc_core_api/4.1.0/view/4/2/