<?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=84.160.195.20</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=84.160.195.20"/>
	<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Spezial:Beitr%C3%A4ge/84.160.195.20"/>
	<updated>2026-05-06T20:40:33Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Extensions_programmieren&amp;diff=936</id>
		<title>Typo3 - Extensions programmieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Extensions_programmieren&amp;diff=936"/>
		<updated>2007-02-12T18:32:35Z</updated>

		<summary type="html">&lt;p&gt;84.160.195.20: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Wie kann ich eine eigene Extension debuggen? ==&lt;br /&gt;
	&lt;br /&gt;
=== permalink ===&lt;br /&gt;
Wenn man eine eigene Extension schreibt benutzt man zum größten Teil Array, und um den Überblick zu behalten was nach den ganzen schritten in einem Array noch so drin steht hat man die möglichkeit mit einer Funktion das Array schön und sauber in einer tabelle anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&lt;br /&gt;
PHP-Code:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$data = array(&amp;quot;Name&amp;quot; =&amp;gt; &amp;quot;Peter KeineAhnung&amp;quot;, &amp;quot;Alter&amp;quot; =&amp;gt; 22, &amp;quot;Wohnort&amp;quot; =&amp;gt; &amp;quot;Ratingen&amp;quot;);&lt;br /&gt;
echo t3lib_div::debug($data);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergebnis:&lt;br /&gt;
&lt;br /&gt;
je nach devIPMask Einstellungen ist auch nur&lt;br /&gt;
&lt;br /&gt;
PHP-Code:&lt;br /&gt;
&lt;br /&gt;
 debug();&lt;br /&gt;
