<?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=91.47.80.48</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=91.47.80.48"/>
	<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Spezial:Beitr%C3%A4ge/91.47.80.48"/>
	<updated>2026-05-06T18:54:42Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Extensions&amp;diff=1317</id>
		<title>Typo3 - Extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Extensions&amp;diff=1317"/>
		<updated>2008-02-06T10:46:47Z</updated>

		<summary type="html">&lt;p&gt;91.47.80.48: /* weitere nützliche Extensions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ideen für neue Extensions und Erweiterungen bestehender Extensions ==&lt;br /&gt;
Extension zur automatischen Erzeugung zweispaltiger Inhalte mit Line Count (auch Umbrüche), Hurenkinder und Schusterjungen regelung etc.&lt;br /&gt;
&lt;br /&gt;
Erweiterung der rg_googlemaps mit Listenansicht nach PLZ&lt;br /&gt;
Händlersuche mit Umkreissuche oder Auflistung nach PLZ bereichen (Erweiterung bestehender)&lt;br /&gt;
&lt;br /&gt;
== Extensions programmieren ==&lt;br /&gt;
Infos hierzu gibt es im Abschnitt Extension Kickstarter und unter&lt;br /&gt;
&lt;br /&gt;
[[Typo3 - Extensions programmieren]]&lt;br /&gt;
&lt;br /&gt;
[[TypoScript Einstellungen in Extensions auslagern]]&lt;br /&gt;
&lt;br /&gt;
== Nützliche Extensions ==&lt;br /&gt;
&lt;br /&gt;
=== die wichtigsten Extensions ===&lt;br /&gt;
&lt;br /&gt;
automakeTemplates&lt;br /&gt;
&lt;br /&gt;
[[Metatags extended (metatags)]]&lt;br /&gt;
&lt;br /&gt;
[[News (tt_news)]]&lt;br /&gt;
&lt;br /&gt;
CleanDB  nf_cleandb&lt;br /&gt;
&lt;br /&gt;
[[Database Integration (wfqbe)]]&lt;br /&gt;
Schweizer Taschenmesser zur Integration von Daten (Bugs beachten)&lt;br /&gt;
&lt;br /&gt;
=== weitere nützliche Extensions ===&lt;br /&gt;
mk_wastebasket - Datensätze entgültig löschen&lt;br /&gt;
&lt;br /&gt;
Foreign access for MM Tables  	mmforeign  0.2.0   Experimental&lt;br /&gt;
&lt;br /&gt;
Page Template Selector 	rlmp_tmplselector 	1.2.2 		&lt;br /&gt;
&lt;br /&gt;
TER Update Check 	ter_update_check&lt;br /&gt;
&lt;br /&gt;
Exo Feeds  	exofeeds  	0.0.2	Alpha&lt;br /&gt;
&lt;br /&gt;
freeCap CAPTCHA 	sr_freecap 	&lt;br /&gt;
&lt;br /&gt;
Front End User Registration 	sr_feuser_register 	Stable&lt;br /&gt;
&lt;br /&gt;
Indexed Search Engine 	indexed_search 	2.9.2 	System 	Stable&lt;br /&gt;
&lt;br /&gt;
Language Selection 	sr_language_menu 	&lt;br /&gt;
&lt;br /&gt;
Photo Book 	goof_fotoboek 	1.7.11 	Stable&lt;br /&gt;
&lt;br /&gt;
Local 	Stable&lt;br /&gt;
&lt;br /&gt;
TIMTAB Tag-Cloud 	timtab_tagcloud 1.2.1 			&lt;br /&gt;
&lt;br /&gt;
Make Print Link 	make_printlink 	1.5.2 	Stable&lt;br /&gt;
&lt;br /&gt;
Static Info Tables 	static_info_tables&lt;br /&gt;
&lt;br /&gt;
sb_accessiblecontent&lt;br /&gt;
&lt;br /&gt;
Content/DAM reference usage  	dam_ttcontent (Experimental)&lt;br /&gt;
&lt;br /&gt;
phpmyadmin&lt;br /&gt;
&lt;br /&gt;
DAM inkl Erweiterungen&lt;br /&gt;
&lt;br /&gt;
Media (DAM)  	dam 	Local  	Stable&lt;br /&gt;
&lt;br /&gt;
Media&amp;gt;Categories dam_catedit 	1.0.3 	Local 	Alpha&lt;br /&gt;
&lt;br /&gt;
Media&amp;gt;Indexing 	dam_index 	1.0.3 	Local 	Stable&lt;br /&gt;
&lt;br /&gt;
Media&amp;gt;Info 	dam_info&lt;br /&gt;
&lt;br /&gt;
[[PDF Generator 2 (pdf_generator2)]]&lt;br /&gt;
&lt;br /&gt;
[[Typo3 - Bildergallerie]] (lz_gallery)&lt;br /&gt;
&lt;br /&gt;
[[Modern Guestbook (ve_guestbook)]]&lt;br /&gt;
&lt;br /&gt;
[[Mailformplus (tx_mailformplus)]]&lt;br /&gt;
&lt;br /&gt;
[[Send-a-Card (sr_sendcard)]]&lt;br /&gt;
&lt;br /&gt;
[[Front End User Registration (fe_users)]]&lt;br /&gt;
&lt;br /&gt;
[[FreeCap (sr_freecap)]]&lt;br /&gt;
&lt;br /&gt;
[[Date2Calendar (date2cal)]] JavaScript Datumsauswahl für Datumsfelder&lt;br /&gt;
&lt;br /&gt;
[[Dynamic Flexforms (dynaflex)]] Flexforms während der Laufzeit verändern&lt;br /&gt;
&lt;br /&gt;
[[Google Earth links (itxg_gelinks)]] Allows to create and view Google Earth .kml files. The building of a link is being done with GPS coordinates in D-M-S notation.&lt;br /&gt;
&lt;br /&gt;
[[Google Sitemap for Pages and Contents (mc_googlesitemap)]] All options available&lt;br /&gt;
&lt;br /&gt;
== Der Typo3 Extension Kickstarter ==&lt;br /&gt;
(Deutsch: Erweiterungs Manager)&lt;br /&gt;
Der Erweiterungsmanager ist selbst eine Erweiterung die zuerst installiert werden muß.&lt;br /&gt;
&lt;br /&gt;
Fehler in Extension Kickstarter&lt;br /&gt;
&lt;br /&gt;
Wenn der Kickstarter local installiert ist, dann kann meine eine bereits erstelle Extension nicht im Kickstarter überarbeiten. (Bis Version ?)&lt;br /&gt;
&lt;br /&gt;
Der Kickstarter muß global installiert sein, damit man bereits erstellte Extension mit dem Kickstarter überarbeiten kann.&lt;br /&gt;
&lt;br /&gt;
=== Kurzanleitung ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Wo?&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Backend-Modul Ext Manager; hier im Dropdown Menü &amp;quot;Make new Extension&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;General Info&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Allgemeine Infos zum PlugIn (hat nichts mit der Funktion zu tun)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Extension Key&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
- Typo3 entfernt Unterstriche (meine_extension wird zu meineextension)&lt;br /&gt;
&lt;br /&gt;
- tx_ wird automatisch vorangestellt&lt;br /&gt;
&lt;br /&gt;
- ein vorangestelltes user_ bedeutet dass es sich um eine eigene Entwicklung handelt, die nicht in das Repository gestellt werden kann.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;New Database Tables&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Hier kann man automatisch die benötigten Tabellen und deren Felder erzeugen.&lt;br /&gt;
Üblich ist ein Tabellenname mit dem Suffix _main z.B. user_meineErweiterung_main.&lt;br /&gt;
Hier werden auch einige von Typo unterstützte Funktionen die im Backend als Felder sichtbar sind vorbereitet (z.B. Start, Stop, Hide...). Sinnvoll in diesem Zusammenhang:&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Delete*&amp;#039;&amp;#039; - damit die Tabelle ein Delete Flag bekommt&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Hide*&amp;#039;&amp;#039; - damit Datensätze versteckt werden können &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Allowed on Pages&amp;#039;&amp;#039; - Damit Frontend Plugins auch als Inhaltselement im Backend ausgewählt werden können.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Save and new&amp;#039;&amp;#039; - damit können später schnell mehrere Datensätze angelegt werden.&lt;br /&gt;
&lt;br /&gt;
*Damit das bei der Anzeige Funktioniert muß die Funktionalität in der Datenbankabfrage mit eingebaut werden (d.h. das Flag muß abgefragt werden).&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Datenfelder der Tabelle&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Hier werden die Spalten der Tabelle angelegt. &lt;br /&gt;
&lt;br /&gt;
Field name - Der Name der Spalte in der DB (in Kleinbuchstaben, z.B. vorname)&lt;br /&gt;
&lt;br /&gt;
Field title - wird im Backend beim Eingabefeld angezeigt (z.B. Vorname)&lt;br /&gt;
&lt;br /&gt;
Field type - welche Art von Eingabefeld&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Frontend Plugins&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Integration ins Frontend&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Enter a title for the plugin&amp;#039;&amp;#039; - taucht in der Auswahlliste für die Plugins aus (Backend)&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;USER cObjects are cached&amp;#039;&amp;#039; - Auswählen ob gecached wird (für Entwicklung bietet sich das deaktivieren des Caches an.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;...Typo Script Code...&amp;#039;&amp;#039; - den Beispielcode braucht man i.d.R. nicht, ein einfacher Code wird denoch generiert.&lt;br /&gt;
&lt;br /&gt;
weiter unten kann noch angegeben werden wo das Plugin zugänglich ist.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;View Result&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Hier kann man sehen was erzeugt wird...&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Write&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
... und hier wird es tatsächlich erzeugt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Bilder in eigener Extension rendern ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In diesem Beispiel benutzte Variablen:&lt;br /&gt;
 $BildAdresse&lt;br /&gt;
 $ParameterFuerImgTag&lt;br /&gt;
 $Alttext&lt;br /&gt;
&lt;br /&gt;
In PHP-Datei der Extension:&lt;br /&gt;
&lt;br /&gt;
 $this-&amp;gt;conf[&amp;quot;imageBeispiel.&amp;quot;][&amp;quot;file&amp;quot;]=&amp;quot;uploads/pics/&amp;quot;.$BildAdresse;&lt;br /&gt;
 $this-&amp;gt;conf[&amp;quot;imageBeispiel.&amp;quot;][&amp;quot;params&amp;quot;]=$ParameterFuerImgTag;&lt;br /&gt;
 $this-&amp;gt;conf[&amp;quot;imageBeispiel.&amp;quot;][&amp;quot;altText&amp;quot;]=$Alttext;&lt;br /&gt;
 $Bild=$this-&amp;gt;cObj-&amp;gt;IMAGE($this-&amp;gt;conf[&amp;quot;imageBeispiel.&amp;quot;]);&lt;br /&gt;
 $Content.=$Bild;&lt;br /&gt;
&lt;br /&gt;
In Typoscript Setup&lt;br /&gt;
&lt;br /&gt;
 plugin.tx_hoTest_pi1 {     //hier Plugin-Name&lt;br /&gt;
 imageArtikel{&lt;br /&gt;
     file.maxW = {$ho_Test.BildWidthNews}  &lt;br /&gt;
     imageLinkWrap = 1&lt;br /&gt;
     imageLinkWrap {&lt;br /&gt;
       enable = 1&lt;br /&gt;
       bodyTag = &amp;lt;BODY bgColor=white&amp;gt;&lt;br /&gt;
       wrap = |&lt;br /&gt;
       width = 400m&lt;br /&gt;
       height = 400&lt;br /&gt;
       JSwindow = 1&lt;br /&gt;
       JSwindow.newWindow = 1&lt;br /&gt;
       JSwindow.expand = 17,20&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Der Wert {$ho_Test.BildWidthNews} kann aus Constants übernommen werden.&lt;br /&gt;
&lt;br /&gt;
Siehe dazu auch&lt;br /&gt;
Konstanten von Constants im Setup verwenden&lt;br /&gt;
und&lt;br /&gt;
Konstanten für Constant-Editor bereitstellen&lt;br /&gt;
&lt;br /&gt;
(aus www.easy-office4you.de/ 10.1.2006)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Spalten der Seiten umbenennen ==&lt;br /&gt;
&lt;br /&gt;
Um die Spalten der Seite im Backend beliebig umzubenennen und/oder zusätzliche eigene Spalten zu verwenden, muß die Extension zed_more_columns installiert werden und dann in der Datei ext_tables.php die Spalten-Namen eingeben werden.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
 $TCA[&amp;quot;tt_content&amp;quot;][&amp;quot;columns&amp;quot;][&amp;quot;colPos&amp;quot;][&amp;quot;config&amp;quot;][&amp;quot;items&amp;quot;] = array (&lt;br /&gt;
 &amp;quot;0&amp;quot; =&amp;gt; array (&amp;quot;Mitte||Mitte||||||||&amp;quot;,&amp;quot;0&amp;quot;),&lt;br /&gt;
 &amp;quot;1&amp;quot; =&amp;gt; array (&amp;quot;Links||Links||||||||&amp;quot;,&amp;quot;1&amp;quot;),&lt;br /&gt;
 &amp;quot;2&amp;quot; =&amp;gt; array (&amp;quot;Rechts||Rechts||||||||&amp;quot;,&amp;quot;2&amp;quot;),&lt;br /&gt;
 &amp;quot;3&amp;quot; =&amp;gt; array (&amp;quot;Teaser||Teaser||||||||&amp;quot;,&amp;quot;3&amp;quot;),&lt;br /&gt;
 &amp;quot;4&amp;quot; =&amp;gt; array (&amp;quot;Fusszeile||Fusszeile||||||||&amp;quot;,&amp;quot;4&amp;quot;)&lt;br /&gt;
 );&lt;br /&gt;
&lt;br /&gt;
== Bei Extension dafür sorgen, daß im Backend kein Sortierungs-Button entsteht ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In der Datei ext_tables.php der Extension folgende Zeile ändern&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;sortby&amp;quot; =&amp;gt; &amp;quot;name&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
ändern in&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;default_sortby&amp;quot; =&amp;gt; &amp;quot;ORDER BY name&amp;quot;,&lt;br /&gt;
&lt;br /&gt;
Anstatt &amp;quot;name&amp;quot; kann natürlich auch ein anderes Suchkriterium verwendet werden.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Eigene Extensions ==&lt;br /&gt;
[[Typo3 Extension: pupmanager]]&lt;br /&gt;
&lt;br /&gt;
Webbretter&lt;br /&gt;
&lt;br /&gt;
Personalabfrage&lt;br /&gt;
&lt;br /&gt;
In Planung:&lt;br /&gt;
&lt;br /&gt;
Real Last Change&lt;br /&gt;
&lt;br /&gt;
Easy Rootline&lt;/div&gt;</summary>
		<author><name>91.47.80.48</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_Extensions_-_Backend_Formulare_und_TCA_Konfiguration&amp;diff=1283</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=1283"/>
		<updated>2008-02-06T09:39:46Z</updated>

		<summary type="html">&lt;p&gt;91.47.80.48: /* Eine Klasse für eigene Validierung einbauen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Aussehen von Backend Formularen ===&lt;br /&gt;
&lt;br /&gt;
Definiert im TCA Array. In Extensions wird es in den Dateien &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; festgelegt.&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;
&lt;br /&gt;
===Möglichkeit 2: mit Paletten===&lt;br /&gt;
&lt;br /&gt;
===Möglichkeit 3: ===&lt;br /&gt;
&lt;br /&gt;
== Reihenfolge der Felder im Backend ==&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;
&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;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Default Werte in Backend-Feldern ==&lt;br /&gt;
useColumnsForDefaultValues&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>91.47.80.48</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_Extensions_-_Backend_Formulare_und_TCA_Konfiguration&amp;diff=1273</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=1273"/>
		<updated>2008-02-06T09:38:44Z</updated>

		<summary type="html">&lt;p&gt;91.47.80.48: /* Eine Klasse für eigene Validierung einbauen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Aussehen von Backend Formularen ===&lt;br /&gt;
&lt;br /&gt;
Definiert im TCA Array. In Extensions wird es in den Dateien &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; festgelegt.&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 returnFieldJS() gibt den JavaScript Code zurück. Im JavaScript steht die Variable value zur Verfügung die den Wert des Feldes enthält.&lt;br /&gt;
&lt;br /&gt;
## Die Funktion evaluateFieldValue ($value, $is_in, &amp;amp;$set) hat folgende Übergabewerte: $value ist der Feldinhalt, $is_in enthält die Werte aus der Typo3 Eval Funktion is_in (Filtert Zeichen aus), &amp;amp;$set 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;
&lt;br /&gt;
===Möglichkeit 2: mit Paletten===&lt;br /&gt;
&lt;br /&gt;
===Möglichkeit 3: ===&lt;br /&gt;
&lt;br /&gt;
== Reihenfolge der Felder im Backend ==&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;
&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;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Default Werte in Backend-Feldern ==&lt;br /&gt;
useColumnsForDefaultValues&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>91.47.80.48</name></author>
	</entry>
</feed>