<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.stephanschlegel.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=94.216.243.65</id>
	<title>Wikizone - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.stephanschlegel.de/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=94.216.243.65"/>
	<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Spezial:Beitr%C3%A4ge/94.216.243.65"/>
	<updated>2026-06-21T10:47:48Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=TYPO3_Hook_im_Backend_beim_Speichern_von_Datens%C3%A4tzen&amp;diff=18772</id>
		<title>TYPO3 Hook im Backend beim Speichern von Datensätzen</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=TYPO3_Hook_im_Backend_beim_Speichern_von_Datens%C3%A4tzen&amp;diff=18772"/>
		<updated>2011-07-25T08:51:58Z</updated>

		<summary type="html">&lt;p&gt;94.216.243.65: Die Seite wurde neu angelegt: „Quelle: http://www.koller-webprogramming.ch/tipps-tricks/typo3-extension-entwicklung/hook-im-backend/ (Zugriff: 6/2011)   Hook im Backend  Dieses Beispiel zeigt w…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Quelle: http://www.koller-webprogramming.ch/tipps-tricks/typo3-extension-entwicklung/hook-im-backend/ (Zugriff: 6/2011)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hook im Backend&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel zeigt wie man eine Reaktion erreicht nachdem man einen Datensatz im Backend abspeichert.&lt;br /&gt;