&lt;br /&gt;
nützlich, vor allem wenn ein Kundenprojekt Online ist einfach im Installtool und devIpMask deine IP eingeben und dann mit debug(); arbeiten, so kannst nur du den debug sehen und nicht irgendwelche User die grade auf der Site sind.&lt;br /&gt;
&lt;br /&gt;
Kleiner Zusatz Tip:&lt;br /&gt;
&lt;br /&gt;
Ihr lasst euch gleichzeitig mehrere Debugs ausgeben und verliert den überblick welcher debug welcher ist... Beispiel Ihr lasst euch ein Array vor einer funktion debugen und anschliessend...&lt;br /&gt;
&lt;br /&gt;
da habt ihr dann die möglichkeit euerem Debug einen Namen zu geben..&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
PHP-Code:&lt;br /&gt;
 $data = array(&amp;quot;Name&amp;quot; =&amp;gt; &amp;quot;Peter KeineAhnung&amp;quot;, &amp;quot;Alter&amp;quot; =&amp;gt; 22);&lt;br /&gt;
 t3lib_div::debug(,&amp;#039;Array vorher&amp;#039;);&lt;br /&gt;
        &lt;br /&gt;
 $data[&amp;#039;Name&amp;#039;] = &amp;#039;T.uX&amp;#039;;&lt;br /&gt;
 $data[&amp;#039;Alter&amp;#039;] = 32;&lt;br /&gt;
&lt;br /&gt;
 t3lib_div::debug(,&amp;#039;Array nachher&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
Auch bei der Verwendung der integrierten DB-Abstraktionsschicht können eine Reihe von Fehlern auftreten, die teilweise nur sehr magere Fehlermeldungen produzieren. Um eine etwas explizitere Fehlerausgabe zu erzwingen sollte man folgende Zeile in seine Extension integrieren*:&lt;br /&gt;
&lt;br /&gt;
PHP-Code:&lt;br /&gt;
 $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;debugOutput = true;&lt;br /&gt;
So wird z.B. das SQL-Stement Ausgegeben, das zu einem Fehler geführt hat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Datenbankabfrage in Extensions ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
exec_SELECTquery(&lt;br /&gt;
&amp;#039;...&amp;#039;, # hier alle Felder&lt;br /&gt;
&amp;#039;tabelle1 a,tabelle2 b,tabelle3 c&amp;#039;, #hier die Tabellen&lt;br /&gt;
&amp;#039;a.feld=b.uid and b.feld=c.uid ...&amp;#039;, #die Zuordnung und sonstige wheres&lt;br /&gt;
&amp;#039;&amp;#039;,&amp;#039;&amp;#039;,&amp;#039;&amp;#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// SELECT:&lt;br /&gt;
$res = $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECTquery(&lt;br /&gt;
                &amp;#039;*&amp;#039;,         // SELECT ...&lt;br /&gt;
                &amp;#039;mytable&amp;#039;,     // FROM ...&lt;br /&gt;
                &amp;#039;uid=123 AND title LIKE &amp;quot;%blabla%&amp;quot;&amp;#039;,    // WHERE...&lt;br /&gt;
                &amp;#039;&amp;#039;,            // GROUP BY...&lt;br /&gt;
                &amp;#039;title&amp;#039;,    // ORDER BY...&lt;br /&gt;
                &amp;#039;5,10&amp;#039;            // LIMIT to 10 rows, starting with number 5 (MySQL compat.)&lt;br /&gt;
            );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// INSERT:&lt;br /&gt;
$insertArray = array(&lt;br /&gt;
    &amp;#039;pid&amp;#039; =&amp;gt; 123,&lt;br /&gt;
    &amp;#039;title&amp;#039; =&amp;gt; &amp;quot;My Title&amp;quot;&lt;br /&gt;
);&lt;br /&gt;
$res = $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_INSERTquery(&amp;#039;mytable&amp;#039;, $insertArray);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// UPDATE:&lt;br /&gt;
$updateArray = array(&lt;br /&gt;
    &amp;#039;title&amp;#039; =&amp;gt; &amp;quot;My Title&amp;quot;&lt;br /&gt;
);&lt;br /&gt;
$res = $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_UPDATEquery(&amp;#039;mytable&amp;#039;, &amp;#039;uid=123&amp;#039;, $updateArray);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// DELETE&lt;br /&gt;
$res = $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_DELETEquery(&amp;#039;mytable&amp;#039;, &amp;#039;uid=123&amp;#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$res=$GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECTquery(&lt;br /&gt;
  &amp;#039;COUNT(ap-status)&amp;#039;,     //felder&lt;br /&gt;
  &amp;#039;aa_tagungen&amp;#039;,              //from&lt;br /&gt;
  &amp;#039;id= &amp;#039;.$_GET[tid].&amp;#039;&amp;#039;,         //where&lt;br /&gt;
  &amp;#039;ap-status&amp;#039;,    //group&lt;br /&gt;
  &amp;#039;&amp;#039;,         //order&lt;br /&gt;
  &amp;#039;&amp;#039;          //limit&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
$l = mysql_fetch_array($res);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Zum Debuggen kann man so den Query testen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
t3lib_div::debug($GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;SELECTquery(&lt;br /&gt;
  &amp;#039;COUNT(ap-status)&amp;#039;,     //felder&lt;br /&gt;
  &amp;#039;aa_tagungen&amp;#039;,              //from&lt;br /&gt;
  &amp;#039;id= &amp;#039;.$_GET[tid].&amp;#039;&amp;#039;,         //where&lt;br /&gt;
  &amp;#039;ap-status&amp;#039;,    //group&lt;br /&gt;
  &amp;#039;&amp;#039;,         //order&lt;br /&gt;
  &amp;#039;&amp;#039;          //limit&lt;br /&gt;
));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Struktur einer Extension ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ext_emconf.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Informationen und Metadaten zur Extension. Etwa die Infos die im Kickstarter unter General Info stehen.&lt;br /&gt;
&lt;br /&gt;
* Root-Verzeichnis&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039; Enthält Konfigurationsdaten ($TYPO3_CONF_VARS) für das Backend und Frontend. Hier kann über die Extension API auch TypoScript eingebunden werden.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_tables.php&amp;#039;&amp;#039;&amp;#039; Konfiguration von Datenbanktabellen. Plugins und Module üver die Extension API einbinden. (Alles über Kickstarter)&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_tables.sql&amp;#039;&amp;#039;&amp;#039; SQL-Daten für die Tabellendefinition. Die Auswertung erfolgt über den Extension Manager und das Install-Tool.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_tables_static+adt.sql&amp;#039;&amp;#039;&amp;#039; SQL-Tabellendefinition inkl. Daten. Z.B. für statische Daten (Länderinfos etc.)Die Tabellen müssen zusätzlich in ext_tables.sql definiert sein.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_typoscript_*.txt&amp;#039;&amp;#039;&amp;#039; Globaler TypoScript-Code. Steht nicht üver Template-Datensätze zur Auswahl (siehe /static)&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_conf_template.txt&amp;#039;&amp;#039;&amp;#039; Hier werden Optionen zur Konfiguration angelegt, die der Benutzer im Extensionmanager einstellen kann.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;*icon*.gif&amp;#039;&amp;#039;&amp;#039; Symbol-Dateien für Extension,DB-Tabellen,Plugins, Module...&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;locallang*.php&amp;#039;&amp;#039;&amp;#039; Texte für die Lokalisierung in verschiedenen Sprachen&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;class.ext_update.php&amp;#039;&amp;#039;&amp;#039; Funktionen für ein Update der Extension (Beispiel siehe newloginbox).&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;pi1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für Skripte und Daten des Plugin&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;class*.php&amp;#039;&amp;#039;&amp;#039; PHP-Klassen z.B. für Plugins oder Submodule&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;cm1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für Dateien die das Kontext-Menü betreffen&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;mod1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für ein Modul.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;conf.php&amp;#039;&amp;#039;&amp;#039; Konfigurationsdatei für ein Modul zum einbinden ins Backend.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;index.php&amp;#039;&amp;#039;&amp;#039; Hauptscript eines Moduls.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;modfunc1/&amp;#039;&amp;#039;&amp;#039; Skripte und Daten für Submodul-Funktionen&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;static/&amp;#039;&amp;#039;&amp;#039; TypoScript-Template-Dateien. Diese werden über die Extension-API eingebunden und stehen dann in Template-Datensätzen, ähnlich den Standard Templates zur Auswahl.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;sv1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für Services&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;res/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für beliebige &amp;#039;recourcen&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;doc/&amp;#039;&amp;#039;&amp;#039; Verzeichnis der Dokumentation.&lt;br /&gt;
&lt;br /&gt;
== Wo werden Extensions installiert ? ==&lt;br /&gt;
===typo3/sysext/ (System)===&lt;br /&gt;
System Extensions wie cms und lang. Hier können keine Extensions mit dem Extension Manager installiert werden.&lt;br /&gt;
===typo3/ext/ - globale Extensions (Global) ===&lt;br /&gt;
Z.B. diese die von Typo3 mitgeliefert werden. Mit der Option allowGlobalInstall kann man die Installation in dieses Verzeichnis erlauben. Das ist dann nicht sinnvoll wenn sich mehrere Typo3 WEbsites eine Installation teilen, weil es hier zu Versionskonflikten kommen kann.&lt;br /&gt;
===typo3conf/ext - lokale Extensions (Local)===&lt;br /&gt;
Hier werden normalerweise alle Extensions installiert. Die Lokale Installation hat immer Vorang vor einer globalen.&lt;br /&gt;
&lt;br /&gt;
== Typolinks richtig in Extensions einsetzen ==&lt;br /&gt;
&lt;br /&gt;
In diesem kurzem Tutorial möchte ich zeigen, wie man Typolinks in eigenen Erweiterungen erstellt, die das&lt;br /&gt;
Feature &amp;#039;Simulate Static Documents&amp;#039; unterstützen und eine Ausgabe erstellen, die von Typo3 gecached wird&lt;br /&gt;
und so auch mit der Indexed search verwendet werden können. Diese Informationen wurden aus anderen&lt;br /&gt;
Erweiterungen zusammengetragen, speziell aus der Erweiterung tt_board.&lt;br /&gt;
Typoscript&lt;br /&gt;
Zuerst erstelle in der Datei &amp;#039;ext_typoscript_setup.txt&amp;#039; eine Eigenschaft, die deiner Erweiterung mitteilt, ob&lt;br /&gt;
caching genutzt werden soll oder nicht:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tx_myextension_pi1 {&lt;br /&gt;
allowCaching = 1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn das später auf 0 gesetzt wird, werden diese Seiten nicht mehr gecached.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vorbereitung&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Bereite in der main() Funktion den Typolink vor und konfiguriere das caching:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class tx_myextension_pi1 extends tslib_pibase {&lt;br /&gt;
...&lt;br /&gt;
var $allowCaching = &amp;quot;&amp;quot;;&lt;br /&gt;
function main($content,$conf) {&lt;br /&gt;
$this-&amp;gt;conf=$conf;&lt;br /&gt;
...&lt;br /&gt;
// Preconfigure the typolink&lt;br /&gt;
$this-&amp;gt;local_cObj = t3lib_div::makeInstance(&amp;quot;tslib_cObj&amp;quot;);&lt;br /&gt;
$this-&amp;gt;local_cObj-&amp;gt;setCurrentVal($GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;id);&lt;br /&gt;
$this-&amp;gt;typolink_conf = $this-&amp;gt;conf[&amp;quot;typolink.&amp;quot;];&lt;br /&gt;
$this-&amp;gt;typolink_conf[&amp;quot;parameter.&amp;quot;][&amp;quot;current&amp;quot;] = 1;&lt;br /&gt;
$this-&amp;gt;typolink_conf[&amp;quot;additionalParams&amp;quot;] =&lt;br /&gt;
$this-&amp;gt;cObj-&amp;gt;stdWrap($this-&amp;gt;typolink_conf[&amp;quot;additionalParams&amp;quot;],&lt;br /&gt;
$this-&amp;gt;typolink_conf[&amp;quot;additionalParams.&amp;quot;]);&lt;br /&gt;
unset($this-&amp;gt;typolink_conf[&amp;quot;additionalParams.&amp;quot;]);&lt;br /&gt;
// Configure caching&lt;br /&gt;
$this-&amp;gt;allowCaching = $this-&amp;gt;conf[&amp;quot;allowCaching&amp;quot;]?1:0;&lt;br /&gt;
if (!$this-&amp;gt;allowCaching) {&lt;br /&gt;
$GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;set_no_cache();&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
Links erstellen&lt;br /&gt;
Um nun Links in der Erweiterung zu erstellen, benutze das folgende Code Fragment:&lt;br /&gt;
$temp_conf = $this-&amp;gt;typolink_conf;&lt;br /&gt;
$temp_conf[&amp;quot;additionalParams&amp;quot;] .= &amp;quot;&amp;amp;tx_myextension_pi1[key]=value&amp;quot;;&lt;br /&gt;
$temp_conf[&amp;quot;useCacheHash&amp;quot;] = $this-&amp;gt;allowCaching;&lt;br /&gt;
$temp_conf[&amp;quot;no_cache&amp;quot;] = !$this-&amp;gt;allowCaching;&lt;br /&gt;
$the_link = $this-&amp;gt;local_cObj-&amp;gt;typolink(&amp;quot;Linktext&amp;quot;, $temp_conf);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach kann man &amp;#039;$the_link&amp;#039; zu der Ausgabe hinzufügen. Das &amp;#039;$temp_conf&amp;#039; Array kann man mit allen&lt;br /&gt;
Eigenschaften des typolink Objektes erweitern.&lt;br /&gt;
&lt;br /&gt;
Tutorial by typo3.hachmeister.org&lt;br /&gt;
Von:fruit-lab.de&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Debug Methode ==&lt;br /&gt;
Typo3 | Debug Methode :: Hilfe bei der Programmierung&lt;br /&gt;
&lt;br /&gt;
Wenn man eine eigene Extension schreibt benutzt man zum größten Teil Array, und um den Überblick zu&lt;br /&gt;
behalten was nach den ganzen schritten in einem Array noch so drin steht hat man die möglichkeit mit einer Funktion das Array schön und sauber in einer tabelle anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$data = array(&amp;quot;Name&amp;quot; =&amp;gt; &amp;quot;Peter KeineAhnung&amp;quot;, &amp;quot;Alter&amp;quot; =&amp;gt; 22, &amp;quot;Wohnort&amp;quot; =&amp;gt; &amp;quot;Ratingen&amp;quot;);&lt;br /&gt;
echo t3lib_div::debug($data);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergebnis:&lt;br /&gt;
&lt;br /&gt;
[[Bild:TS_debug01.gif]]&lt;br /&gt;
&lt;br /&gt;
je nach devIPMask Einstellungen ist auch nur&lt;br /&gt;
 debug($sonstwas);&lt;br /&gt;
nützlich, vor allem wenn ein Kundenprojekt Online isteinfach im Installtool und devIpMask deine IP eingeben und dann mit debug($sonstwas); arbeiten, so kannst nur du den debug sehen und nicht irgendwelche User die grade auf der Site sind.&lt;br /&gt;
&lt;br /&gt;
Kleiner Zusatz Tip:&lt;br /&gt;
&lt;br /&gt;
Ihr lasst euch gleichzeitig mehrere Debugs ausgeben und verliert den überblick welcher debug welcher ist...&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Ihr lasst euch ein Array vor einer funktion debugen und anschliessend...&lt;br /&gt;
da habt ihr dann die möglichkeit euerem Debug einen Namen zu geben..&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$data = array(&amp;quot;Name&amp;quot; =&amp;gt; &amp;quot;Peter KeineAhnung&amp;quot;, &amp;quot;Alter&amp;quot; =&amp;gt; 22, &amp;quot;Wohnort&amp;quot; =&amp;gt; &amp;quot;Ratingen&amp;quot;);&lt;br /&gt;
echo t3lib_div::debug($data,&amp;#039;Array vorher&amp;#039;);&lt;br /&gt;
$data[&amp;#039;Name&amp;#039;] = &amp;#039;T.uX&amp;#039;;&lt;br /&gt;
$data[&amp;#039;Alter&amp;#039;] = 32;&lt;br /&gt;
echo t3lib_div::debug($data,&amp;#039;Array nachher&amp;#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergebnis:&lt;br /&gt;
&lt;br /&gt;
[[Bild:TS_debug02.gif]]&lt;br /&gt;
&lt;br /&gt;
Hinweis:&lt;br /&gt;
läst du dir eine Variable im debug ausgeben erscheint [b]|debug|[/b]. das funzt nur mit Arrays ;-)&lt;br /&gt;
Auch bei der Verwendung der integrierten DB-Abstrktionsschicht können eine Reihe von Fehlern auftreten,&lt;br /&gt;
die teilweise nur sehr magere Fehlermeldungen produzieren. Um eine etwas explizitere Fehlerausgabe zu&lt;br /&gt;
erzwingen sollte man folgende Zeile in seine Extension integrieren*:&lt;br /&gt;
$GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;debugOutput = true;&lt;br /&gt;
&lt;br /&gt;
So wird z.B. das SQL-Stement Ausgegeben, das zu einem Fehler geführt hat.&lt;br /&gt;
Tutorial by typo3.kj187.de&lt;br /&gt;
&lt;br /&gt;
== PHP-Skripte einbinden ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== mit PHP_SCRIPT ===&lt;br /&gt;
&lt;br /&gt;
Im Typo Script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##############################&lt;br /&gt;
### temporäres Test Script ###&lt;br /&gt;
##############################&lt;br /&gt;
&lt;br /&gt;
temp.phpScript = PHP_SCRIPT&lt;br /&gt;
temp.phpScript {&lt;br /&gt;
   file = demo/test.inc.php&lt;br /&gt;
   myVerySpecialOwnParameter = Hallo Welt&lt;br /&gt;
   myParamArray {&lt;br /&gt;
      a = 2&lt;br /&gt;
      b = 5&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Im Skript text.inc.php&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Use the debug-function to view the config&lt;br /&gt;
// array $conf given by TypoScript:&lt;br /&gt;
debug( $conf );&lt;br /&gt;
&lt;br /&gt;
$contentArr[] = &amp;quot;Test&amp;quot;;&lt;br /&gt;
$contentArr[] = $conf[&amp;#039;file&amp;#039;];&lt;br /&gt;
$contentArr[] = $conf[&amp;#039;myVerySpecialOwnParameter&amp;#039;];&lt;br /&gt;
$contentArr[] = implode( $conf[&amp;#039;myParamArray.&amp;#039;], &amp;#039;, &amp;#039; );&lt;br /&gt;
&lt;br /&gt;
// Put all your output to $content,&lt;br /&gt;
// that TYPO3 will display for you:&lt;br /&gt;
$content = implode( $contentArr, &amp;#039;&amp;lt; br /&amp;gt;&amp;#039; );&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== mit PHP_SCRIPT_EXT ===&lt;br /&gt;
Typo3 | Externe PHP Scripte einbinden&lt;br /&gt;
&lt;br /&gt;
Haben Sie ihr Projekt auf Typo3 umgestellt und wollen dennoch ihre eigenen PHP-Scripte verwenden? Dann machen Sie folgendes.&lt;br /&gt;
&lt;br /&gt;
Schreiben Sie in das SETUP Feld des Templates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tt_content.script = CASE&lt;br /&gt;
tt_content.script {&lt;br /&gt;
key.field = select_key&lt;br /&gt;
test = PHP_SCRIPT_EXT&lt;br /&gt;
test.file = fileadmin/dein_script.php&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um das Script jetzt als Contentelement in die Seite einzubinden, legen Sie einen neuen Seiteninhalt an. Wechseln Sie von Typ = Text auf Typ = Skript. In das CODE Feld müssen Sie jetzt nur noch test eintragen und sie sind fertig. &lt;br /&gt;
&lt;br /&gt;
Dies ist die einfachste Methode. Die Ausgabe des Scripts wird aber nicht in den Cache aufgenommen! Diese Funktion wird leider nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Tutorial by typo3.kj187.de&lt;br /&gt;
&lt;br /&gt;
Anmerkung Steff: Für die Cache Funktion kann man z.B. eine Einfache Extension basteln.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
===Einträge aus Bildausrichtungen im Backend entfernen===&lt;br /&gt;
aus cron_cssstyledimgtext&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;TYPO3_MODE&amp;#039;))     die (&amp;#039;Access denied.&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
t3lib_extMgm::addPItoST43($_EXTKEY,&amp;#039;pi1/class.tx_croncssstyledimgtext_pi1.php&amp;#039;,&amp;#039;_pi1&amp;#039;,&amp;#039;&amp;#039;,1);&lt;br /&gt;
&lt;br /&gt;
$_EXTCONF = unserialize($_EXTCONF);&lt;br /&gt;
if ($_EXTCONF[&amp;#039;addPageTS&amp;#039;])	{&lt;br /&gt;
	t3lib_extMgm::addPageTSConfig(&amp;#039;&lt;br /&gt;
TCEFORM.tt_content.imageorient.types.image.removeItems = 8,9,10,17,18,25,26&lt;br /&gt;
&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;XCLASS&amp;#039;][&amp;#039;tslib/class.tslib_content.php&amp;#039;]=t3lib_extMgm::extPath($_EXTKEY).&amp;#039;class.ux_tslib_content.php&amp;#039;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>84.160.195.20</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Extensions_programmieren&amp;diff=572</id>
		<title>Typo3 - Extensions programmieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Extensions_programmieren&amp;diff=572"/>
		<updated>2007-02-12T17:56:27Z</updated>

		<summary type="html">&lt;p&gt;84.160.195.20: /* Datenbankabfrage in Extensions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datenbankabfrage in Extensions ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
exec_SELECTquery(&lt;br /&gt;
&amp;#039;...&amp;#039;, # hier alle Felder&lt;br /&gt;
&amp;#039;tabelle1 a,tabelle2 b,tabelle3 c&amp;#039;, #hier die Tabellen&lt;br /&gt;
&amp;#039;a.feld=b.uid and b.feld=c.uid ...&amp;#039;, #die Zuordnung und sonstige wheres&lt;br /&gt;
&amp;#039;&amp;#039;,&amp;#039;&amp;#039;,&amp;#039;&amp;#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// SELECT:&lt;br /&gt;
$res = $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECTquery(&lt;br /&gt;
                &amp;#039;*&amp;#039;,         // SELECT ...&lt;br /&gt;
                &amp;#039;mytable&amp;#039;,     // FROM ...&lt;br /&gt;
                &amp;#039;uid=123 AND title LIKE &amp;quot;%blabla%&amp;quot;&amp;#039;,    // WHERE...&lt;br /&gt;
                &amp;#039;&amp;#039;,            // GROUP BY...&lt;br /&gt;
                &amp;#039;title&amp;#039;,    // ORDER BY...&lt;br /&gt;
                &amp;#039;5,10&amp;#039;            // LIMIT to 10 rows, starting with number 5 (MySQL compat.)&lt;br /&gt;
            );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// INSERT:&lt;br /&gt;
$insertArray = array(&lt;br /&gt;
    &amp;#039;pid&amp;#039; =&amp;gt; 123,&lt;br /&gt;
    &amp;#039;title&amp;#039; =&amp;gt; &amp;quot;My Title&amp;quot;&lt;br /&gt;
);&lt;br /&gt;
$res = $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_INSERTquery(&amp;#039;mytable&amp;#039;, $insertArray);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// UPDATE:&lt;br /&gt;
$updateArray = array(&lt;br /&gt;
    &amp;#039;title&amp;#039; =&amp;gt; &amp;quot;My Title&amp;quot;&lt;br /&gt;
);&lt;br /&gt;
$res = $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_UPDATEquery(&amp;#039;mytable&amp;#039;, &amp;#039;uid=123&amp;#039;, $updateArray);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// DELETE&lt;br /&gt;
$res = $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_DELETEquery(&amp;#039;mytable&amp;#039;, &amp;#039;uid=123&amp;#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$res=$GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECTquery(&lt;br /&gt;
  &amp;#039;COUNT(ap-status)&amp;#039;,     //felder&lt;br /&gt;
  &amp;#039;aa_tagungen&amp;#039;,              //from&lt;br /&gt;
  &amp;#039;id= &amp;#039;.$_GET[tid].&amp;#039;&amp;#039;,         //where&lt;br /&gt;
  &amp;#039;ap-status&amp;#039;,    //group&lt;br /&gt;
  &amp;#039;&amp;#039;,         //order&lt;br /&gt;
  &amp;#039;&amp;#039;          //limit&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
$l = mysql_fetch_array($res);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Zum Debuggen kann man so den Query testen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
t3lib_div::debug($GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;SELECTquery(&lt;br /&gt;
  &amp;#039;COUNT(ap-status)&amp;#039;,     //felder&lt;br /&gt;
  &amp;#039;aa_tagungen&amp;#039;,              //from&lt;br /&gt;
  &amp;#039;id= &amp;#039;.$_GET[tid].&amp;#039;&amp;#039;,         //where&lt;br /&gt;
  &amp;#039;ap-status&amp;#039;,    //group&lt;br /&gt;
  &amp;#039;&amp;#039;,         //order&lt;br /&gt;
  &amp;#039;&amp;#039;          //limit&lt;br /&gt;
));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Struktur einer Extension ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ext_emconf.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Informationen und Metadaten zur Extension. Etwa die Infos die im Kickstarter unter General Info stehen.&lt;br /&gt;
&lt;br /&gt;
* Root-Verzeichnis&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039; Enthält Konfigurationsdaten ($TYPO3_CONF_VARS) für das Backend und Frontend. Hier kann über die Extension API auch TypoScript eingebunden werden.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_tables.php&amp;#039;&amp;#039;&amp;#039; Konfiguration von Datenbanktabellen. Plugins und Module üver die Extension API einbinden. (Alles über Kickstarter)&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_tables.sql&amp;#039;&amp;#039;&amp;#039; SQL-Daten für die Tabellendefinition. Die Auswertung erfolgt über den Extension Manager und das Install-Tool.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_tables_static+adt.sql&amp;#039;&amp;#039;&amp;#039; SQL-Tabellendefinition inkl. Daten. Z.B. für statische Daten (Länderinfos etc.)Die Tabellen müssen zusätzlich in ext_tables.sql definiert sein.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_typoscript_*.txt&amp;#039;&amp;#039;&amp;#039; Globaler TypoScript-Code. Steht nicht üver Template-Datensätze zur Auswahl (siehe /static)&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_conf_template.txt&amp;#039;&amp;#039;&amp;#039; Hier werden Optionen zur Konfiguration angelegt, die der Benutzer im Extensionmanager einstellen kann.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;*icon*.gif&amp;#039;&amp;#039;&amp;#039; Symbol-Dateien für Extension,DB-Tabellen,Plugins, Module...&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;locallang*.php&amp;#039;&amp;#039;&amp;#039; Texte für die Lokalisierung in verschiedenen Sprachen&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;class.ext_update.php&amp;#039;&amp;#039;&amp;#039; Funktionen für ein Update der Extension (Beispiel siehe newloginbox).&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;pi1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für Skripte und Daten des Plugin&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;class*.php&amp;#039;&amp;#039;&amp;#039; PHP-Klassen z.B. für Plugins oder Submodule&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;cm1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für Dateien die das Kontext-Menü betreffen&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;mod1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für ein Modul.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;conf.php&amp;#039;&amp;#039;&amp;#039; Konfigurationsdatei für ein Modul zum einbinden ins Backend.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;index.php&amp;#039;&amp;#039;&amp;#039; Hauptscript eines Moduls.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;modfunc1/&amp;#039;&amp;#039;&amp;#039; Skripte und Daten für Submodul-Funktionen&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;static/&amp;#039;&amp;#039;&amp;#039; TypoScript-Template-Dateien. Diese werden über die Extension-API eingebunden und stehen dann in Template-Datensätzen, ähnlich den Standard Templates zur Auswahl.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;sv1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für Services&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;res/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für beliebige &amp;#039;recourcen&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;doc/&amp;#039;&amp;#039;&amp;#039; Verzeichnis der Dokumentation.&lt;br /&gt;
&lt;br /&gt;
== Wo werden Extensions installiert ? ==&lt;br /&gt;
===typo3/sysext/ (System)===&lt;br /&gt;
System Extensions wie cms und lang. Hier können keine Extensions mit dem Extension Manager installiert werden.&lt;br /&gt;
===typo3/ext/ - globale Extensions (Global) ===&lt;br /&gt;
Z.B. diese die von Typo3 mitgeliefert werden. Mit der Option allowGlobalInstall kann man die Installation in dieses Verzeichnis erlauben. Das ist dann nicht sinnvoll wenn sich mehrere Typo3 WEbsites eine Installation teilen, weil es hier zu Versionskonflikten kommen kann.&lt;br /&gt;
===typo3conf/ext - lokale Extensions (Local)===&lt;br /&gt;
Hier werden normalerweise alle Extensions installiert. Die Lokale Installation hat immer Vorang vor einer globalen.&lt;br /&gt;
&lt;br /&gt;
== Typolinks richtig in Extensions einsetzen ==&lt;br /&gt;
&lt;br /&gt;
In diesem kurzem Tutorial möchte ich zeigen, wie man Typolinks in eigenen Erweiterungen erstellt, die das&lt;br /&gt;
Feature &amp;#039;Simulate Static Documents&amp;#039; unterstützen und eine Ausgabe erstellen, die von Typo3 gecached wird&lt;br /&gt;
und so auch mit der Indexed search verwendet werden können. Diese Informationen wurden aus anderen&lt;br /&gt;
Erweiterungen zusammengetragen, speziell aus der Erweiterung tt_board.&lt;br /&gt;
Typoscript&lt;br /&gt;
Zuerst erstelle in der Datei &amp;#039;ext_typoscript_setup.txt&amp;#039; eine Eigenschaft, die deiner Erweiterung mitteilt, ob&lt;br /&gt;
caching genutzt werden soll oder nicht:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tx_myextension_pi1 {&lt;br /&gt;
allowCaching = 1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn das später auf 0 gesetzt wird, werden diese Seiten nicht mehr gecached.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vorbereitung&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Bereite in der main() Funktion den Typolink vor und konfiguriere das caching:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class tx_myextension_pi1 extends tslib_pibase {&lt;br /&gt;
...&lt;br /&gt;
var $allowCaching = &amp;quot;&amp;quot;;&lt;br /&gt;
function main($content,$conf) {&lt;br /&gt;
$this-&amp;gt;conf=$conf;&lt;br /&gt;
...&lt;br /&gt;
// Preconfigure the typolink&lt;br /&gt;
$this-&amp;gt;local_cObj = t3lib_div::makeInstance(&amp;quot;tslib_cObj&amp;quot;);&lt;br /&gt;
$this-&amp;gt;local_cObj-&amp;gt;setCurrentVal($GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;id);&lt;br /&gt;
$this-&amp;gt;typolink_conf = $this-&amp;gt;conf[&amp;quot;typolink.&amp;quot;];&lt;br /&gt;
$this-&amp;gt;typolink_conf[&amp;quot;parameter.&amp;quot;][&amp;quot;current&amp;quot;] = 1;&lt;br /&gt;
$this-&amp;gt;typolink_conf[&amp;quot;additionalParams&amp;quot;] =&lt;br /&gt;
$this-&amp;gt;cObj-&amp;gt;stdWrap($this-&amp;gt;typolink_conf[&amp;quot;additionalParams&amp;quot;],&lt;br /&gt;
$this-&amp;gt;typolink_conf[&amp;quot;additionalParams.&amp;quot;]);&lt;br /&gt;
unset($this-&amp;gt;typolink_conf[&amp;quot;additionalParams.&amp;quot;]);&lt;br /&gt;
// Configure caching&lt;br /&gt;
$this-&amp;gt;allowCaching = $this-&amp;gt;conf[&amp;quot;allowCaching&amp;quot;]?1:0;&lt;br /&gt;
if (!$this-&amp;gt;allowCaching) {&lt;br /&gt;
$GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;set_no_cache();&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
Links erstellen&lt;br /&gt;
Um nun Links in der Erweiterung zu erstellen, benutze das folgende Code Fragment:&lt;br /&gt;
$temp_conf = $this-&amp;gt;typolink_conf;&lt;br /&gt;
$temp_conf[&amp;quot;additionalParams&amp;quot;] .= &amp;quot;&amp;amp;tx_myextension_pi1[key]=value&amp;quot;;&lt;br /&gt;
$temp_conf[&amp;quot;useCacheHash&amp;quot;] = $this-&amp;gt;allowCaching;&lt;br /&gt;
$temp_conf[&amp;quot;no_cache&amp;quot;] = !$this-&amp;gt;allowCaching;&lt;br /&gt;
$the_link = $this-&amp;gt;local_cObj-&amp;gt;typolink(&amp;quot;Linktext&amp;quot;, $temp_conf);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach kann man &amp;#039;$the_link&amp;#039; zu der Ausgabe hinzufügen. Das &amp;#039;$temp_conf&amp;#039; Array kann man mit allen&lt;br /&gt;
Eigenschaften des typolink Objektes erweitern.&lt;br /&gt;
&lt;br /&gt;
Tutorial by typo3.hachmeister.org&lt;br /&gt;
Von:fruit-lab.de&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Debug Methode ==&lt;br /&gt;
Typo3 | Debug Methode :: Hilfe bei der Programmierung&lt;br /&gt;
&lt;br /&gt;
Wenn man eine eigene Extension schreibt benutzt man zum größten Teil Array, und um den Überblick zu&lt;br /&gt;
behalten was nach den ganzen schritten in einem Array noch so drin steht hat man die möglichkeit mit einer Funktion das Array schön und sauber in einer tabelle anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$data = array(&amp;quot;Name&amp;quot; =&amp;gt; &amp;quot;Peter KeineAhnung&amp;quot;, &amp;quot;Alter&amp;quot; =&amp;gt; 22, &amp;quot;Wohnort&amp;quot; =&amp;gt; &amp;quot;Ratingen&amp;quot;);&lt;br /&gt;
echo t3lib_div::debug($data);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergebnis:&lt;br /&gt;
&lt;br /&gt;
[[Bild:TS_debug01.gif]]&lt;br /&gt;
&lt;br /&gt;
je nach devIPMask Einstellungen ist auch nur&lt;br /&gt;
 debug($sonstwas);&lt;br /&gt;
nützlich, vor allem wenn ein Kundenprojekt Online isteinfach im Installtool und devIpMask deine IP eingeben und dann mit debug($sonstwas); arbeiten, so kannst nur du den debug sehen und nicht irgendwelche User die grade auf der Site sind.&lt;br /&gt;
&lt;br /&gt;
Kleiner Zusatz Tip:&lt;br /&gt;
&lt;br /&gt;
Ihr lasst euch gleichzeitig mehrere Debugs ausgeben und verliert den überblick welcher debug welcher ist...&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Ihr lasst euch ein Array vor einer funktion debugen und anschliessend...&lt;br /&gt;
da habt ihr dann die möglichkeit euerem Debug einen Namen zu geben..&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$data = array(&amp;quot;Name&amp;quot; =&amp;gt; &amp;quot;Peter KeineAhnung&amp;quot;, &amp;quot;Alter&amp;quot; =&amp;gt; 22, &amp;quot;Wohnort&amp;quot; =&amp;gt; &amp;quot;Ratingen&amp;quot;);&lt;br /&gt;
echo t3lib_div::debug($data,&amp;#039;Array vorher&amp;#039;);&lt;br /&gt;
$data[&amp;#039;Name&amp;#039;] = &amp;#039;T.uX&amp;#039;;&lt;br /&gt;
$data[&amp;#039;Alter&amp;#039;] = 32;&lt;br /&gt;
echo t3lib_div::debug($data,&amp;#039;Array nachher&amp;#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergebnis:&lt;br /&gt;
&lt;br /&gt;
[[Bild:TS_debug02.gif]]&lt;br /&gt;
&lt;br /&gt;
Hinweis:&lt;br /&gt;
läst du dir eine Variable im debug ausgeben erscheint [b]|debug|[/b]. das funzt nur mit Arrays ;-)&lt;br /&gt;
Auch bei der Verwendung der integrierten DB-Abstrktionsschicht können eine Reihe von Fehlern auftreten,&lt;br /&gt;
die teilweise nur sehr magere Fehlermeldungen produzieren. Um eine etwas explizitere Fehlerausgabe zu&lt;br /&gt;
erzwingen sollte man folgende Zeile in seine Extension integrieren*:&lt;br /&gt;
$GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;debugOutput = true;&lt;br /&gt;
&lt;br /&gt;
So wird z.B. das SQL-Stement Ausgegeben, das zu einem Fehler geführt hat.&lt;br /&gt;
Tutorial by typo3.kj187.de&lt;br /&gt;
&lt;br /&gt;
== PHP-Skripte einbinden ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== mit PHP_SCRIPT ===&lt;br /&gt;
&lt;br /&gt;
Im Typo Script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##############################&lt;br /&gt;
### temporäres Test Script ###&lt;br /&gt;
##############################&lt;br /&gt;
&lt;br /&gt;
temp.phpScript = PHP_SCRIPT&lt;br /&gt;
temp.phpScript {&lt;br /&gt;
   file = demo/test.inc.php&lt;br /&gt;
   myVerySpecialOwnParameter = Hallo Welt&lt;br /&gt;
   myParamArray {&lt;br /&gt;
      a = 2&lt;br /&gt;
      b = 5&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Im Skript text.inc.php&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Use the debug-function to view the config&lt;br /&gt;
// array $conf given by TypoScript:&lt;br /&gt;
debug( $conf );&lt;br /&gt;
&lt;br /&gt;
$contentArr[] = &amp;quot;Test&amp;quot;;&lt;br /&gt;
$contentArr[] = $conf[&amp;#039;file&amp;#039;];&lt;br /&gt;
$contentArr[] = $conf[&amp;#039;myVerySpecialOwnParameter&amp;#039;];&lt;br /&gt;
$contentArr[] = implode( $conf[&amp;#039;myParamArray.&amp;#039;], &amp;#039;, &amp;#039; );&lt;br /&gt;
&lt;br /&gt;
// Put all your output to $content,&lt;br /&gt;
// that TYPO3 will display for you:&lt;br /&gt;
$content = implode( $contentArr, &amp;#039;&amp;lt; br /&amp;gt;&amp;#039; );&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== mit PHP_SCRIPT_EXT ===&lt;br /&gt;
Typo3 | Externe PHP Scripte einbinden&lt;br /&gt;
&lt;br /&gt;
Haben Sie ihr Projekt auf Typo3 umgestellt und wollen dennoch ihre eigenen PHP-Scripte verwenden? Dann machen Sie folgendes.&lt;br /&gt;
&lt;br /&gt;
Schreiben Sie in das SETUP Feld des Templates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tt_content.script = CASE&lt;br /&gt;
tt_content.script {&lt;br /&gt;
key.field = select_key&lt;br /&gt;
test = PHP_SCRIPT_EXT&lt;br /&gt;
test.file = fileadmin/dein_script.php&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um das Script jetzt als Contentelement in die Seite einzubinden, legen Sie einen neuen Seiteninhalt an. Wechseln Sie von Typ = Text auf Typ = Skript. In das CODE Feld müssen Sie jetzt nur noch test eintragen und sie sind fertig. &lt;br /&gt;
&lt;br /&gt;
Dies ist die einfachste Methode. Die Ausgabe des Scripts wird aber nicht in den Cache aufgenommen! Diese Funktion wird leider nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Tutorial by typo3.kj187.de&lt;br /&gt;
&lt;br /&gt;
Anmerkung Steff: Für die Cache Funktion kann man z.B. eine Einfache Extension basteln.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
===Einträge aus Bildausrichtungen im Backend entfernen===&lt;br /&gt;
aus cron_cssstyledimgtext&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;TYPO3_MODE&amp;#039;))     die (&amp;#039;Access denied.&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
t3lib_extMgm::addPItoST43($_EXTKEY,&amp;#039;pi1/class.tx_croncssstyledimgtext_pi1.php&amp;#039;,&amp;#039;_pi1&amp;#039;,&amp;#039;&amp;#039;,1);&lt;br /&gt;
&lt;br /&gt;
$_EXTCONF = unserialize($_EXTCONF);&lt;br /&gt;
if ($_EXTCONF[&amp;#039;addPageTS&amp;#039;])	{&lt;br /&gt;
	t3lib_extMgm::addPageTSConfig(&amp;#039;&lt;br /&gt;
TCEFORM.tt_content.imageorient.types.image.removeItems = 8,9,10,17,18,25,26&lt;br /&gt;
&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;XCLASS&amp;#039;][&amp;#039;tslib/class.tslib_content.php&amp;#039;]=t3lib_extMgm::extPath($_EXTKEY).&amp;#039;class.ux_tslib_content.php&amp;#039;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>84.160.195.20</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Extensions_programmieren&amp;diff=571</id>
		<title>Typo3 - Extensions programmieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Extensions_programmieren&amp;diff=571"/>
		<updated>2007-02-12T17:55:58Z</updated>

		<summary type="html">&lt;p&gt;84.160.195.20: /* Datenbankabfrage in Extensions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datenbankabfrage in Extensions ==&lt;br /&gt;
=== Allgemein ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
exec_SELECTquery(&lt;br /&gt;
&amp;#039;...&amp;#039;, # hier alle Felder&lt;br /&gt;
&amp;#039;tabelle1 a,tabelle2 b,tabelle3 c&amp;#039;, #hier die Tabellen&lt;br /&gt;
&amp;#039;a.feld=b.uid and b.feld=c.uid ...&amp;#039;, #die Zuordnung und sonstige wheres&lt;br /&gt;
&amp;#039;&amp;#039;,&amp;#039;&amp;#039;,&amp;#039;&amp;#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Beispiele ===&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// SELECT:&lt;br /&gt;
$res = $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECTquery(&lt;br /&gt;
                &amp;#039;*&amp;#039;,         // SELECT ...&lt;br /&gt;
                &amp;#039;mytable&amp;#039;,     // FROM ...&lt;br /&gt;
                &amp;#039;uid=123 AND title LIKE &amp;quot;%blabla%&amp;quot;&amp;#039;,    // WHERE...&lt;br /&gt;
                &amp;#039;&amp;#039;,            // GROUP BY...&lt;br /&gt;
                &amp;#039;title&amp;#039;,    // ORDER BY...&lt;br /&gt;
                &amp;#039;5,10&amp;#039;            // LIMIT to 10 rows, starting with number 5 (MySQL compat.)&lt;br /&gt;
            );&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// INSERT:&lt;br /&gt;
$insertArray = array(&lt;br /&gt;
    &amp;#039;pid&amp;#039; =&amp;gt; 123,&lt;br /&gt;
    &amp;#039;title&amp;#039; =&amp;gt; &amp;quot;My Title&amp;quot;&lt;br /&gt;
);&lt;br /&gt;
$res = $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_INSERTquery(&amp;#039;mytable&amp;#039;, $insertArray);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// UPDATE:&lt;br /&gt;
$updateArray = array(&lt;br /&gt;
    &amp;#039;title&amp;#039; =&amp;gt; &amp;quot;My Title&amp;quot;&lt;br /&gt;
);&lt;br /&gt;
$res = $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_UPDATEquery(&amp;#039;mytable&amp;#039;, &amp;#039;uid=123&amp;#039;, $updateArray);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// DELETE&lt;br /&gt;
$res = $GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_DELETEquery(&amp;#039;mytable&amp;#039;, &amp;#039;uid=123&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$res=$GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECTquery(&lt;br /&gt;
  &amp;#039;COUNT(ap-status)&amp;#039;,     //felder&lt;br /&gt;
  &amp;#039;aa_tagungen&amp;#039;,              //from&lt;br /&gt;
  &amp;#039;id= &amp;#039;.$_GET[tid].&amp;#039;&amp;#039;,         //where&lt;br /&gt;
  &amp;#039;ap-status&amp;#039;,    //group&lt;br /&gt;
  &amp;#039;&amp;#039;,         //order&lt;br /&gt;
  &amp;#039;&amp;#039;          //limit&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
$l = mysql_fetch_array($res);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Zum Debuggen kann man so den Query testen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
t3lib_div::debug($GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;SELECTquery(&lt;br /&gt;
  &amp;#039;COUNT(ap-status)&amp;#039;,     //felder&lt;br /&gt;
  &amp;#039;aa_tagungen&amp;#039;,              //from&lt;br /&gt;
  &amp;#039;id= &amp;#039;.$_GET[tid].&amp;#039;&amp;#039;,         //where&lt;br /&gt;
  &amp;#039;ap-status&amp;#039;,    //group&lt;br /&gt;
  &amp;#039;&amp;#039;,         //order&lt;br /&gt;
  &amp;#039;&amp;#039;          //limit&lt;br /&gt;
));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Struktur einer Extension ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ext_emconf.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Informationen und Metadaten zur Extension. Etwa die Infos die im Kickstarter unter General Info stehen.&lt;br /&gt;
&lt;br /&gt;
* Root-Verzeichnis&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039; Enthält Konfigurationsdaten ($TYPO3_CONF_VARS) für das Backend und Frontend. Hier kann über die Extension API auch TypoScript eingebunden werden.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_tables.php&amp;#039;&amp;#039;&amp;#039; Konfiguration von Datenbanktabellen. Plugins und Module üver die Extension API einbinden. (Alles über Kickstarter)&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_tables.sql&amp;#039;&amp;#039;&amp;#039; SQL-Daten für die Tabellendefinition. Die Auswertung erfolgt über den Extension Manager und das Install-Tool.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_tables_static+adt.sql&amp;#039;&amp;#039;&amp;#039; SQL-Tabellendefinition inkl. Daten. Z.B. für statische Daten (Länderinfos etc.)Die Tabellen müssen zusätzlich in ext_tables.sql definiert sein.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_typoscript_*.txt&amp;#039;&amp;#039;&amp;#039; Globaler TypoScript-Code. Steht nicht üver Template-Datensätze zur Auswahl (siehe /static)&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_conf_template.txt&amp;#039;&amp;#039;&amp;#039; Hier werden Optionen zur Konfiguration angelegt, die der Benutzer im Extensionmanager einstellen kann.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;*icon*.gif&amp;#039;&amp;#039;&amp;#039; Symbol-Dateien für Extension,DB-Tabellen,Plugins, Module...&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;locallang*.php&amp;#039;&amp;#039;&amp;#039; Texte für die Lokalisierung in verschiedenen Sprachen&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;class.ext_update.php&amp;#039;&amp;#039;&amp;#039; Funktionen für ein Update der Extension (Beispiel siehe newloginbox).&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;pi1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für Skripte und Daten des Plugin&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;class*.php&amp;#039;&amp;#039;&amp;#039; PHP-Klassen z.B. für Plugins oder Submodule&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;cm1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für Dateien die das Kontext-Menü betreffen&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;mod1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für ein Modul.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;conf.php&amp;#039;&amp;#039;&amp;#039; Konfigurationsdatei für ein Modul zum einbinden ins Backend.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;index.php&amp;#039;&amp;#039;&amp;#039; Hauptscript eines Moduls.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;modfunc1/&amp;#039;&amp;#039;&amp;#039; Skripte und Daten für Submodul-Funktionen&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;static/&amp;#039;&amp;#039;&amp;#039; TypoScript-Template-Dateien. Diese werden über die Extension-API eingebunden und stehen dann in Template-Datensätzen, ähnlich den Standard Templates zur Auswahl.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;sv1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für Services&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;res/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für beliebige &amp;#039;recourcen&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;doc/&amp;#039;&amp;#039;&amp;#039; Verzeichnis der Dokumentation.&lt;br /&gt;
&lt;br /&gt;
== Wo werden Extensions installiert ? ==&lt;br /&gt;
===typo3/sysext/ (System)===&lt;br /&gt;
System Extensions wie cms und lang. Hier können keine Extensions mit dem Extension Manager installiert werden.&lt;br /&gt;
===typo3/ext/ - globale Extensions (Global) ===&lt;br /&gt;
Z.B. diese die von Typo3 mitgeliefert werden. Mit der Option allowGlobalInstall kann man die Installation in dieses Verzeichnis erlauben. Das ist dann nicht sinnvoll wenn sich mehrere Typo3 WEbsites eine Installation teilen, weil es hier zu Versionskonflikten kommen kann.&lt;br /&gt;
===typo3conf/ext - lokale Extensions (Local)===&lt;br /&gt;
Hier werden normalerweise alle Extensions installiert. Die Lokale Installation hat immer Vorang vor einer globalen.&lt;br /&gt;
&lt;br /&gt;
== Typolinks richtig in Extensions einsetzen ==&lt;br /&gt;
&lt;br /&gt;
In diesem kurzem Tutorial möchte ich zeigen, wie man Typolinks in eigenen Erweiterungen erstellt, die das&lt;br /&gt;
Feature &amp;#039;Simulate Static Documents&amp;#039; unterstützen und eine Ausgabe erstellen, die von Typo3 gecached wird&lt;br /&gt;
und so auch mit der Indexed search verwendet werden können. Diese Informationen wurden aus anderen&lt;br /&gt;
Erweiterungen zusammengetragen, speziell aus der Erweiterung tt_board.&lt;br /&gt;
Typoscript&lt;br /&gt;
Zuerst erstelle in der Datei &amp;#039;ext_typoscript_setup.txt&amp;#039; eine Eigenschaft, die deiner Erweiterung mitteilt, ob&lt;br /&gt;
caching genutzt werden soll oder nicht:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tx_myextension_pi1 {&lt;br /&gt;
allowCaching = 1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn das später auf 0 gesetzt wird, werden diese Seiten nicht mehr gecached.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vorbereitung&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Bereite in der main() Funktion den Typolink vor und konfiguriere das caching:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class tx_myextension_pi1 extends tslib_pibase {&lt;br /&gt;
...&lt;br /&gt;
var $allowCaching = &amp;quot;&amp;quot;;&lt;br /&gt;
function main($content,$conf) {&lt;br /&gt;
$this-&amp;gt;conf=$conf;&lt;br /&gt;
...&lt;br /&gt;
// Preconfigure the typolink&lt;br /&gt;
$this-&amp;gt;local_cObj = t3lib_div::makeInstance(&amp;quot;tslib_cObj&amp;quot;);&lt;br /&gt;
$this-&amp;gt;local_cObj-&amp;gt;setCurrentVal($GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;id);&lt;br /&gt;
$this-&amp;gt;typolink_conf = $this-&amp;gt;conf[&amp;quot;typolink.&amp;quot;];&lt;br /&gt;
$this-&amp;gt;typolink_conf[&amp;quot;parameter.&amp;quot;][&amp;quot;current&amp;quot;] = 1;&lt;br /&gt;
$this-&amp;gt;typolink_conf[&amp;quot;additionalParams&amp;quot;] =&lt;br /&gt;
$this-&amp;gt;cObj-&amp;gt;stdWrap($this-&amp;gt;typolink_conf[&amp;quot;additionalParams&amp;quot;],&lt;br /&gt;
$this-&amp;gt;typolink_conf[&amp;quot;additionalParams.&amp;quot;]);&lt;br /&gt;
unset($this-&amp;gt;typolink_conf[&amp;quot;additionalParams.&amp;quot;]);&lt;br /&gt;
// Configure caching&lt;br /&gt;
$this-&amp;gt;allowCaching = $this-&amp;gt;conf[&amp;quot;allowCaching&amp;quot;]?1:0;&lt;br /&gt;
if (!$this-&amp;gt;allowCaching) {&lt;br /&gt;
$GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;set_no_cache();&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
Links erstellen&lt;br /&gt;
Um nun Links in der Erweiterung zu erstellen, benutze das folgende Code Fragment:&lt;br /&gt;
$temp_conf = $this-&amp;gt;typolink_conf;&lt;br /&gt;
$temp_conf[&amp;quot;additionalParams&amp;quot;] .= &amp;quot;&amp;amp;tx_myextension_pi1[key]=value&amp;quot;;&lt;br /&gt;
$temp_conf[&amp;quot;useCacheHash&amp;quot;] = $this-&amp;gt;allowCaching;&lt;br /&gt;
$temp_conf[&amp;quot;no_cache&amp;quot;] = !$this-&amp;gt;allowCaching;&lt;br /&gt;
$the_link = $this-&amp;gt;local_cObj-&amp;gt;typolink(&amp;quot;Linktext&amp;quot;, $temp_conf);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach kann man &amp;#039;$the_link&amp;#039; zu der Ausgabe hinzufügen. Das &amp;#039;$temp_conf&amp;#039; Array kann man mit allen&lt;br /&gt;
Eigenschaften des typolink Objektes erweitern.&lt;br /&gt;
&lt;br /&gt;
Tutorial by typo3.hachmeister.org&lt;br /&gt;
Von:fruit-lab.de&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Debug Methode ==&lt;br /&gt;
Typo3 | Debug Methode :: Hilfe bei der Programmierung&lt;br /&gt;
&lt;br /&gt;
Wenn man eine eigene Extension schreibt benutzt man zum größten Teil Array, und um den Überblick zu&lt;br /&gt;
behalten was nach den ganzen schritten in einem Array noch so drin steht hat man die möglichkeit mit einer Funktion das Array schön und sauber in einer tabelle anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$data = array(&amp;quot;Name&amp;quot; =&amp;gt; &amp;quot;Peter KeineAhnung&amp;quot;, &amp;quot;Alter&amp;quot; =&amp;gt; 22, &amp;quot;Wohnort&amp;quot; =&amp;gt; &amp;quot;Ratingen&amp;quot;);&lt;br /&gt;
echo t3lib_div::debug($data);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergebnis:&lt;br /&gt;
&lt;br /&gt;
[[Bild:TS_debug01.gif]]&lt;br /&gt;
&lt;br /&gt;
je nach devIPMask Einstellungen ist auch nur&lt;br /&gt;
 debug($sonstwas);&lt;br /&gt;
nützlich, vor allem wenn ein Kundenprojekt Online isteinfach im Installtool und devIpMask deine IP eingeben und dann mit debug($sonstwas); arbeiten, so kannst nur du den debug sehen und nicht irgendwelche User die grade auf der Site sind.&lt;br /&gt;
&lt;br /&gt;
Kleiner Zusatz Tip:&lt;br /&gt;
&lt;br /&gt;
Ihr lasst euch gleichzeitig mehrere Debugs ausgeben und verliert den überblick welcher debug welcher ist...&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Ihr lasst euch ein Array vor einer funktion debugen und anschliessend...&lt;br /&gt;
da habt ihr dann die möglichkeit euerem Debug einen Namen zu geben..&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$data = array(&amp;quot;Name&amp;quot; =&amp;gt; &amp;quot;Peter KeineAhnung&amp;quot;, &amp;quot;Alter&amp;quot; =&amp;gt; 22, &amp;quot;Wohnort&amp;quot; =&amp;gt; &amp;quot;Ratingen&amp;quot;);&lt;br /&gt;
echo t3lib_div::debug($data,&amp;#039;Array vorher&amp;#039;);&lt;br /&gt;
$data[&amp;#039;Name&amp;#039;] = &amp;#039;T.uX&amp;#039;;&lt;br /&gt;
$data[&amp;#039;Alter&amp;#039;] = 32;&lt;br /&gt;
echo t3lib_div::debug($data,&amp;#039;Array nachher&amp;#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergebnis:&lt;br /&gt;
&lt;br /&gt;
[[Bild:TS_debug02.gif]]&lt;br /&gt;
&lt;br /&gt;
Hinweis:&lt;br /&gt;
läst du dir eine Variable im debug ausgeben erscheint [b]|debug|[/b]. das funzt nur mit Arrays ;-)&lt;br /&gt;
Auch bei der Verwendung der integrierten DB-Abstrktionsschicht können eine Reihe von Fehlern auftreten,&lt;br /&gt;
die teilweise nur sehr magere Fehlermeldungen produzieren. Um eine etwas explizitere Fehlerausgabe zu&lt;br /&gt;
erzwingen sollte man folgende Zeile in seine Extension integrieren*:&lt;br /&gt;
$GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;debugOutput = true;&lt;br /&gt;
&lt;br /&gt;
So wird z.B. das SQL-Stement Ausgegeben, das zu einem Fehler geführt hat.&lt;br /&gt;
Tutorial by typo3.kj187.de&lt;br /&gt;
&lt;br /&gt;
== PHP-Skripte einbinden ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== mit PHP_SCRIPT ===&lt;br /&gt;
&lt;br /&gt;
Im Typo Script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##############################&lt;br /&gt;
### temporäres Test Script ###&lt;br /&gt;
##############################&lt;br /&gt;
&lt;br /&gt;
temp.phpScript = PHP_SCRIPT&lt;br /&gt;
temp.phpScript {&lt;br /&gt;
   file = demo/test.inc.php&lt;br /&gt;
   myVerySpecialOwnParameter = Hallo Welt&lt;br /&gt;
   myParamArray {&lt;br /&gt;
      a = 2&lt;br /&gt;
      b = 5&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Im Skript text.inc.php&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Use the debug-function to view the config&lt;br /&gt;
// array $conf given by TypoScript:&lt;br /&gt;
debug( $conf );&lt;br /&gt;
&lt;br /&gt;
$contentArr[] = &amp;quot;Test&amp;quot;;&lt;br /&gt;
$contentArr[] = $conf[&amp;#039;file&amp;#039;];&lt;br /&gt;
$contentArr[] = $conf[&amp;#039;myVerySpecialOwnParameter&amp;#039;];&lt;br /&gt;
$contentArr[] = implode( $conf[&amp;#039;myParamArray.&amp;#039;], &amp;#039;, &amp;#039; );&lt;br /&gt;
&lt;br /&gt;
// Put all your output to $content,&lt;br /&gt;
// that TYPO3 will display for you:&lt;br /&gt;
$content = implode( $contentArr, &amp;#039;&amp;lt; br /&amp;gt;&amp;#039; );&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== mit PHP_SCRIPT_EXT ===&lt;br /&gt;
Typo3 | Externe PHP Scripte einbinden&lt;br /&gt;
&lt;br /&gt;
Haben Sie ihr Projekt auf Typo3 umgestellt und wollen dennoch ihre eigenen PHP-Scripte verwenden? Dann machen Sie folgendes.&lt;br /&gt;
&lt;br /&gt;
Schreiben Sie in das SETUP Feld des Templates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tt_content.script = CASE&lt;br /&gt;
tt_content.script {&lt;br /&gt;
key.field = select_key&lt;br /&gt;
test = PHP_SCRIPT_EXT&lt;br /&gt;
test.file = fileadmin/dein_script.php&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um das Script jetzt als Contentelement in die Seite einzubinden, legen Sie einen neuen Seiteninhalt an. Wechseln Sie von Typ = Text auf Typ = Skript. In das CODE Feld müssen Sie jetzt nur noch test eintragen und sie sind fertig. &lt;br /&gt;
&lt;br /&gt;
Dies ist die einfachste Methode. Die Ausgabe des Scripts wird aber nicht in den Cache aufgenommen! Diese Funktion wird leider nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Tutorial by typo3.kj187.de&lt;br /&gt;
&lt;br /&gt;
Anmerkung Steff: Für die Cache Funktion kann man z.B. eine Einfache Extension basteln.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
===Einträge aus Bildausrichtungen im Backend entfernen===&lt;br /&gt;
aus cron_cssstyledimgtext&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;TYPO3_MODE&amp;#039;))     die (&amp;#039;Access denied.&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
t3lib_extMgm::addPItoST43($_EXTKEY,&amp;#039;pi1/class.tx_croncssstyledimgtext_pi1.php&amp;#039;,&amp;#039;_pi1&amp;#039;,&amp;#039;&amp;#039;,1);&lt;br /&gt;
&lt;br /&gt;
$_EXTCONF = unserialize($_EXTCONF);&lt;br /&gt;
if ($_EXTCONF[&amp;#039;addPageTS&amp;#039;])	{&lt;br /&gt;
	t3lib_extMgm::addPageTSConfig(&amp;#039;&lt;br /&gt;
TCEFORM.tt_content.imageorient.types.image.removeItems = 8,9,10,17,18,25,26&lt;br /&gt;
&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;XCLASS&amp;#039;][&amp;#039;tslib/class.tslib_content.php&amp;#039;]=t3lib_extMgm::extPath($_EXTKEY).&amp;#039;class.ux_tslib_content.php&amp;#039;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>84.160.195.20</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Extensions_programmieren&amp;diff=570</id>
		<title>Typo3 - Extensions programmieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Extensions_programmieren&amp;diff=570"/>
		<updated>2007-02-12T17:48:40Z</updated>

		<summary type="html">&lt;p&gt;84.160.195.20: /* Datenbankabfrage in Extensions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datenbankabfrage in Extensions ==&lt;br /&gt;
Allgemein:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
exec_SELECTquery(&lt;br /&gt;
&amp;#039;...&amp;#039;, # hier alle Felder&lt;br /&gt;
&amp;#039;tabelle1 a,tabelle2 b,tabelle3 c&amp;#039;, #hier die Tabellen&lt;br /&gt;
&amp;#039;a.feld=b.uid and b.feld=c.uid ...&amp;#039;, #die Zuordnung und sonstige wheres&lt;br /&gt;
&amp;#039;&amp;#039;,&amp;#039;&amp;#039;,&amp;#039;&amp;#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$res=$GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECTquery(&lt;br /&gt;
  &amp;#039;COUNT(ap-status)&amp;#039;,     //felder&lt;br /&gt;
  &amp;#039;aa_tagungen&amp;#039;,              //from&lt;br /&gt;
  &amp;#039;id= &amp;#039;.$_GET[tid].&amp;#039;&amp;#039;,         //where&lt;br /&gt;
  &amp;#039;ap-status&amp;#039;,    //group&lt;br /&gt;
  &amp;#039;&amp;#039;,         //order&lt;br /&gt;
  &amp;#039;&amp;#039;          //limit&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
$l = mysql_fetch_array($res);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Zum Debuggen kann man so den Query testen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
t3lib_div::debug($GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;SELECTquery(&lt;br /&gt;
  &amp;#039;COUNT(ap-status)&amp;#039;,     //felder&lt;br /&gt;
  &amp;#039;aa_tagungen&amp;#039;,              //from&lt;br /&gt;
  &amp;#039;id= &amp;#039;.$_GET[tid].&amp;#039;&amp;#039;,         //where&lt;br /&gt;
  &amp;#039;ap-status&amp;#039;,    //group&lt;br /&gt;
  &amp;#039;&amp;#039;,         //order&lt;br /&gt;
  &amp;#039;&amp;#039;          //limit&lt;br /&gt;
));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Struktur einer Extension ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ext_emconf.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Informationen und Metadaten zur Extension. Etwa die Infos die im Kickstarter unter General Info stehen.&lt;br /&gt;
&lt;br /&gt;
* Root-Verzeichnis&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039; Enthält Konfigurationsdaten ($TYPO3_CONF_VARS) für das Backend und Frontend. Hier kann über die Extension API auch TypoScript eingebunden werden.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_tables.php&amp;#039;&amp;#039;&amp;#039; Konfiguration von Datenbanktabellen. Plugins und Module üver die Extension API einbinden. (Alles über Kickstarter)&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_tables.sql&amp;#039;&amp;#039;&amp;#039; SQL-Daten für die Tabellendefinition. Die Auswertung erfolgt über den Extension Manager und das Install-Tool.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_tables_static+adt.sql&amp;#039;&amp;#039;&amp;#039; SQL-Tabellendefinition inkl. Daten. Z.B. für statische Daten (Länderinfos etc.)Die Tabellen müssen zusätzlich in ext_tables.sql definiert sein.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_typoscript_*.txt&amp;#039;&amp;#039;&amp;#039; Globaler TypoScript-Code. Steht nicht üver Template-Datensätze zur Auswahl (siehe /static)&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_conf_template.txt&amp;#039;&amp;#039;&amp;#039; Hier werden Optionen zur Konfiguration angelegt, die der Benutzer im Extensionmanager einstellen kann.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;*icon*.gif&amp;#039;&amp;#039;&amp;#039; Symbol-Dateien für Extension,DB-Tabellen,Plugins, Module...&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;locallang*.php&amp;#039;&amp;#039;&amp;#039; Texte für die Lokalisierung in verschiedenen Sprachen&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;class.ext_update.php&amp;#039;&amp;#039;&amp;#039; Funktionen für ein Update der Extension (Beispiel siehe newloginbox).&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;pi1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für Skripte und Daten des Plugin&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;class*.php&amp;#039;&amp;#039;&amp;#039; PHP-Klassen z.B. für Plugins oder Submodule&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;cm1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für Dateien die das Kontext-Menü betreffen&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;mod1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für ein Modul.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;conf.php&amp;#039;&amp;#039;&amp;#039; Konfigurationsdatei für ein Modul zum einbinden ins Backend.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;index.php&amp;#039;&amp;#039;&amp;#039; Hauptscript eines Moduls.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;modfunc1/&amp;#039;&amp;#039;&amp;#039; Skripte und Daten für Submodul-Funktionen&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;static/&amp;#039;&amp;#039;&amp;#039; TypoScript-Template-Dateien. Diese werden über die Extension-API eingebunden und stehen dann in Template-Datensätzen, ähnlich den Standard Templates zur Auswahl.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;sv1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für Services&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;res/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für beliebige &amp;#039;recourcen&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;doc/&amp;#039;&amp;#039;&amp;#039; Verzeichnis der Dokumentation.&lt;br /&gt;
&lt;br /&gt;
== Wo werden Extensions installiert ? ==&lt;br /&gt;
===typo3/sysext/ (System)===&lt;br /&gt;
System Extensions wie cms und lang. Hier können keine Extensions mit dem Extension Manager installiert werden.&lt;br /&gt;
===typo3/ext/ - globale Extensions (Global) ===&lt;br /&gt;
Z.B. diese die von Typo3 mitgeliefert werden. Mit der Option allowGlobalInstall kann man die Installation in dieses Verzeichnis erlauben. Das ist dann nicht sinnvoll wenn sich mehrere Typo3 WEbsites eine Installation teilen, weil es hier zu Versionskonflikten kommen kann.&lt;br /&gt;
===typo3conf/ext - lokale Extensions (Local)===&lt;br /&gt;
Hier werden normalerweise alle Extensions installiert. Die Lokale Installation hat immer Vorang vor einer globalen.&lt;br /&gt;
&lt;br /&gt;
== Typolinks richtig in Extensions einsetzen ==&lt;br /&gt;
&lt;br /&gt;
In diesem kurzem Tutorial möchte ich zeigen, wie man Typolinks in eigenen Erweiterungen erstellt, die das&lt;br /&gt;
Feature &amp;#039;Simulate Static Documents&amp;#039; unterstützen und eine Ausgabe erstellen, die von Typo3 gecached wird&lt;br /&gt;
und so auch mit der Indexed search verwendet werden können. Diese Informationen wurden aus anderen&lt;br /&gt;
Erweiterungen zusammengetragen, speziell aus der Erweiterung tt_board.&lt;br /&gt;
Typoscript&lt;br /&gt;
Zuerst erstelle in der Datei &amp;#039;ext_typoscript_setup.txt&amp;#039; eine Eigenschaft, die deiner Erweiterung mitteilt, ob&lt;br /&gt;
caching genutzt werden soll oder nicht:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tx_myextension_pi1 {&lt;br /&gt;
allowCaching = 1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn das später auf 0 gesetzt wird, werden diese Seiten nicht mehr gecached.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vorbereitung&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Bereite in der main() Funktion den Typolink vor und konfiguriere das caching:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class tx_myextension_pi1 extends tslib_pibase {&lt;br /&gt;
...&lt;br /&gt;
var $allowCaching = &amp;quot;&amp;quot;;&lt;br /&gt;
function main($content,$conf) {&lt;br /&gt;
$this-&amp;gt;conf=$conf;&lt;br /&gt;
...&lt;br /&gt;
// Preconfigure the typolink&lt;br /&gt;
$this-&amp;gt;local_cObj = t3lib_div::makeInstance(&amp;quot;tslib_cObj&amp;quot;);&lt;br /&gt;
$this-&amp;gt;local_cObj-&amp;gt;setCurrentVal($GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;id);&lt;br /&gt;
$this-&amp;gt;typolink_conf = $this-&amp;gt;conf[&amp;quot;typolink.&amp;quot;];&lt;br /&gt;
$this-&amp;gt;typolink_conf[&amp;quot;parameter.&amp;quot;][&amp;quot;current&amp;quot;] = 1;&lt;br /&gt;
$this-&amp;gt;typolink_conf[&amp;quot;additionalParams&amp;quot;] =&lt;br /&gt;
$this-&amp;gt;cObj-&amp;gt;stdWrap($this-&amp;gt;typolink_conf[&amp;quot;additionalParams&amp;quot;],&lt;br /&gt;
$this-&amp;gt;typolink_conf[&amp;quot;additionalParams.&amp;quot;]);&lt;br /&gt;
unset($this-&amp;gt;typolink_conf[&amp;quot;additionalParams.&amp;quot;]);&lt;br /&gt;
// Configure caching&lt;br /&gt;
$this-&amp;gt;allowCaching = $this-&amp;gt;conf[&amp;quot;allowCaching&amp;quot;]?1:0;&lt;br /&gt;
if (!$this-&amp;gt;allowCaching) {&lt;br /&gt;
$GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;set_no_cache();&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
Links erstellen&lt;br /&gt;
Um nun Links in der Erweiterung zu erstellen, benutze das folgende Code Fragment:&lt;br /&gt;
$temp_conf = $this-&amp;gt;typolink_conf;&lt;br /&gt;
$temp_conf[&amp;quot;additionalParams&amp;quot;] .= &amp;quot;&amp;amp;tx_myextension_pi1[key]=value&amp;quot;;&lt;br /&gt;
$temp_conf[&amp;quot;useCacheHash&amp;quot;] = $this-&amp;gt;allowCaching;&lt;br /&gt;
$temp_conf[&amp;quot;no_cache&amp;quot;] = !$this-&amp;gt;allowCaching;&lt;br /&gt;
$the_link = $this-&amp;gt;local_cObj-&amp;gt;typolink(&amp;quot;Linktext&amp;quot;, $temp_conf);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach kann man &amp;#039;$the_link&amp;#039; zu der Ausgabe hinzufügen. Das &amp;#039;$temp_conf&amp;#039; Array kann man mit allen&lt;br /&gt;
Eigenschaften des typolink Objektes erweitern.&lt;br /&gt;
&lt;br /&gt;
Tutorial by typo3.hachmeister.org&lt;br /&gt;
Von:fruit-lab.de&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Debug Methode ==&lt;br /&gt;
Typo3 | Debug Methode :: Hilfe bei der Programmierung&lt;br /&gt;
&lt;br /&gt;
Wenn man eine eigene Extension schreibt benutzt man zum größten Teil Array, und um den Überblick zu&lt;br /&gt;
behalten was nach den ganzen schritten in einem Array noch so drin steht hat man die möglichkeit mit einer Funktion das Array schön und sauber in einer tabelle anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$data = array(&amp;quot;Name&amp;quot; =&amp;gt; &amp;quot;Peter KeineAhnung&amp;quot;, &amp;quot;Alter&amp;quot; =&amp;gt; 22, &amp;quot;Wohnort&amp;quot; =&amp;gt; &amp;quot;Ratingen&amp;quot;);&lt;br /&gt;
echo t3lib_div::debug($data);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergebnis:&lt;br /&gt;
&lt;br /&gt;
[[Bild:TS_debug01.gif]]&lt;br /&gt;
&lt;br /&gt;
je nach devIPMask Einstellungen ist auch nur&lt;br /&gt;
 debug($sonstwas);&lt;br /&gt;
nützlich, vor allem wenn ein Kundenprojekt Online isteinfach im Installtool und devIpMask deine IP eingeben und dann mit debug($sonstwas); arbeiten, so kannst nur du den debug sehen und nicht irgendwelche User die grade auf der Site sind.&lt;br /&gt;
&lt;br /&gt;
Kleiner Zusatz Tip:&lt;br /&gt;
&lt;br /&gt;
Ihr lasst euch gleichzeitig mehrere Debugs ausgeben und verliert den überblick welcher debug welcher ist...&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Ihr lasst euch ein Array vor einer funktion debugen und anschliessend...&lt;br /&gt;
da habt ihr dann die möglichkeit euerem Debug einen Namen zu geben..&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$data = array(&amp;quot;Name&amp;quot; =&amp;gt; &amp;quot;Peter KeineAhnung&amp;quot;, &amp;quot;Alter&amp;quot; =&amp;gt; 22, &amp;quot;Wohnort&amp;quot; =&amp;gt; &amp;quot;Ratingen&amp;quot;);&lt;br /&gt;
echo t3lib_div::debug($data,&amp;#039;Array vorher&amp;#039;);&lt;br /&gt;
$data[&amp;#039;Name&amp;#039;] = &amp;#039;T.uX&amp;#039;;&lt;br /&gt;
$data[&amp;#039;Alter&amp;#039;] = 32;&lt;br /&gt;
echo t3lib_div::debug($data,&amp;#039;Array nachher&amp;#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergebnis:&lt;br /&gt;
&lt;br /&gt;
[[Bild:TS_debug02.gif]]&lt;br /&gt;
&lt;br /&gt;
Hinweis:&lt;br /&gt;
läst du dir eine Variable im debug ausgeben erscheint [b]|debug|[/b]. das funzt nur mit Arrays ;-)&lt;br /&gt;
Auch bei der Verwendung der integrierten DB-Abstrktionsschicht können eine Reihe von Fehlern auftreten,&lt;br /&gt;
die teilweise nur sehr magere Fehlermeldungen produzieren. Um eine etwas explizitere Fehlerausgabe zu&lt;br /&gt;
erzwingen sollte man folgende Zeile in seine Extension integrieren*:&lt;br /&gt;
$GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;debugOutput = true;&lt;br /&gt;
&lt;br /&gt;
So wird z.B. das SQL-Stement Ausgegeben, das zu einem Fehler geführt hat.&lt;br /&gt;
Tutorial by typo3.kj187.de&lt;br /&gt;
&lt;br /&gt;
== PHP-Skripte einbinden ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== mit PHP_SCRIPT ===&lt;br /&gt;
&lt;br /&gt;
Im Typo Script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##############################&lt;br /&gt;
### temporäres Test Script ###&lt;br /&gt;
##############################&lt;br /&gt;
&lt;br /&gt;
temp.phpScript = PHP_SCRIPT&lt;br /&gt;
temp.phpScript {&lt;br /&gt;
   file = demo/test.inc.php&lt;br /&gt;
   myVerySpecialOwnParameter = Hallo Welt&lt;br /&gt;
   myParamArray {&lt;br /&gt;
      a = 2&lt;br /&gt;
      b = 5&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Im Skript text.inc.php&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Use the debug-function to view the config&lt;br /&gt;
// array $conf given by TypoScript:&lt;br /&gt;
debug( $conf );&lt;br /&gt;
&lt;br /&gt;
$contentArr[] = &amp;quot;Test&amp;quot;;&lt;br /&gt;
$contentArr[] = $conf[&amp;#039;file&amp;#039;];&lt;br /&gt;
$contentArr[] = $conf[&amp;#039;myVerySpecialOwnParameter&amp;#039;];&lt;br /&gt;
$contentArr[] = implode( $conf[&amp;#039;myParamArray.&amp;#039;], &amp;#039;, &amp;#039; );&lt;br /&gt;
&lt;br /&gt;
// Put all your output to $content,&lt;br /&gt;
// that TYPO3 will display for you:&lt;br /&gt;
$content = implode( $contentArr, &amp;#039;&amp;lt; br /&amp;gt;&amp;#039; );&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== mit PHP_SCRIPT_EXT ===&lt;br /&gt;
Typo3 | Externe PHP Scripte einbinden&lt;br /&gt;
&lt;br /&gt;
Haben Sie ihr Projekt auf Typo3 umgestellt und wollen dennoch ihre eigenen PHP-Scripte verwenden? Dann machen Sie folgendes.&lt;br /&gt;
&lt;br /&gt;
Schreiben Sie in das SETUP Feld des Templates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tt_content.script = CASE&lt;br /&gt;
tt_content.script {&lt;br /&gt;
key.field = select_key&lt;br /&gt;
test = PHP_SCRIPT_EXT&lt;br /&gt;
test.file = fileadmin/dein_script.php&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um das Script jetzt als Contentelement in die Seite einzubinden, legen Sie einen neuen Seiteninhalt an. Wechseln Sie von Typ = Text auf Typ = Skript. In das CODE Feld müssen Sie jetzt nur noch test eintragen und sie sind fertig. &lt;br /&gt;
&lt;br /&gt;
Dies ist die einfachste Methode. Die Ausgabe des Scripts wird aber nicht in den Cache aufgenommen! Diese Funktion wird leider nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Tutorial by typo3.kj187.de&lt;br /&gt;
&lt;br /&gt;
Anmerkung Steff: Für die Cache Funktion kann man z.B. eine Einfache Extension basteln.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
===Einträge aus Bildausrichtungen im Backend entfernen===&lt;br /&gt;
aus cron_cssstyledimgtext&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;TYPO3_MODE&amp;#039;))     die (&amp;#039;Access denied.&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
t3lib_extMgm::addPItoST43($_EXTKEY,&amp;#039;pi1/class.tx_croncssstyledimgtext_pi1.php&amp;#039;,&amp;#039;_pi1&amp;#039;,&amp;#039;&amp;#039;,1);&lt;br /&gt;
&lt;br /&gt;
$_EXTCONF = unserialize($_EXTCONF);&lt;br /&gt;
if ($_EXTCONF[&amp;#039;addPageTS&amp;#039;])	{&lt;br /&gt;
	t3lib_extMgm::addPageTSConfig(&amp;#039;&lt;br /&gt;
TCEFORM.tt_content.imageorient.types.image.removeItems = 8,9,10,17,18,25,26&lt;br /&gt;
&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;XCLASS&amp;#039;][&amp;#039;tslib/class.tslib_content.php&amp;#039;]=t3lib_extMgm::extPath($_EXTKEY).&amp;#039;class.ux_tslib_content.php&amp;#039;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>84.160.195.20</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Extensions_programmieren&amp;diff=569</id>
		<title>Typo3 - Extensions programmieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Extensions_programmieren&amp;diff=569"/>
		<updated>2007-02-12T17:41:34Z</updated>

		<summary type="html">&lt;p&gt;84.160.195.20: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Datenbankabfrage in Extensions ==&lt;br /&gt;
Beispiel:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$res=$GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;exec_SELECTquery(&lt;br /&gt;
  &amp;#039;COUNT(ap-status)&amp;#039;,     //felder&lt;br /&gt;
  &amp;#039;aa_tagungen&amp;#039;,              //from&lt;br /&gt;
  &amp;#039;id= &amp;#039;.$_GET[tid].&amp;#039;&amp;#039;,         //where&lt;br /&gt;
  &amp;#039;ap-status&amp;#039;,    //group&lt;br /&gt;
  &amp;#039;&amp;#039;,         //order&lt;br /&gt;
  &amp;#039;&amp;#039;          //limit&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
$l = mysql_fetch_array($res);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Zum Debuggen kann man so den Query testen:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
t3lib_div::debug($GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;SELECTquery(&lt;br /&gt;
  &amp;#039;COUNT(ap-status)&amp;#039;,     //felder&lt;br /&gt;
  &amp;#039;aa_tagungen&amp;#039;,              //from&lt;br /&gt;
  &amp;#039;id= &amp;#039;.$_GET[tid].&amp;#039;&amp;#039;,         //where&lt;br /&gt;
  &amp;#039;ap-status&amp;#039;,    //group&lt;br /&gt;
  &amp;#039;&amp;#039;,         //order&lt;br /&gt;
  &amp;#039;&amp;#039;          //limit&lt;br /&gt;
));&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Struktur einer Extension ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ext_emconf.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Informationen und Metadaten zur Extension. Etwa die Infos die im Kickstarter unter General Info stehen.&lt;br /&gt;
&lt;br /&gt;
* Root-Verzeichnis&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039; Enthält Konfigurationsdaten ($TYPO3_CONF_VARS) für das Backend und Frontend. Hier kann über die Extension API auch TypoScript eingebunden werden.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_tables.php&amp;#039;&amp;#039;&amp;#039; Konfiguration von Datenbanktabellen. Plugins und Module üver die Extension API einbinden. (Alles über Kickstarter)&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_tables.sql&amp;#039;&amp;#039;&amp;#039; SQL-Daten für die Tabellendefinition. Die Auswertung erfolgt über den Extension Manager und das Install-Tool.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_tables_static+adt.sql&amp;#039;&amp;#039;&amp;#039; SQL-Tabellendefinition inkl. Daten. Z.B. für statische Daten (Länderinfos etc.)Die Tabellen müssen zusätzlich in ext_tables.sql definiert sein.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_typoscript_*.txt&amp;#039;&amp;#039;&amp;#039; Globaler TypoScript-Code. Steht nicht üver Template-Datensätze zur Auswahl (siehe /static)&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_conf_template.txt&amp;#039;&amp;#039;&amp;#039; Hier werden Optionen zur Konfiguration angelegt, die der Benutzer im Extensionmanager einstellen kann.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;*icon*.gif&amp;#039;&amp;#039;&amp;#039; Symbol-Dateien für Extension,DB-Tabellen,Plugins, Module...&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;locallang*.php&amp;#039;&amp;#039;&amp;#039; Texte für die Lokalisierung in verschiedenen Sprachen&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;class.ext_update.php&amp;#039;&amp;#039;&amp;#039; Funktionen für ein Update der Extension (Beispiel siehe newloginbox).&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;pi1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für Skripte und Daten des Plugin&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;class*.php&amp;#039;&amp;#039;&amp;#039; PHP-Klassen z.B. für Plugins oder Submodule&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;cm1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für Dateien die das Kontext-Menü betreffen&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;mod1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für ein Modul.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;conf.php&amp;#039;&amp;#039;&amp;#039; Konfigurationsdatei für ein Modul zum einbinden ins Backend.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;index.php&amp;#039;&amp;#039;&amp;#039; Hauptscript eines Moduls.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;modfunc1/&amp;#039;&amp;#039;&amp;#039; Skripte und Daten für Submodul-Funktionen&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;static/&amp;#039;&amp;#039;&amp;#039; TypoScript-Template-Dateien. Diese werden über die Extension-API eingebunden und stehen dann in Template-Datensätzen, ähnlich den Standard Templates zur Auswahl.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;sv1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für Services&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;res/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für beliebige &amp;#039;recourcen&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;doc/&amp;#039;&amp;#039;&amp;#039; Verzeichnis der Dokumentation.&lt;br /&gt;
&lt;br /&gt;
== Wo werden Extensions installiert ? ==&lt;br /&gt;
===typo3/sysext/ (System)===&lt;br /&gt;
System Extensions wie cms und lang. Hier können keine Extensions mit dem Extension Manager installiert werden.&lt;br /&gt;
===typo3/ext/ - globale Extensions (Global) ===&lt;br /&gt;
Z.B. diese die von Typo3 mitgeliefert werden. Mit der Option allowGlobalInstall kann man die Installation in dieses Verzeichnis erlauben. Das ist dann nicht sinnvoll wenn sich mehrere Typo3 WEbsites eine Installation teilen, weil es hier zu Versionskonflikten kommen kann.&lt;br /&gt;
===typo3conf/ext - lokale Extensions (Local)===&lt;br /&gt;
Hier werden normalerweise alle Extensions installiert. Die Lokale Installation hat immer Vorang vor einer globalen.&lt;br /&gt;
&lt;br /&gt;
== Typolinks richtig in Extensions einsetzen ==&lt;br /&gt;
&lt;br /&gt;
In diesem kurzem Tutorial möchte ich zeigen, wie man Typolinks in eigenen Erweiterungen erstellt, die das&lt;br /&gt;
Feature &amp;#039;Simulate Static Documents&amp;#039; unterstützen und eine Ausgabe erstellen, die von Typo3 gecached wird&lt;br /&gt;
und so auch mit der Indexed search verwendet werden können. Diese Informationen wurden aus anderen&lt;br /&gt;
Erweiterungen zusammengetragen, speziell aus der Erweiterung tt_board.&lt;br /&gt;
Typoscript&lt;br /&gt;
Zuerst erstelle in der Datei &amp;#039;ext_typoscript_setup.txt&amp;#039; eine Eigenschaft, die deiner Erweiterung mitteilt, ob&lt;br /&gt;
caching genutzt werden soll oder nicht:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tx_myextension_pi1 {&lt;br /&gt;
allowCaching = 1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn das später auf 0 gesetzt wird, werden diese Seiten nicht mehr gecached.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vorbereitung&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Bereite in der main() Funktion den Typolink vor und konfiguriere das caching:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class tx_myextension_pi1 extends tslib_pibase {&lt;br /&gt;
...&lt;br /&gt;
var $allowCaching = &amp;quot;&amp;quot;;&lt;br /&gt;
function main($content,$conf) {&lt;br /&gt;
$this-&amp;gt;conf=$conf;&lt;br /&gt;
...&lt;br /&gt;
// Preconfigure the typolink&lt;br /&gt;
$this-&amp;gt;local_cObj = t3lib_div::makeInstance(&amp;quot;tslib_cObj&amp;quot;);&lt;br /&gt;
$this-&amp;gt;local_cObj-&amp;gt;setCurrentVal($GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;id);&lt;br /&gt;
$this-&amp;gt;typolink_conf = $this-&amp;gt;conf[&amp;quot;typolink.&amp;quot;];&lt;br /&gt;
$this-&amp;gt;typolink_conf[&amp;quot;parameter.&amp;quot;][&amp;quot;current&amp;quot;] = 1;&lt;br /&gt;
$this-&amp;gt;typolink_conf[&amp;quot;additionalParams&amp;quot;] =&lt;br /&gt;
$this-&amp;gt;cObj-&amp;gt;stdWrap($this-&amp;gt;typolink_conf[&amp;quot;additionalParams&amp;quot;],&lt;br /&gt;
$this-&amp;gt;typolink_conf[&amp;quot;additionalParams.&amp;quot;]);&lt;br /&gt;
unset($this-&amp;gt;typolink_conf[&amp;quot;additionalParams.&amp;quot;]);&lt;br /&gt;
// Configure caching&lt;br /&gt;
$this-&amp;gt;allowCaching = $this-&amp;gt;conf[&amp;quot;allowCaching&amp;quot;]?1:0;&lt;br /&gt;
if (!$this-&amp;gt;allowCaching) {&lt;br /&gt;
$GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;set_no_cache();&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
Links erstellen&lt;br /&gt;
Um nun Links in der Erweiterung zu erstellen, benutze das folgende Code Fragment:&lt;br /&gt;
$temp_conf = $this-&amp;gt;typolink_conf;&lt;br /&gt;
$temp_conf[&amp;quot;additionalParams&amp;quot;] .= &amp;quot;&amp;amp;tx_myextension_pi1[key]=value&amp;quot;;&lt;br /&gt;
$temp_conf[&amp;quot;useCacheHash&amp;quot;] = $this-&amp;gt;allowCaching;&lt;br /&gt;
$temp_conf[&amp;quot;no_cache&amp;quot;] = !$this-&amp;gt;allowCaching;&lt;br /&gt;
$the_link = $this-&amp;gt;local_cObj-&amp;gt;typolink(&amp;quot;Linktext&amp;quot;, $temp_conf);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach kann man &amp;#039;$the_link&amp;#039; zu der Ausgabe hinzufügen. Das &amp;#039;$temp_conf&amp;#039; Array kann man mit allen&lt;br /&gt;
Eigenschaften des typolink Objektes erweitern.&lt;br /&gt;
&lt;br /&gt;
Tutorial by typo3.hachmeister.org&lt;br /&gt;
Von:fruit-lab.de&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Debug Methode ==&lt;br /&gt;
Typo3 | Debug Methode :: Hilfe bei der Programmierung&lt;br /&gt;
&lt;br /&gt;
Wenn man eine eigene Extension schreibt benutzt man zum größten Teil Array, und um den Überblick zu&lt;br /&gt;
behalten was nach den ganzen schritten in einem Array noch so drin steht hat man die möglichkeit mit einer Funktion das Array schön und sauber in einer tabelle anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$data = array(&amp;quot;Name&amp;quot; =&amp;gt; &amp;quot;Peter KeineAhnung&amp;quot;, &amp;quot;Alter&amp;quot; =&amp;gt; 22, &amp;quot;Wohnort&amp;quot; =&amp;gt; &amp;quot;Ratingen&amp;quot;);&lt;br /&gt;
echo t3lib_div::debug($data);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergebnis:&lt;br /&gt;
&lt;br /&gt;
[[Bild:TS_debug01.gif]]&lt;br /&gt;
&lt;br /&gt;
je nach devIPMask Einstellungen ist auch nur&lt;br /&gt;
 debug($sonstwas);&lt;br /&gt;
nützlich, vor allem wenn ein Kundenprojekt Online isteinfach im Installtool und devIpMask deine IP eingeben und dann mit debug($sonstwas); arbeiten, so kannst nur du den debug sehen und nicht irgendwelche User die grade auf der Site sind.&lt;br /&gt;
&lt;br /&gt;
Kleiner Zusatz Tip:&lt;br /&gt;
&lt;br /&gt;
Ihr lasst euch gleichzeitig mehrere Debugs ausgeben und verliert den überblick welcher debug welcher ist...&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Ihr lasst euch ein Array vor einer funktion debugen und anschliessend...&lt;br /&gt;
da habt ihr dann die möglichkeit euerem Debug einen Namen zu geben..&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$data = array(&amp;quot;Name&amp;quot; =&amp;gt; &amp;quot;Peter KeineAhnung&amp;quot;, &amp;quot;Alter&amp;quot; =&amp;gt; 22, &amp;quot;Wohnort&amp;quot; =&amp;gt; &amp;quot;Ratingen&amp;quot;);&lt;br /&gt;
echo t3lib_div::debug($data,&amp;#039;Array vorher&amp;#039;);&lt;br /&gt;
$data[&amp;#039;Name&amp;#039;] = &amp;#039;T.uX&amp;#039;;&lt;br /&gt;
$data[&amp;#039;Alter&amp;#039;] = 32;&lt;br /&gt;
echo t3lib_div::debug($data,&amp;#039;Array nachher&amp;#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergebnis:&lt;br /&gt;
&lt;br /&gt;
[[Bild:TS_debug02.gif]]&lt;br /&gt;
&lt;br /&gt;
Hinweis:&lt;br /&gt;
läst du dir eine Variable im debug ausgeben erscheint [b]|debug|[/b]. das funzt nur mit Arrays ;-)&lt;br /&gt;
Auch bei der Verwendung der integrierten DB-Abstrktionsschicht können eine Reihe von Fehlern auftreten,&lt;br /&gt;
die teilweise nur sehr magere Fehlermeldungen produzieren. Um eine etwas explizitere Fehlerausgabe zu&lt;br /&gt;
erzwingen sollte man folgende Zeile in seine Extension integrieren*:&lt;br /&gt;
$GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;debugOutput = true;&lt;br /&gt;
&lt;br /&gt;
So wird z.B. das SQL-Stement Ausgegeben, das zu einem Fehler geführt hat.&lt;br /&gt;
Tutorial by typo3.kj187.de&lt;br /&gt;
&lt;br /&gt;
== PHP-Skripte einbinden ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== mit PHP_SCRIPT ===&lt;br /&gt;
&lt;br /&gt;
Im Typo Script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##############################&lt;br /&gt;
### temporäres Test Script ###&lt;br /&gt;
##############################&lt;br /&gt;
&lt;br /&gt;
temp.phpScript = PHP_SCRIPT&lt;br /&gt;
temp.phpScript {&lt;br /&gt;
   file = demo/test.inc.php&lt;br /&gt;
   myVerySpecialOwnParameter = Hallo Welt&lt;br /&gt;
   myParamArray {&lt;br /&gt;
      a = 2&lt;br /&gt;
      b = 5&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Im Skript text.inc.php&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Use the debug-function to view the config&lt;br /&gt;
// array $conf given by TypoScript:&lt;br /&gt;
debug( $conf );&lt;br /&gt;
&lt;br /&gt;
$contentArr[] = &amp;quot;Test&amp;quot;;&lt;br /&gt;
$contentArr[] = $conf[&amp;#039;file&amp;#039;];&lt;br /&gt;
$contentArr[] = $conf[&amp;#039;myVerySpecialOwnParameter&amp;#039;];&lt;br /&gt;
$contentArr[] = implode( $conf[&amp;#039;myParamArray.&amp;#039;], &amp;#039;, &amp;#039; );&lt;br /&gt;
&lt;br /&gt;
// Put all your output to $content,&lt;br /&gt;
// that TYPO3 will display for you:&lt;br /&gt;
$content = implode( $contentArr, &amp;#039;&amp;lt; br /&amp;gt;&amp;#039; );&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== mit PHP_SCRIPT_EXT ===&lt;br /&gt;
Typo3 | Externe PHP Scripte einbinden&lt;br /&gt;
&lt;br /&gt;
Haben Sie ihr Projekt auf Typo3 umgestellt und wollen dennoch ihre eigenen PHP-Scripte verwenden? Dann machen Sie folgendes.&lt;br /&gt;
&lt;br /&gt;
Schreiben Sie in das SETUP Feld des Templates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tt_content.script = CASE&lt;br /&gt;
tt_content.script {&lt;br /&gt;
key.field = select_key&lt;br /&gt;
test = PHP_SCRIPT_EXT&lt;br /&gt;
test.file = fileadmin/dein_script.php&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um das Script jetzt als Contentelement in die Seite einzubinden, legen Sie einen neuen Seiteninhalt an. Wechseln Sie von Typ = Text auf Typ = Skript. In das CODE Feld müssen Sie jetzt nur noch test eintragen und sie sind fertig. &lt;br /&gt;
&lt;br /&gt;
Dies ist die einfachste Methode. Die Ausgabe des Scripts wird aber nicht in den Cache aufgenommen! Diese Funktion wird leider nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Tutorial by typo3.kj187.de&lt;br /&gt;
&lt;br /&gt;
Anmerkung Steff: Für die Cache Funktion kann man z.B. eine Einfache Extension basteln.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
===Einträge aus Bildausrichtungen im Backend entfernen===&lt;br /&gt;
aus cron_cssstyledimgtext&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;TYPO3_MODE&amp;#039;))     die (&amp;#039;Access denied.&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
t3lib_extMgm::addPItoST43($_EXTKEY,&amp;#039;pi1/class.tx_croncssstyledimgtext_pi1.php&amp;#039;,&amp;#039;_pi1&amp;#039;,&amp;#039;&amp;#039;,1);&lt;br /&gt;
&lt;br /&gt;
$_EXTCONF = unserialize($_EXTCONF);&lt;br /&gt;
if ($_EXTCONF[&amp;#039;addPageTS&amp;#039;])	{&lt;br /&gt;
	t3lib_extMgm::addPageTSConfig(&amp;#039;&lt;br /&gt;
TCEFORM.tt_content.imageorient.types.image.removeItems = 8,9,10,17,18,25,26&lt;br /&gt;
&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;XCLASS&amp;#039;][&amp;#039;tslib/class.tslib_content.php&amp;#039;]=t3lib_extMgm::extPath($_EXTKEY).&amp;#039;class.ux_tslib_content.php&amp;#039;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>84.160.195.20</name></author>
	</entry>
	<entry>
		<id>https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Extensions_programmieren&amp;diff=568</id>
		<title>Typo3 - Extensions programmieren</title>
		<link rel="alternate" type="text/html" href="https://wiki.stephanschlegel.de/index.php?title=Typo3_-_Extensions_programmieren&amp;diff=568"/>
		<updated>2007-02-12T17:38:58Z</updated>

		<summary type="html">&lt;p&gt;84.160.195.20: /* PHP-Skripte einbinden */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Struktur einer Extension ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ext_emconf.php&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Informationen und Metadaten zur Extension. Etwa die Infos die im Kickstarter unter General Info stehen.&lt;br /&gt;
&lt;br /&gt;
* Root-Verzeichnis&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_localconf.php&amp;#039;&amp;#039;&amp;#039; Enthält Konfigurationsdaten ($TYPO3_CONF_VARS) für das Backend und Frontend. Hier kann über die Extension API auch TypoScript eingebunden werden.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_tables.php&amp;#039;&amp;#039;&amp;#039; Konfiguration von Datenbanktabellen. Plugins und Module üver die Extension API einbinden. (Alles über Kickstarter)&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_tables.sql&amp;#039;&amp;#039;&amp;#039; SQL-Daten für die Tabellendefinition. Die Auswertung erfolgt über den Extension Manager und das Install-Tool.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_tables_static+adt.sql&amp;#039;&amp;#039;&amp;#039; SQL-Tabellendefinition inkl. Daten. Z.B. für statische Daten (Länderinfos etc.)Die Tabellen müssen zusätzlich in ext_tables.sql definiert sein.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_typoscript_*.txt&amp;#039;&amp;#039;&amp;#039; Globaler TypoScript-Code. Steht nicht üver Template-Datensätze zur Auswahl (siehe /static)&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;ext_conf_template.txt&amp;#039;&amp;#039;&amp;#039; Hier werden Optionen zur Konfiguration angelegt, die der Benutzer im Extensionmanager einstellen kann.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;*icon*.gif&amp;#039;&amp;#039;&amp;#039; Symbol-Dateien für Extension,DB-Tabellen,Plugins, Module...&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;locallang*.php&amp;#039;&amp;#039;&amp;#039; Texte für die Lokalisierung in verschiedenen Sprachen&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;class.ext_update.php&amp;#039;&amp;#039;&amp;#039; Funktionen für ein Update der Extension (Beispiel siehe newloginbox).&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;pi1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für Skripte und Daten des Plugin&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;class*.php&amp;#039;&amp;#039;&amp;#039; PHP-Klassen z.B. für Plugins oder Submodule&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;cm1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für Dateien die das Kontext-Menü betreffen&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;mod1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für ein Modul.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;conf.php&amp;#039;&amp;#039;&amp;#039; Konfigurationsdatei für ein Modul zum einbinden ins Backend.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;index.php&amp;#039;&amp;#039;&amp;#039; Hauptscript eines Moduls.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;modfunc1/&amp;#039;&amp;#039;&amp;#039; Skripte und Daten für Submodul-Funktionen&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;static/&amp;#039;&amp;#039;&amp;#039; TypoScript-Template-Dateien. Diese werden über die Extension-API eingebunden und stehen dann in Template-Datensätzen, ähnlich den Standard Templates zur Auswahl.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;sv1/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für Services&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;res/&amp;#039;&amp;#039;&amp;#039; Verzeichnis für beliebige &amp;#039;recourcen&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;doc/&amp;#039;&amp;#039;&amp;#039; Verzeichnis der Dokumentation.&lt;br /&gt;
&lt;br /&gt;
== Wo werden Extensions installiert ? ==&lt;br /&gt;
===typo3/sysext/ (System)===&lt;br /&gt;
System Extensions wie cms und lang. Hier können keine Extensions mit dem Extension Manager installiert werden.&lt;br /&gt;
===typo3/ext/ - globale Extensions (Global) ===&lt;br /&gt;
Z.B. diese die von Typo3 mitgeliefert werden. Mit der Option allowGlobalInstall kann man die Installation in dieses Verzeichnis erlauben. Das ist dann nicht sinnvoll wenn sich mehrere Typo3 WEbsites eine Installation teilen, weil es hier zu Versionskonflikten kommen kann.&lt;br /&gt;
===typo3conf/ext - lokale Extensions (Local)===&lt;br /&gt;
Hier werden normalerweise alle Extensions installiert. Die Lokale Installation hat immer Vorang vor einer globalen.&lt;br /&gt;
&lt;br /&gt;
== Typolinks richtig in Extensions einsetzen ==&lt;br /&gt;
&lt;br /&gt;
In diesem kurzem Tutorial möchte ich zeigen, wie man Typolinks in eigenen Erweiterungen erstellt, die das&lt;br /&gt;
Feature &amp;#039;Simulate Static Documents&amp;#039; unterstützen und eine Ausgabe erstellen, die von Typo3 gecached wird&lt;br /&gt;
und so auch mit der Indexed search verwendet werden können. Diese Informationen wurden aus anderen&lt;br /&gt;
Erweiterungen zusammengetragen, speziell aus der Erweiterung tt_board.&lt;br /&gt;
Typoscript&lt;br /&gt;
Zuerst erstelle in der Datei &amp;#039;ext_typoscript_setup.txt&amp;#039; eine Eigenschaft, die deiner Erweiterung mitteilt, ob&lt;br /&gt;
caching genutzt werden soll oder nicht:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
plugin.tx_myextension_pi1 {&lt;br /&gt;
allowCaching = 1&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Wenn das später auf 0 gesetzt wird, werden diese Seiten nicht mehr gecached.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Vorbereitung&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Bereite in der main() Funktion den Typolink vor und konfiguriere das caching:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
class tx_myextension_pi1 extends tslib_pibase {&lt;br /&gt;
...&lt;br /&gt;
var $allowCaching = &amp;quot;&amp;quot;;&lt;br /&gt;
function main($content,$conf) {&lt;br /&gt;
$this-&amp;gt;conf=$conf;&lt;br /&gt;
...&lt;br /&gt;
// Preconfigure the typolink&lt;br /&gt;
$this-&amp;gt;local_cObj = t3lib_div::makeInstance(&amp;quot;tslib_cObj&amp;quot;);&lt;br /&gt;
$this-&amp;gt;local_cObj-&amp;gt;setCurrentVal($GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;id);&lt;br /&gt;
$this-&amp;gt;typolink_conf = $this-&amp;gt;conf[&amp;quot;typolink.&amp;quot;];&lt;br /&gt;
$this-&amp;gt;typolink_conf[&amp;quot;parameter.&amp;quot;][&amp;quot;current&amp;quot;] = 1;&lt;br /&gt;
$this-&amp;gt;typolink_conf[&amp;quot;additionalParams&amp;quot;] =&lt;br /&gt;
$this-&amp;gt;cObj-&amp;gt;stdWrap($this-&amp;gt;typolink_conf[&amp;quot;additionalParams&amp;quot;],&lt;br /&gt;
$this-&amp;gt;typolink_conf[&amp;quot;additionalParams.&amp;quot;]);&lt;br /&gt;
unset($this-&amp;gt;typolink_conf[&amp;quot;additionalParams.&amp;quot;]);&lt;br /&gt;
// Configure caching&lt;br /&gt;
$this-&amp;gt;allowCaching = $this-&amp;gt;conf[&amp;quot;allowCaching&amp;quot;]?1:0;&lt;br /&gt;
if (!$this-&amp;gt;allowCaching) {&lt;br /&gt;
$GLOBALS[&amp;quot;TSFE&amp;quot;]-&amp;gt;set_no_cache();&lt;br /&gt;
}&lt;br /&gt;
...&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
Links erstellen&lt;br /&gt;
Um nun Links in der Erweiterung zu erstellen, benutze das folgende Code Fragment:&lt;br /&gt;
$temp_conf = $this-&amp;gt;typolink_conf;&lt;br /&gt;
$temp_conf[&amp;quot;additionalParams&amp;quot;] .= &amp;quot;&amp;amp;tx_myextension_pi1[key]=value&amp;quot;;&lt;br /&gt;
$temp_conf[&amp;quot;useCacheHash&amp;quot;] = $this-&amp;gt;allowCaching;&lt;br /&gt;
$temp_conf[&amp;quot;no_cache&amp;quot;] = !$this-&amp;gt;allowCaching;&lt;br /&gt;
$the_link = $this-&amp;gt;local_cObj-&amp;gt;typolink(&amp;quot;Linktext&amp;quot;, $temp_conf);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach kann man &amp;#039;$the_link&amp;#039; zu der Ausgabe hinzufügen. Das &amp;#039;$temp_conf&amp;#039; Array kann man mit allen&lt;br /&gt;
Eigenschaften des typolink Objektes erweitern.&lt;br /&gt;
&lt;br /&gt;
Tutorial by typo3.hachmeister.org&lt;br /&gt;
Von:fruit-lab.de&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Debug Methode ==&lt;br /&gt;
Typo3 | Debug Methode :: Hilfe bei der Programmierung&lt;br /&gt;
&lt;br /&gt;
Wenn man eine eigene Extension schreibt benutzt man zum größten Teil Array, und um den Überblick zu&lt;br /&gt;
behalten was nach den ganzen schritten in einem Array noch so drin steht hat man die möglichkeit mit einer Funktion das Array schön und sauber in einer tabelle anzeigen zu lassen.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$data = array(&amp;quot;Name&amp;quot; =&amp;gt; &amp;quot;Peter KeineAhnung&amp;quot;, &amp;quot;Alter&amp;quot; =&amp;gt; 22, &amp;quot;Wohnort&amp;quot; =&amp;gt; &amp;quot;Ratingen&amp;quot;);&lt;br /&gt;
echo t3lib_div::debug($data);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergebnis:&lt;br /&gt;
&lt;br /&gt;
[[Bild:TS_debug01.gif]]&lt;br /&gt;
&lt;br /&gt;
je nach devIPMask Einstellungen ist auch nur&lt;br /&gt;
 debug($sonstwas);&lt;br /&gt;
nützlich, vor allem wenn ein Kundenprojekt Online isteinfach im Installtool und devIpMask deine IP eingeben und dann mit debug($sonstwas); arbeiten, so kannst nur du den debug sehen und nicht irgendwelche User die grade auf der Site sind.&lt;br /&gt;
&lt;br /&gt;
Kleiner Zusatz Tip:&lt;br /&gt;
&lt;br /&gt;
Ihr lasst euch gleichzeitig mehrere Debugs ausgeben und verliert den überblick welcher debug welcher ist...&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
Ihr lasst euch ein Array vor einer funktion debugen und anschliessend...&lt;br /&gt;
da habt ihr dann die möglichkeit euerem Debug einen Namen zu geben..&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Beispiel:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$data = array(&amp;quot;Name&amp;quot; =&amp;gt; &amp;quot;Peter KeineAhnung&amp;quot;, &amp;quot;Alter&amp;quot; =&amp;gt; 22, &amp;quot;Wohnort&amp;quot; =&amp;gt; &amp;quot;Ratingen&amp;quot;);&lt;br /&gt;
echo t3lib_div::debug($data,&amp;#039;Array vorher&amp;#039;);&lt;br /&gt;
$data[&amp;#039;Name&amp;#039;] = &amp;#039;T.uX&amp;#039;;&lt;br /&gt;
$data[&amp;#039;Alter&amp;#039;] = 32;&lt;br /&gt;
echo t3lib_div::debug($data,&amp;#039;Array nachher&amp;#039;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ergebnis:&lt;br /&gt;
&lt;br /&gt;
[[Bild:TS_debug02.gif]]&lt;br /&gt;
&lt;br /&gt;
Hinweis:&lt;br /&gt;
läst du dir eine Variable im debug ausgeben erscheint [b]|debug|[/b]. das funzt nur mit Arrays ;-)&lt;br /&gt;
Auch bei der Verwendung der integrierten DB-Abstrktionsschicht können eine Reihe von Fehlern auftreten,&lt;br /&gt;
die teilweise nur sehr magere Fehlermeldungen produzieren. Um eine etwas explizitere Fehlerausgabe zu&lt;br /&gt;
erzwingen sollte man folgende Zeile in seine Extension integrieren*:&lt;br /&gt;
$GLOBALS[&amp;#039;TYPO3_DB&amp;#039;]-&amp;gt;debugOutput = true;&lt;br /&gt;
&lt;br /&gt;
So wird z.B. das SQL-Stement Ausgegeben, das zu einem Fehler geführt hat.&lt;br /&gt;
Tutorial by typo3.kj187.de&lt;br /&gt;
&lt;br /&gt;
== PHP-Skripte einbinden ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== mit PHP_SCRIPT ===&lt;br /&gt;
&lt;br /&gt;
Im Typo Script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
##############################&lt;br /&gt;
### temporäres Test Script ###&lt;br /&gt;
##############################&lt;br /&gt;
&lt;br /&gt;
temp.phpScript = PHP_SCRIPT&lt;br /&gt;
temp.phpScript {&lt;br /&gt;
   file = demo/test.inc.php&lt;br /&gt;
   myVerySpecialOwnParameter = Hallo Welt&lt;br /&gt;
   myParamArray {&lt;br /&gt;
      a = 2&lt;br /&gt;
      b = 5&lt;br /&gt;
   }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Im Skript text.inc.php&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// Use the debug-function to view the config&lt;br /&gt;
// array $conf given by TypoScript:&lt;br /&gt;
debug( $conf );&lt;br /&gt;
&lt;br /&gt;
$contentArr[] = &amp;quot;Test&amp;quot;;&lt;br /&gt;
$contentArr[] = $conf[&amp;#039;file&amp;#039;];&lt;br /&gt;
$contentArr[] = $conf[&amp;#039;myVerySpecialOwnParameter&amp;#039;];&lt;br /&gt;
$contentArr[] = implode( $conf[&amp;#039;myParamArray.&amp;#039;], &amp;#039;, &amp;#039; );&lt;br /&gt;
&lt;br /&gt;
// Put all your output to $content,&lt;br /&gt;
// that TYPO3 will display for you:&lt;br /&gt;
$content = implode( $contentArr, &amp;#039;&amp;lt; br /&amp;gt;&amp;#039; );&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== mit PHP_SCRIPT_EXT ===&lt;br /&gt;
Typo3 | Externe PHP Scripte einbinden&lt;br /&gt;
&lt;br /&gt;
Haben Sie ihr Projekt auf Typo3 umgestellt und wollen dennoch ihre eigenen PHP-Scripte verwenden? Dann machen Sie folgendes.&lt;br /&gt;
&lt;br /&gt;
Schreiben Sie in das SETUP Feld des Templates:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
tt_content.script = CASE&lt;br /&gt;
tt_content.script {&lt;br /&gt;
key.field = select_key&lt;br /&gt;
test = PHP_SCRIPT_EXT&lt;br /&gt;
test.file = fileadmin/dein_script.php&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Um das Script jetzt als Contentelement in die Seite einzubinden, legen Sie einen neuen Seiteninhalt an. Wechseln Sie von Typ = Text auf Typ = Skript. In das CODE Feld müssen Sie jetzt nur noch test eintragen und sie sind fertig. &lt;br /&gt;
&lt;br /&gt;
Dies ist die einfachste Methode. Die Ausgabe des Scripts wird aber nicht in den Cache aufgenommen! Diese Funktion wird leider nicht unterstützt.&lt;br /&gt;
&lt;br /&gt;
Tutorial by typo3.kj187.de&lt;br /&gt;
&lt;br /&gt;
Anmerkung Steff: Für die Cache Funktion kann man z.B. eine Einfache Extension basteln.&lt;br /&gt;
&lt;br /&gt;
== Beispiele ==&lt;br /&gt;
===Einträge aus Bildausrichtungen im Backend entfernen===&lt;br /&gt;
aus cron_cssstyledimgtext&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if (!defined (&amp;#039;TYPO3_MODE&amp;#039;))     die (&amp;#039;Access denied.&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
t3lib_extMgm::addPItoST43($_EXTKEY,&amp;#039;pi1/class.tx_croncssstyledimgtext_pi1.php&amp;#039;,&amp;#039;_pi1&amp;#039;,&amp;#039;&amp;#039;,1);&lt;br /&gt;
&lt;br /&gt;
$_EXTCONF = unserialize($_EXTCONF);&lt;br /&gt;
if ($_EXTCONF[&amp;#039;addPageTS&amp;#039;])	{&lt;br /&gt;
	t3lib_extMgm::addPageTSConfig(&amp;#039;&lt;br /&gt;
TCEFORM.tt_content.imageorient.types.image.removeItems = 8,9,10,17,18,25,26&lt;br /&gt;
&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
$TYPO3_CONF_VARS[&amp;#039;FE&amp;#039;][&amp;#039;XCLASS&amp;#039;][&amp;#039;tslib/class.tslib_content.php&amp;#039;]=t3lib_extMgm::extPath($_EXTKEY).&amp;#039;class.ux_tslib_content.php&amp;#039;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>84.160.195.20</name></author>
	</entry>
</feed>