<?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.32.69.46</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.32.69.46"/>
	<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Spezial:Beitr%C3%A4ge/91.32.69.46"/>
	<updated>2026-05-07T00:20:24Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Spacer_Page&amp;diff=18481</id>
		<title>Typo3 - Spacer Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Spacer_Page&amp;diff=18481"/>
		<updated>2008-01-09T06:27:03Z</updated>

		<summary type="html">&lt;p&gt;91.32.69.46: /* Der Seitentyp Spacer oder Abstand */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Der Seitentyp Spacer oder Abstand (Trenner, Divider)==&lt;br /&gt;
&lt;br /&gt;
aus http://www.mcuniverse.com/05/TYPO3.31.0.html &lt;br /&gt;
&lt;br /&gt;
12.8.2006 14:00&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Spacer Page Code&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
For my direct mail tutorial I was forced to use the Spacer Page Type to break up the leftside navigation into sections. It took a bit of searching on how to use it so I decided to add it to my Code Snippet Section.&lt;br /&gt;
&lt;br /&gt;
To see how it is integrated in with the regular menu, check out the Left Vertical Menu Snippet.&lt;br /&gt;
What is a Spacer Page?&lt;br /&gt;
&lt;br /&gt;
This is how the Spacer Page looks in the Directory Tree in Typo3&lt;br /&gt;
[[Bild:spacerpage1.gif]]		&lt;br /&gt;
&lt;br /&gt;
This is how the Spacer Page looks in the Navigation on the website&lt;br /&gt;
[[Bild:Spacerpage.gif]]&lt;br /&gt;
The Spacer page is a page that shows up in the navigation, but does not have a link associated with it.&lt;br /&gt;
&lt;br /&gt;
Typo3 has to be told how to use the Spacer page. This is done in the Setup section of the Typo3 template.&lt;br /&gt;
&lt;br /&gt;
First you have to decide at which level of the navigation tree the Spacer page has to show up. In my example it is on Level 3 of the left side navigation and does not show up as a link and does not link to anything. The look of the text is defined by a class in the style sheet. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Typo3 Template Spacer Code&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Spacer Code Level 2&lt;br /&gt;
   temp.leftmenu.2.SPC = 1&lt;br /&gt;
   temp.leftmenu.2.SPC &amp;lt; subparts.leftmenu&lt;br /&gt;
   temp.leftmenu.2.SPC.doNotShowLink = 0 &lt;br /&gt;
   temp.leftmenu.2.SPC.doNotLinkIt = 1&lt;br /&gt;
   temp.leftmenu.2.SPC.allWrap =  &lt;br /&gt;
   &amp;lt;DIV class=&amp;quot;leftnavspc&amp;quot;&amp;gt;&amp;amp;#171;&amp;amp;nbsp; | &amp;amp;nbsp;&amp;amp;#187;&amp;lt;/DIV&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
    Note:&lt;br /&gt;
    The last to lines of code should all be on the same line. I had to split it into two to fit on the page.&lt;br /&gt;
&lt;br /&gt;
Stylesheet Spacer Class&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/* Left Navigation SubMenu Spacer */&lt;br /&gt;
.leftnavspc {  &lt;br /&gt;
   font-family: Verdana, sans-serif;&lt;br /&gt;
   font-size: 11px;&lt;br /&gt;
   font-variant: small-caps;&lt;br /&gt;
   font-weight: bolder;&lt;br /&gt;
   color: #003366;   /* dark blue */&lt;br /&gt;
   text-decoration: none;&lt;br /&gt;
   padding: 2px;&lt;br /&gt;
   margin-left: 15px; &lt;br /&gt;
   background-color: #FFFFFF;  /* white */&lt;br /&gt;
   border-bottom: thin dotted #9B193D;   /* burgundy */&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>91.32.69.46</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_Extensions_-_Backend_Formulare_und_TCA_Konfiguration&amp;diff=1257</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=1257"/>
		<updated>2008-01-09T04:52:22Z</updated>

		<summary type="html">&lt;p&gt;91.32.69.46: &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 ext_tables.php und tca.php festgelegt.&lt;br /&gt;
Die Ebenen des Arrays sind wie folgt angelegt.&lt;br /&gt;
=== Verschiedenes ===&lt;br /&gt;
Bereich ctrl 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 Schlüssel entsprechen den DB-Tabellen&lt;br /&gt;
&lt;br /&gt;
Grundsätzliche Einstellungen in ext_tables.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Level 2 und 3 ===&lt;br /&gt;
&lt;br /&gt;
Diese beziehen sich auf die Struktur eines Tabelleneintrags (so sieht also ein Datensatz im Backend aus) und werden meist in tca.php festgelegt.&lt;br /&gt;
&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;
== 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;
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 t3lib/class.t3lib_tcemain.php. 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;
Schauen wir uns den Code des Post Process Hooks in der Datei 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;
Es gibt 2 Möglichkeiten den Hook zu nutzen. callUserFunction und the getUserObj. Wobei zweitere die schickere (weil ansatzweise Objektorientiert) ist. Diese Methode stellt uns auch der obige Hook zur Verfügung. Auf die callUserFunction gehen wir zunächst hier nicht ein.&lt;br /&gt;
&lt;br /&gt;
Methode 1 getUserObj:&lt;br /&gt;
&lt;br /&gt;
1. Klasse definieren:&lt;br /&gt;
Wir schreiben eine Klasse in der wir die Funktion processDatamap_postProcessFieldArray überschreiben und hier unserer eigene Funktion bereitstellen.&lt;br /&gt;
&lt;br /&gt;
2. Die Methoden Registrieren (ext_localconf.php&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. Deshalb sollte unserer neue Klasse genauso eine Instanz des Objekts in genau diesem Array $hookObjectsArr sein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The solution lies at the very beginning of the process_datamap function:&lt;br /&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;
&lt;br /&gt;
in der Core Datei wird die Funktion im Globalen Array $TYPO3_CONF_VARS registriert. Genauso müssen wir das mit unserer neuen Funktion machen. Deshalb definieren wir in der Datei&lt;br /&gt;
 ext_localconf.php&lt;br /&gt;
unserer Extension&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;
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;
Inkludieren 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 ext_localconf.php machen. Dann sieht die Zeile von vorhin etwas anders aus:&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;
Das hat zudem den Vorteil, das die Klasse nur dann aufgerufen wird wenn sie auch benötigt wird.&lt;br /&gt;
 &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;/div&gt;</summary>
		<author><name>91.32.69.46</name></author>
	</entry>
</feed>