Dazu gibt es einen Hook der beim speichern eines Datensatzes im Backend ausgeführt wird.&lt;br /&gt;
&lt;br /&gt;
Hook in der ext_localconf.php Registrieren&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$GLOBALS[&amp;#039;TYPO3_CONF_VARS&amp;#039;][&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;t3lib/class.t3lib_tcemain.php&amp;#039;][&amp;#039;processDatamapClass&amp;#039;][] = &amp;#039;EXT:ext_name/hooks/class.tx_ext_name_tcemainhooks.php:tx_ext_name_tcemainhooks&amp;#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wird der entsprechende Datensatz nun im Backend gespeichert, wird im Hintergrund der Hook ausgeführt, in unserem Fall also die Datei class.tx_ext_name_tcemainhooks.php.&lt;br /&gt;
&lt;br /&gt;
Allerdings wird hier zu Anschauungszwecken nichts anderes gemacht als der Array ausgegeben der die relevanten Daten beherbergt, also die Daten des gespeicherten Datensatzes.&lt;br /&gt;
&lt;br /&gt;
Nun kann in der Datei hooks/class.tx_ext_name_tcemainhooks.php z.B. ein Feld des gespeicherten Datensatzes z.B. nach einem Wert abgefragt werden, wo dann je nachdem die entsprechende Funktion aufgerufen wird.&lt;br /&gt;
&lt;br /&gt;
So ist es möglich eines der Felder zu überschreiben, Mail auszulösen, oder sonst eine Funktion auszuführen und zwar unmittelbar nachdem der Datensatz im Backend gespeichert wurde.&lt;br /&gt;
&lt;br /&gt;
Die Datei hooks/class.tx_ext_name_tcemainhooks.php&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class tx_ext_name_tcemainhooks {&lt;br /&gt;
&lt;br /&gt;
function processDatamap_preProcessFieldArray(&amp;amp;$FieldArray, $table, $id, &amp;amp;$tceobj) {&lt;br /&gt;
    print_r($FieldArray); &lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>94.216.243.65</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_Extensions_-_Backend_Formulare_und_TCA_Konfiguration&amp;diff=18771</id>
		<title>Typo3 Extensions - Backend Formulare und TCA Konfiguration</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_Extensions_-_Backend_Formulare_und_TCA_Konfiguration&amp;diff=18771"/>
		<updated>2011-07-25T08:50:37Z</updated>

		<summary type="html">&lt;p&gt;94.216.243.65: /* Default Werte in Backend-Feldern */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Aussehen von Backend Formularen ===&lt;br /&gt;
&lt;br /&gt;
Definiert im &amp;#039;&amp;#039;&amp;#039;TCA Array&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
In Extensions wird es in den Dateien &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ext_tables.php&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;tca.php&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
festgelegt. In tca.php wird z.B. mit&lt;br /&gt;
 ...&amp;quot;ctrl&amp;quot; =&amp;gt; $TCA[&amp;quot;tx_pupmanager_members&amp;quot;][&amp;quot;ctrl&amp;quot;],...&lt;br /&gt;
der Teil ctrl des TCA Arrays aus ext_tables übernommen. Man muß also nur in diesen beiden Dateien die Werte verändern um auf verschiedene Weise das Backend zu konfigurieren. Die Details findet man in:&lt;br /&gt;
&lt;br /&gt;
http://typo3.org/documentation/document-library/core-documentation/doc_core_api/&lt;br /&gt;
&lt;br /&gt;
Die Ebenen des Arrays sind wie folgt angelegt.&lt;br /&gt;
&lt;br /&gt;
=== Verschiedenes ===&lt;br /&gt;
Bereich &amp;#039;&amp;#039;&amp;#039;ctrl&amp;#039;&amp;#039;&amp;#039; wird immer gleich geladen die anderen BEreiche erst dynamisch. Wenn sie benutzt werden mit &lt;br /&gt;
&lt;br /&gt;
 t3lib_loadTCA(&amp;#039;your_table_name&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
nachladen&lt;br /&gt;
&lt;br /&gt;
=== Level 1 ===&lt;br /&gt;
Die &amp;#039;&amp;#039;&amp;#039;Schlüssel entsprechen den DB-Tabellen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Grundsätzliche Einstellungen in &amp;#039;&amp;#039;ext_tables.php&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== Level 2 und 3 ===&lt;br /&gt;
&lt;br /&gt;
Diese beziehen sich auf die &amp;#039;&amp;#039;&amp;#039;Struktur eines Tabelleneintrags&amp;#039;&amp;#039;&amp;#039; (so sieht also ein Datensatz im Backend aus) und werden meist in &amp;#039;&amp;#039;tca.php&amp;#039;&amp;#039; festgelegt.&lt;br /&gt;
&lt;br /&gt;
== Validierung von Backend Formularen ==&lt;br /&gt;
Für Backendfelder steht der Bereich eval zur Verfügung. Dort gibt es vorgefertigte Evaluierungsmöglichkeiten. Es können auch mittels einer Extension eigene JavaScripte zur Evaluierung gebastelt werden. Eine Beispielextension steht auch zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
http://typo3.org/documentation/api/&lt;br /&gt;
&lt;br /&gt;
 [&amp;#039;columns&amp;#039;][fieldname][&amp;#039;config&amp;#039;] / TYPE: &amp;quot;input&amp;quot;&lt;br /&gt;
 eval=&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
=== Eine Klasse für eigene Validierung einbauen ===&lt;br /&gt;
Folgende Schritte sind notwendig:&lt;br /&gt;
# Eine &amp;#039;&amp;#039;&amp;#039;Klasse zur Evaluierung&amp;#039;&amp;#039;&amp;#039; in der Extension anlegen in der Art: class.tx_meineextension_extraeval1&lt;br /&gt;
&lt;br /&gt;
## Diese Klasse enthält &amp;#039;&amp;#039;&amp;#039;zwei Funktionen&amp;#039;&amp;#039;&amp;#039;. Eine für die Evaluierung per &amp;#039;&amp;#039;&amp;#039;JavaScript&amp;#039;&amp;#039;&amp;#039; bei der Eingabe und eine &amp;#039;&amp;#039;&amp;#039;php&amp;#039;&amp;#039;&amp;#039; Evaluierung nachdem der Datensatz gespeichert wurde. Unten steht die Beispielklasse aus der typo3.org API Dokumentation aus; sie fügt den eingegebenen Werten die unten gezeigten Strings hinzu.&lt;br /&gt;
&lt;br /&gt;
## Die Funktion &amp;#039;&amp;#039;returnFieldJS()&amp;#039;&amp;#039; gibt den &amp;#039;&amp;#039;&amp;#039;JavaScript Code&amp;#039;&amp;#039;&amp;#039; zurück. Im JavaScript steht die Variable &amp;#039;&amp;#039;value&amp;#039;&amp;#039; zur Verfügung die den Wert des Feldes enthält.&lt;br /&gt;
&lt;br /&gt;
## Die Funktion &amp;#039;&amp;#039;evaluateFieldValue ($value, $is_in, &amp;amp;$set)&amp;#039;&amp;#039; hat folgende Übergabewerte: &amp;#039;&amp;#039;$value&amp;#039;&amp;#039; ist der Feldinhalt, &amp;#039;&amp;#039;$is_in&amp;#039;&amp;#039; enthält die Werte aus der Typo3 Eval Funktion is_in (Filtert Zeichen aus), &amp;#039;&amp;#039;&amp;amp;$set&amp;#039;&amp;#039; ist Boolean und legt fest ob der Wert in die Datenbank geschrieben wird oder nicht. Wird per Referenz übergeben. &lt;br /&gt;
&lt;br /&gt;
# In ext_localconf.php muß die Klasse registriert werden damit sie zur Verfügung steht&lt;br /&gt;
&lt;br /&gt;
# In tca.php kann nun den Backendeingabefeldern die Evaluierung zugewiesen werden.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;class.tx_exampleextraevaluations_extraeval1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
class tx_exampleextraevaluations_extraeval1 {&lt;br /&gt;
    function returnFieldJS() {&lt;br /&gt;
        return &amp;#039;&lt;br /&gt;
        return value + &amp;quot; [added by JS]&amp;quot;;&lt;br /&gt;
        &amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
    function evaluateFieldValue($value, $is_in, &amp;amp;$set) {&lt;br /&gt;
        return $value.&amp;#039; [added by PHP]&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
# Register new evaluation method in the $TYPO3_CONF_VARS[&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;tce&amp;#039;][&amp;#039;formevals&amp;#039;] array.&lt;br /&gt;
$TYPO3_CONF_VARS[&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;tce&amp;#039;][&amp;#039;formevals&amp;#039;][&amp;#039;tx_exampleextraevaluations_extraeval1&amp;#039;] = &amp;#039;EXT:example_extraevaluations/class.tx_pupmanager_extraeval1.php&amp;#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Beispiel zum Aufruf in tca.php &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
 &amp;#039;eval&amp;#039; =&amp;gt; &amp;#039;trim,tx_exampleextraevaluations_extraeval1&amp;#039;,&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Felder in Abhängigkeit von anderen anzeigen oder verstecken ==&lt;br /&gt;
===Möglichkeit 1: in der Felddefinition===&lt;br /&gt;
Für jedes Feld das eventuell versteckt werden soll, wird eine Bedingung angegeben&lt;br /&gt;
Im TCA (tca.php) unter&lt;br /&gt;
 [&amp;#039;columns&amp;#039;][fieldname] &lt;br /&gt;
 displayCond&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiele:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This example will require the field named &amp;quot;tx_templavoila_ds&amp;quot; to be true, otherwise the field for which this rule is set will not be displayed:&lt;br /&gt;
&lt;br /&gt;
 &amp;#039;displayCond&amp;#039; =&amp;gt; &amp;#039;FIELD:tx_templavoila_ds:REQ:true&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
This example requires the extension &amp;quot;static_info_tables&amp;quot; to be loaded, otherwise the field is not displayed. (This is useful if the field makes a look-up on a table coming from another extension!)&lt;br /&gt;
&lt;br /&gt;
 &amp;#039;displayCond&amp;#039; =&amp;gt; &amp;#039;EXT:static_info_tables:LOADED:true&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
Wie man sieht ist der String mit : in verschiedene Bereiche aufgeteilt. &lt;br /&gt;
Teil 1 ist der Regeltyp. FIELD bezieht sich z.B. auf ein Feld im selben Datensatz. Je nachdem was im ersten Teil steht kann man weitere Teile angeben.&lt;br /&gt;
&lt;br /&gt;
http://typo3.org/documentation/document-library/core-documentation/doc_core_api/4.1.0/view/4/2/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Möglichkeit 2: mit Paletten===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Möglichkeit 3: ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Reihenfolge der Felder im Backend ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[&amp;#039;types&amp;#039;][key]&lt;br /&gt;
Beispiel:&lt;br /&gt;
 &amp;#039;types&amp;#039; =&amp;gt; Array (&lt;br /&gt;
 &amp;#039;0&amp;#039; =&amp;gt; Array(&amp;#039;showitem&amp;#039; =&amp;gt; &amp;#039;hidden;;1, type, title, test_template&amp;#039;),&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The key &amp;quot;showitem&amp;quot; lists the order in which to define the fields: &amp;quot;hidden, type, title, test_template&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(nicht mit showRecordFieldList verwechseln - das legt nur Fest was überhaupt angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
== Default Werte in Backend-Feldern ==&lt;br /&gt;
useColumnsForDefaultValues&lt;br /&gt;
&lt;br /&gt;
Wenn Daten auf komplexere Weise im Backend manipuliert werden sollen geht es z.B. so:&lt;br /&gt;
&lt;br /&gt;
[[TYPO3 Hook im Backend beim Speichern von Datensätzen]]&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
[[Backend: Default-Werte per TSConfig setzen]]&lt;br /&gt;
&lt;br /&gt;
== Tabs in Backend Formularen ==&lt;br /&gt;
dividers2tabs(in types)&lt;br /&gt;
&lt;br /&gt;
== Funktionen vor oder nach der Backendeingabe ausführen ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Verwendete Dateien:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ext_localconf.php (register hook here)&lt;br /&gt;
class.tx_myExtension_post-or whatever.php (functionality)&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Dies kann mit Hooks realisiert werden.&lt;br /&gt;
&lt;br /&gt;
http://typo3.org/development/articles/how-to-use-existing-hooks/page/2/&lt;br /&gt;
&lt;br /&gt;
Daten die vom Backend übermittelt werden werden in der Klasse t3lib_tcemain bearbeitet. Das wäre der geeignete Ort um einzugreifen.&lt;br /&gt;
Diese liegt in &amp;#039;&amp;#039;&amp;#039;t3lib/class.t3lib_tcemain.php&amp;#039;&amp;#039;&amp;#039;. Jetzt wäre es natürlich blöde in den Core Dateien herumzufuhrwerken. Aber es gibt ja das Hook Konzept, mit dem ein Programmierer Schnittstellen bereitstellen kann um die Funktionalität zu erweitern. Netterweise hat ein lieber Core Programmierer schon zwei Hooks vorgesehen die vor bzw. nachdem speichern der Daten im Backend genutzt werden können.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es gibt 2 Möglichkeiten den Hook zu nutzen. &amp;#039;&amp;#039;&amp;#039;callUserFunction&amp;#039;&amp;#039;&amp;#039; und the &amp;#039;&amp;#039;&amp;#039;getUserObj&amp;#039;&amp;#039;&amp;#039;. Wobei zweitere die schickere (weil ansatzweise Objektorientiert) ist. Auf die callUserFunction gehen wir zunächst hier nicht ein.&lt;br /&gt;
&lt;br /&gt;
Die &amp;#039;&amp;#039;&amp;#039;getUserObj Methode&amp;#039;&amp;#039;&amp;#039; stellt uns auch der folgende Hook zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Schauen wir uns den Code des Post Process Hooks in der Datei class.t3li_tcemain.php an:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Hook: processDatamap_postProcessFieldArray&lt;br /&gt;
reset($hookObjectsArr);&lt;br /&gt;
while (list(,$hookObj) = each($hookObjectsArr)) {&lt;br /&gt;
    if (method_exists ($hookObj, &amp;#039;processDatamap_postProcessFieldArray&amp;#039;)) {&lt;br /&gt;
        $hookObj-&amp;gt;processDatamap_postProcessFieldArray ($status, $table, $id, $fieldArray, $this);&lt;br /&gt;
    } &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im obigen Code-Schnipsel aus TCE-Main wird ein Array $hookObjectsArr übergeben und eine Methode processDatamap_postProcessFieldArray wird aufgerufen wenn dieses Existiert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1. Klasse schreiben ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wir schreiben einfach eine Klasse&amp;#039;&amp;#039;&amp;#039; in der wir die Funktion processDatamap_postProcessFieldArray überschreiben und hier unserer eigene Funktion bereitstellen.&lt;br /&gt;
&lt;br /&gt;
2.1 Funktion Registrieren&lt;br /&gt;
in der Core Datei wird die &amp;#039;&amp;#039;&amp;#039;Funktion im Globalen Array $TYPO3_CONF_VARS registriert&amp;#039;&amp;#039;&amp;#039;. Genauso müssen wir das mit unserer neuen Funktion machen. Die neuen Methoden Registrieren wir in &amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Typo 3 hat seine Klasse so registriert:&lt;br /&gt;
&lt;br /&gt;
process_datamap function des Typo3 Core (obige Datei):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 // First prepare user defined objects (if any) for hooks which extend this function:&lt;br /&gt;
$hookObjectsArr = array();&lt;br /&gt;
if (is_array ($TYPO3_CONF_VARS[&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;t3lib/class.t3lib_tcemain.php&amp;#039;][&amp;#039;processDatamapClass&amp;#039;])) {&lt;br /&gt;
    foreach ($TYPO3_CONF_VARS[&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;t3lib/class.t3lib_tcemain.php&amp;#039;][&amp;#039;processDatamapClass&amp;#039;] as $classRef) {&lt;br /&gt;
        $hookObjectsArr[] = &amp;amp;t3lib_div::getUserObj ($classRef);&lt;br /&gt;
    } &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unserer neue Klasse soll genauso eine Instanz des Objekts in genau diesem Array $hookObjectsArr sein.&lt;br /&gt;
&lt;br /&gt;
Deshalb registrieren wir in der Datei &amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039;unserer Extension unsere Datei indem wir die Funktion genau wie oben im Array aufnehmen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $GLOBALS [&amp;#039;TYPO3_CONF_VARS&amp;#039;][&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;t3lib/class.t3lib_tcemain.php&amp;#039;][&amp;#039;processDatamapClass&amp;#039;][] = &amp;#039;tx_myextension_tcemainprocdm&amp;#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2.2. Klassendatei laden ===&lt;br /&gt;
Jezt müssen wir noch aufpassen das die Klassendatei auch geladen wird wenn sie benötigt wird. Dazu können wir ein require_once statement in ext_tables.php unserer Extension hinzufügen oder besser folgendes machen.&lt;br /&gt;
&lt;br /&gt;
=== 2.3. Laden und Registrieren der Klasse gleichzeitig ===&lt;br /&gt;
&lt;br /&gt;
Die getUserObj Methode erlaubt uns die beiden Schritte gleichzeitig auszuführen. Das können wir dann beides in &amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039; machen. Dann sieht die Zeile von vorhin &amp;#039;&amp;#039;&amp;#039;etwas anders&amp;#039;&amp;#039;&amp;#039; aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$GLOBALS [&amp;#039;TYPO3_CONF_VARS&amp;#039;][&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;t3lib/class.t3lib_tcemain.php&amp;#039;][&amp;#039;processDatamapClass&amp;#039;][] = &amp;#039;EXT:myextension/class.myextension_tcemainprocdm.php:tx_myextension_tcemainprocdm&amp;#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das hat zudem den Vorteil, das die Klasse nur dann aufgerufen wird wenn sie auch benötigt wird.&lt;br /&gt;
 &lt;br /&gt;
Another great advantage of this method is that your file will only be included if it&amp;#039;s really used! &lt;br /&gt;
postProcessFieldArray&amp;quot; in der Rubrik &amp;quot;processDatamap&lt;br /&gt;
&lt;br /&gt;
=== Wie Programmiert man ? ===&lt;br /&gt;
Für die Programmierung steht die Typo3 Core Engine zur Verfügung (TCE)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Das Konzept:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
When you are using TCE from your backend applications you need to prepare two arrays of information which contain the instructions to TCEmain of what actions to perform. They fall into two categories: Data and Commands.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Data&amp;quot; is when you want to write information to a database table or create a new record.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Commands&amp;quot; is when you want to move, copy or delete a record in the system.&lt;br /&gt;
&lt;br /&gt;
The data and commands are created as multidimensional arrays and to understand the API of TCEmain you simply need to understand the hierarchy of these two arrays.&lt;br /&gt;
&lt;br /&gt;
Commands Array ($cmd):&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Syntax:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
$cmd[ tablename ][ uid ][ command ] = value&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unsere Funktion:&lt;br /&gt;
Wird aufgerufen wenn Datensatz gespeichert wird&lt;br /&gt;
Parameter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$status-&amp;gt;update oder new, &lt;br /&gt;
$table -&amp;gt; die im Moment bearbeitete Tabelle, &lt;br /&gt;
$id-&amp;gt; bei status new ein Zufallscode Newxxxxx sonst die uid des Datensatzen, &lt;br /&gt;
&amp;amp;$fieldArray -&amp;gt; hier kann man einen Wert aus dem gerade zu speichernden Datensatz überschreiben&lt;br /&gt;
$reference -&amp;gt; das komplette cObj&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class tx_myextension_tcemainprocdm {&lt;br /&gt;
&lt;br /&gt;
    function processDatamap_postProcessFieldArray ($status, $table, $id, &amp;amp;$fieldArray, &amp;amp;$this) {&lt;br /&gt;
&lt;br /&gt;
        // here comes the code&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>94.216.243.65</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_Extensions_-_Backend_Formulare_und_TCA_Konfiguration&amp;diff=18770</id>
		<title>Typo3 Extensions - Backend Formulare und TCA Konfiguration</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_Extensions_-_Backend_Formulare_und_TCA_Konfiguration&amp;diff=18770"/>
		<updated>2011-07-25T08:50:24Z</updated>

		<summary type="html">&lt;p&gt;94.216.243.65: /* Default Werte in Backend-Feldern */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Aussehen von Backend Formularen ===&lt;br /&gt;
&lt;br /&gt;
Definiert im &amp;#039;&amp;#039;&amp;#039;TCA Array&amp;#039;&amp;#039;&amp;#039;. &lt;br /&gt;
&lt;br /&gt;
In Extensions wird es in den Dateien &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ext_tables.php&amp;#039;&amp;#039;&amp;#039; und &amp;#039;&amp;#039;&amp;#039;tca.php&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
festgelegt. In tca.php wird z.B. mit&lt;br /&gt;
 ...&amp;quot;ctrl&amp;quot; =&amp;gt; $TCA[&amp;quot;tx_pupmanager_members&amp;quot;][&amp;quot;ctrl&amp;quot;],...&lt;br /&gt;
der Teil ctrl des TCA Arrays aus ext_tables übernommen. Man muß also nur in diesen beiden Dateien die Werte verändern um auf verschiedene Weise das Backend zu konfigurieren. Die Details findet man in:&lt;br /&gt;
&lt;br /&gt;
http://typo3.org/documentation/document-library/core-documentation/doc_core_api/&lt;br /&gt;
&lt;br /&gt;
Die Ebenen des Arrays sind wie folgt angelegt.&lt;br /&gt;
&lt;br /&gt;
=== Verschiedenes ===&lt;br /&gt;
Bereich &amp;#039;&amp;#039;&amp;#039;ctrl&amp;#039;&amp;#039;&amp;#039; wird immer gleich geladen die anderen BEreiche erst dynamisch. Wenn sie benutzt werden mit &lt;br /&gt;
&lt;br /&gt;
 t3lib_loadTCA(&amp;#039;your_table_name&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
nachladen&lt;br /&gt;
&lt;br /&gt;
=== Level 1 ===&lt;br /&gt;
Die &amp;#039;&amp;#039;&amp;#039;Schlüssel entsprechen den DB-Tabellen&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Grundsätzliche Einstellungen in &amp;#039;&amp;#039;ext_tables.php&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
=== Level 2 und 3 ===&lt;br /&gt;
&lt;br /&gt;
Diese beziehen sich auf die &amp;#039;&amp;#039;&amp;#039;Struktur eines Tabelleneintrags&amp;#039;&amp;#039;&amp;#039; (so sieht also ein Datensatz im Backend aus) und werden meist in &amp;#039;&amp;#039;tca.php&amp;#039;&amp;#039; festgelegt.&lt;br /&gt;
&lt;br /&gt;
== Validierung von Backend Formularen ==&lt;br /&gt;
Für Backendfelder steht der Bereich eval zur Verfügung. Dort gibt es vorgefertigte Evaluierungsmöglichkeiten. Es können auch mittels einer Extension eigene JavaScripte zur Evaluierung gebastelt werden. Eine Beispielextension steht auch zur Verfügung.&lt;br /&gt;
&lt;br /&gt;
http://typo3.org/documentation/api/&lt;br /&gt;
&lt;br /&gt;
 [&amp;#039;columns&amp;#039;][fieldname][&amp;#039;config&amp;#039;] / TYPE: &amp;quot;input&amp;quot;&lt;br /&gt;
 eval=&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
=== Eine Klasse für eigene Validierung einbauen ===&lt;br /&gt;
Folgende Schritte sind notwendig:&lt;br /&gt;
# Eine &amp;#039;&amp;#039;&amp;#039;Klasse zur Evaluierung&amp;#039;&amp;#039;&amp;#039; in der Extension anlegen in der Art: class.tx_meineextension_extraeval1&lt;br /&gt;
&lt;br /&gt;
## Diese Klasse enthält &amp;#039;&amp;#039;&amp;#039;zwei Funktionen&amp;#039;&amp;#039;&amp;#039;. Eine für die Evaluierung per &amp;#039;&amp;#039;&amp;#039;JavaScript&amp;#039;&amp;#039;&amp;#039; bei der Eingabe und eine &amp;#039;&amp;#039;&amp;#039;php&amp;#039;&amp;#039;&amp;#039; Evaluierung nachdem der Datensatz gespeichert wurde. Unten steht die Beispielklasse aus der typo3.org API Dokumentation aus; sie fügt den eingegebenen Werten die unten gezeigten Strings hinzu.&lt;br /&gt;
&lt;br /&gt;
## Die Funktion &amp;#039;&amp;#039;returnFieldJS()&amp;#039;&amp;#039; gibt den &amp;#039;&amp;#039;&amp;#039;JavaScript Code&amp;#039;&amp;#039;&amp;#039; zurück. Im JavaScript steht die Variable &amp;#039;&amp;#039;value&amp;#039;&amp;#039; zur Verfügung die den Wert des Feldes enthält.&lt;br /&gt;
&lt;br /&gt;
## Die Funktion &amp;#039;&amp;#039;evaluateFieldValue ($value, $is_in, &amp;amp;$set)&amp;#039;&amp;#039; hat folgende Übergabewerte: &amp;#039;&amp;#039;$value&amp;#039;&amp;#039; ist der Feldinhalt, &amp;#039;&amp;#039;$is_in&amp;#039;&amp;#039; enthält die Werte aus der Typo3 Eval Funktion is_in (Filtert Zeichen aus), &amp;#039;&amp;#039;&amp;amp;$set&amp;#039;&amp;#039; ist Boolean und legt fest ob der Wert in die Datenbank geschrieben wird oder nicht. Wird per Referenz übergeben. &lt;br /&gt;
&lt;br /&gt;
# In ext_localconf.php muß die Klasse registriert werden damit sie zur Verfügung steht&lt;br /&gt;
&lt;br /&gt;
# In tca.php kann nun den Backendeingabefeldern die Evaluierung zugewiesen werden.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;class.tx_exampleextraevaluations_extraeval1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
class tx_exampleextraevaluations_extraeval1 {&lt;br /&gt;
    function returnFieldJS() {&lt;br /&gt;
        return &amp;#039;&lt;br /&gt;
        return value + &amp;quot; [added by JS]&amp;quot;;&lt;br /&gt;
        &amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
    function evaluateFieldValue($value, $is_in, &amp;amp;$set) {&lt;br /&gt;
        return $value.&amp;#039; [added by PHP]&amp;#039;;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
# Register new evaluation method in the $TYPO3_CONF_VARS[&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;tce&amp;#039;][&amp;#039;formevals&amp;#039;] array.&lt;br /&gt;
$TYPO3_CONF_VARS[&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;tce&amp;#039;][&amp;#039;formevals&amp;#039;][&amp;#039;tx_exampleextraevaluations_extraeval1&amp;#039;] = &amp;#039;EXT:example_extraevaluations/class.tx_pupmanager_extraeval1.php&amp;#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039; Beispiel zum Aufruf in tca.php &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
 &amp;#039;eval&amp;#039; =&amp;gt; &amp;#039;trim,tx_exampleextraevaluations_extraeval1&amp;#039;,&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Felder in Abhängigkeit von anderen anzeigen oder verstecken ==&lt;br /&gt;
===Möglichkeit 1: in der Felddefinition===&lt;br /&gt;
Für jedes Feld das eventuell versteckt werden soll, wird eine Bedingung angegeben&lt;br /&gt;
Im TCA (tca.php) unter&lt;br /&gt;
 [&amp;#039;columns&amp;#039;][fieldname] &lt;br /&gt;
 displayCond&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiele:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This example will require the field named &amp;quot;tx_templavoila_ds&amp;quot; to be true, otherwise the field for which this rule is set will not be displayed:&lt;br /&gt;
&lt;br /&gt;
 &amp;#039;displayCond&amp;#039; =&amp;gt; &amp;#039;FIELD:tx_templavoila_ds:REQ:true&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
This example requires the extension &amp;quot;static_info_tables&amp;quot; to be loaded, otherwise the field is not displayed. (This is useful if the field makes a look-up on a table coming from another extension!)&lt;br /&gt;
&lt;br /&gt;
 &amp;#039;displayCond&amp;#039; =&amp;gt; &amp;#039;EXT:static_info_tables:LOADED:true&amp;#039;,&lt;br /&gt;
&lt;br /&gt;
Wie man sieht ist der String mit : in verschiedene Bereiche aufgeteilt. &lt;br /&gt;
Teil 1 ist der Regeltyp. FIELD bezieht sich z.B. auf ein Feld im selben Datensatz. Je nachdem was im ersten Teil steht kann man weitere Teile angeben.&lt;br /&gt;
&lt;br /&gt;
http://typo3.org/documentation/document-library/core-documentation/doc_core_api/4.1.0/view/4/2/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Möglichkeit 2: mit Paletten===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===Möglichkeit 3: ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
== Reihenfolge der Felder im Backend ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[&amp;#039;types&amp;#039;][key]&lt;br /&gt;
Beispiel:&lt;br /&gt;
 &amp;#039;types&amp;#039; =&amp;gt; Array (&lt;br /&gt;
 &amp;#039;0&amp;#039; =&amp;gt; Array(&amp;#039;showitem&amp;#039; =&amp;gt; &amp;#039;hidden;;1, type, title, test_template&amp;#039;),&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The key &amp;quot;showitem&amp;quot; lists the order in which to define the fields: &amp;quot;hidden, type, title, test_template&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(nicht mit showRecordFieldList verwechseln - das legt nur Fest was überhaupt angezeigt wird.&lt;br /&gt;
&lt;br /&gt;
== Default Werte in Backend-Feldern ==&lt;br /&gt;
useColumnsForDefaultValues&lt;br /&gt;
&lt;br /&gt;
Wenn Daten auf komplexere Weise im Backend manipuliert werden sollen geht es z.B. so:&lt;br /&gt;
&lt;br /&gt;
[[TYPO3 Hook im Backend beim speichern von Datensätzen]]&lt;br /&gt;
&lt;br /&gt;
oder&lt;br /&gt;
&lt;br /&gt;
[[Backend: Default-Werte per TSConfig setzen]]&lt;br /&gt;
&lt;br /&gt;
== Tabs in Backend Formularen ==&lt;br /&gt;
dividers2tabs(in types)&lt;br /&gt;
&lt;br /&gt;
== Funktionen vor oder nach der Backendeingabe ausführen ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Verwendete Dateien:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ext_localconf.php (register hook here)&lt;br /&gt;
class.tx_myExtension_post-or whatever.php (functionality)&lt;br /&gt;
&amp;lt;/pre&amp;gt; &lt;br /&gt;
Dies kann mit Hooks realisiert werden.&lt;br /&gt;
&lt;br /&gt;
http://typo3.org/development/articles/how-to-use-existing-hooks/page/2/&lt;br /&gt;
&lt;br /&gt;
Daten die vom Backend übermittelt werden werden in der Klasse t3lib_tcemain bearbeitet. Das wäre der geeignete Ort um einzugreifen.&lt;br /&gt;
Diese liegt in &amp;#039;&amp;#039;&amp;#039;t3lib/class.t3lib_tcemain.php&amp;#039;&amp;#039;&amp;#039;. Jetzt wäre es natürlich blöde in den Core Dateien herumzufuhrwerken. Aber es gibt ja das Hook Konzept, mit dem ein Programmierer Schnittstellen bereitstellen kann um die Funktionalität zu erweitern. Netterweise hat ein lieber Core Programmierer schon zwei Hooks vorgesehen die vor bzw. nachdem speichern der Daten im Backend genutzt werden können.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Es gibt 2 Möglichkeiten den Hook zu nutzen. &amp;#039;&amp;#039;&amp;#039;callUserFunction&amp;#039;&amp;#039;&amp;#039; und the &amp;#039;&amp;#039;&amp;#039;getUserObj&amp;#039;&amp;#039;&amp;#039;. Wobei zweitere die schickere (weil ansatzweise Objektorientiert) ist. Auf die callUserFunction gehen wir zunächst hier nicht ein.&lt;br /&gt;
&lt;br /&gt;
Die &amp;#039;&amp;#039;&amp;#039;getUserObj Methode&amp;#039;&amp;#039;&amp;#039; stellt uns auch der folgende Hook zur Verfügung. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Schauen wir uns den Code des Post Process Hooks in der Datei class.t3li_tcemain.php an:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Hook: processDatamap_postProcessFieldArray&lt;br /&gt;
reset($hookObjectsArr);&lt;br /&gt;
while (list(,$hookObj) = each($hookObjectsArr)) {&lt;br /&gt;
    if (method_exists ($hookObj, &amp;#039;processDatamap_postProcessFieldArray&amp;#039;)) {&lt;br /&gt;
        $hookObj-&amp;gt;processDatamap_postProcessFieldArray ($status, $table, $id, $fieldArray, $this);&lt;br /&gt;
    } &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im obigen Code-Schnipsel aus TCE-Main wird ein Array $hookObjectsArr übergeben und eine Methode processDatamap_postProcessFieldArray wird aufgerufen wenn dieses Existiert.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1. Klasse schreiben ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wir schreiben einfach eine Klasse&amp;#039;&amp;#039;&amp;#039; in der wir die Funktion processDatamap_postProcessFieldArray überschreiben und hier unserer eigene Funktion bereitstellen.&lt;br /&gt;
&lt;br /&gt;
2.1 Funktion Registrieren&lt;br /&gt;
in der Core Datei wird die &amp;#039;&amp;#039;&amp;#039;Funktion im Globalen Array $TYPO3_CONF_VARS registriert&amp;#039;&amp;#039;&amp;#039;. Genauso müssen wir das mit unserer neuen Funktion machen. Die neuen Methoden Registrieren wir in &amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Typo 3 hat seine Klasse so registriert:&lt;br /&gt;
&lt;br /&gt;
process_datamap function des Typo3 Core (obige Datei):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 // First prepare user defined objects (if any) for hooks which extend this function:&lt;br /&gt;
$hookObjectsArr = array();&lt;br /&gt;
if (is_array ($TYPO3_CONF_VARS[&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;t3lib/class.t3lib_tcemain.php&amp;#039;][&amp;#039;processDatamapClass&amp;#039;])) {&lt;br /&gt;
    foreach ($TYPO3_CONF_VARS[&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;t3lib/class.t3lib_tcemain.php&amp;#039;][&amp;#039;processDatamapClass&amp;#039;] as $classRef) {&lt;br /&gt;
        $hookObjectsArr[] = &amp;amp;t3lib_div::getUserObj ($classRef);&lt;br /&gt;
    } &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Unserer neue Klasse soll genauso eine Instanz des Objekts in genau diesem Array $hookObjectsArr sein.&lt;br /&gt;
&lt;br /&gt;
Deshalb registrieren wir in der Datei &amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039;unserer Extension unsere Datei indem wir die Funktion genau wie oben im Array aufnehmen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $GLOBALS [&amp;#039;TYPO3_CONF_VARS&amp;#039;][&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;t3lib/class.t3lib_tcemain.php&amp;#039;][&amp;#039;processDatamapClass&amp;#039;][] = &amp;#039;tx_myextension_tcemainprocdm&amp;#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2.2. Klassendatei laden ===&lt;br /&gt;
Jezt müssen wir noch aufpassen das die Klassendatei auch geladen wird wenn sie benötigt wird. Dazu können wir ein require_once statement in ext_tables.php unserer Extension hinzufügen oder besser folgendes machen.&lt;br /&gt;
&lt;br /&gt;
=== 2.3. Laden und Registrieren der Klasse gleichzeitig ===&lt;br /&gt;
&lt;br /&gt;
Die getUserObj Methode erlaubt uns die beiden Schritte gleichzeitig auszuführen. Das können wir dann beides in &amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039; machen. Dann sieht die Zeile von vorhin &amp;#039;&amp;#039;&amp;#039;etwas anders&amp;#039;&amp;#039;&amp;#039; aus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$GLOBALS [&amp;#039;TYPO3_CONF_VARS&amp;#039;][&amp;#039;SC_OPTIONS&amp;#039;][&amp;#039;t3lib/class.t3lib_tcemain.php&amp;#039;][&amp;#039;processDatamapClass&amp;#039;][] = &amp;#039;EXT:myextension/class.myextension_tcemainprocdm.php:tx_myextension_tcemainprocdm&amp;#039;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Das hat zudem den Vorteil, das die Klasse nur dann aufgerufen wird wenn sie auch benötigt wird.&lt;br /&gt;
 &lt;br /&gt;
Another great advantage of this method is that your file will only be included if it&amp;#039;s really used! &lt;br /&gt;
postProcessFieldArray&amp;quot; in der Rubrik &amp;quot;processDatamap&lt;br /&gt;
&lt;br /&gt;
=== Wie Programmiert man ? ===&lt;br /&gt;
Für die Programmierung steht die Typo3 Core Engine zur Verfügung (TCE)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Das Konzept:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
When you are using TCE from your backend applications you need to prepare two arrays of information which contain the instructions to TCEmain of what actions to perform. They fall into two categories: Data and Commands.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Data&amp;quot; is when you want to write information to a database table or create a new record.&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Commands&amp;quot; is when you want to move, copy or delete a record in the system.&lt;br /&gt;
&lt;br /&gt;
The data and commands are created as multidimensional arrays and to understand the API of TCEmain you simply need to understand the hierarchy of these two arrays.&lt;br /&gt;
&lt;br /&gt;
Commands Array ($cmd):&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Syntax:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
$cmd[ tablename ][ uid ][ command ] = value&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Unsere Funktion:&lt;br /&gt;
Wird aufgerufen wenn Datensatz gespeichert wird&lt;br /&gt;
Parameter:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$status-&amp;gt;update oder new, &lt;br /&gt;
$table -&amp;gt; die im Moment bearbeitete Tabelle, &lt;br /&gt;
$id-&amp;gt; bei status new ein Zufallscode Newxxxxx sonst die uid des Datensatzen, &lt;br /&gt;
&amp;amp;$fieldArray -&amp;gt; hier kann man einen Wert aus dem gerade zu speichernden Datensatz überschreiben&lt;br /&gt;
$reference -&amp;gt; das komplette cObj&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class tx_myextension_tcemainprocdm {&lt;br /&gt;
&lt;br /&gt;
    function processDatamap_postProcessFieldArray ($status, $table, $id, &amp;amp;$fieldArray, &amp;amp;$this) {&lt;br /&gt;
&lt;br /&gt;
        // here comes the code&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>94.216.243.65</name></author>
	</entry>
</feed>