Suchen und Finden
Inhalt
6
Vorwort
18
Teil I Klassische Extensionprogrammierung
20
1 Grundlagen
22
1.1 Aufbau und Struktur von TYPO3
22
1.2 Aufbau einer Extension
25
1.3 Arten und Einteilung von Extensions
26
1.4 Der Extension-Key
27
1.5 TYPO3 Coding Guidelines
28
1.5.1 Namespace
29
1.5.2 PHP-Regeln
30
1.5.3 Dateistruktur
31
1.5.4 PHP-Syntax
34
1.5.5 phpDoc2
40
1.5.6 Changelog
41
2 Eine Extension planen undentwickeln
42
2.1 Extensions planen
42
2.1.1 Wir planen eine Blog-Extension
43
2.2 Der Kickstarter
45
2.2.1 Die Datenbank
47
2.2.2 Datenbanktabellen und Formulare – eine Erklärung
53
2.2.3 Extend existing Tables
55
2.2.4 Frontend-Plug-ins
56
2.2.5 Backend-Module
59
2.2.6 Integrate in existing Modules
60
2.2.7 Clickmenu items
60
2.2.8 Services
61
2.2.9 Static TypoScript code
62
2.2.10 TSconfig
62
2.2.11 Die Extension erstellen
63
2.3 Extension-Konfiguration mit ext_emconf.php
64
2.4 Die weiteren Dateien der Extension
69
2.4.1 Verzeichnis doc
69
2.4.2 Verzeichnis mod#
69
2.4.2.1 Datei mod#/conf.php
69
2.4.2.2 Datei mod#/index.php
70
2.4.2.3 Datei mod#/locallang.xml
70
2.4.2.4 Datei mod#/locallang_mod.xml
70
2.4.3 Verzeichnis modfunc#
70
2.4.3.1 Datei modfunc#/class.tx_extkey_modfunc1.php
70
2.4.4 Verzeichnis pi#
71
2.4.4.1 Datei pi#/class.tx_extkey_pi#.php
71
2.4.4.2 Datei pi#/class.tx_extkey_pi#_wizicon.php
71
2.4.4.3 Datei pi#/ce_wiz.gif
71
2.4.4.4 Datei pi#/clear.gif
71
2.4.4.5 Datei pi#/static/setup.txt
71
2.4.5 Verzeichnis Static
71
2.4.6 Datei Changelog
72
2.4.7 Datei README.txt
72
2.4.8 Datei ext_icon.gif
72
2.4.9 Datei ext_localconf.php
72
2.4.10 Datei ext_tables.php
72
2.4.11 Datei ext_tables.sql
73
2.4.12 Datei ext_tables_static+adt.sql
74
2.4.13 Dateien Icon_tx_extkey_tabellenname.gif
75
2.4.14 Datei locallang.xml
75
2.4.15 Datei locallang_db.xml
75
2.4.16 Datei tca.php
75
2.4.16.1 Checkboxen
76
2.4.16.2 Erweiterte Input-Felder
77
2.4.16.3 Validierung mit eval
77
2.4.16.4 Benutzerdefinierte Validierung
79
2.4.16.5 Bildupload-Feld
79
2.4.16.6 Textfelder mit RTE
80
2.4.16.7 M-M-Relationen
81
3 Backend-Module erstellen
84
3.1 Module konfigurieren und im Hauptmenü anordnen
84
3.2 Einen eigenen Navigationsbaum erstellen
88
3.3 Backend-Modul erstellen
94
3.3.1 Das Modul initialisieren
94
3.3.2 Den Modulinhalt aufbauen
98
3.3.3 Extension-Konfiguration über ext_conf_template.txt
99
3.3.4 Backend-Formulare aufrufen
101
3.3.5 Eine Datensatzliste mit Bearbeitungsfunktionen erstellen
103
3.3.5.1 Einen Pagebrowser hinzufügen
106
3.3.6 Aufgabe: Module für Kommentare, Blog und Blogroll
109
3.3.6.1 Tipps
109
3.3.6.2 Zusatzaufgabe
110
3.4 Backend User Object – $BE_USER
110
3.5 Das Systemlog
111
4 Frontend-Plug-ins
114
4.1 Das Frontend-Plug-in im Überblick
114
4.2 Feldinhalte für die Ausgabe aufbereiten
122
4.2.1 Das Bild für Teaser Image
123
4.2.2 Ausgabe des Haupttextes in der Listenansicht, wennerwünscht
124
4.2.3 Haupttext mit RTE formatieren
124
4.2.4 Haupttext statt Teasertext anzeigen, falls dieser nichtverfügbar ist
125
4.2.5 Verlinken des Autorennamens mit der Mail-Adresse desAutors
125
4.2.6 Kategorien als Namen anzeigen und verlinken (Relationen)
126
4.3 HTML-Templates für das Plug-in
128
4.4 Die Kommentarfunktion mit AJAX und eID
133
4.4.1 Ausgabe vorhandener Kommentare
134
4.4.2 Das Kommentarformular hinzufügen
137
4.5 Was sind Hooks?
142
4.6 Flexforms
144
4.6.1 Erzeugen der Flexform
145
4.7 Das Plug-in pi2
151
5 Dokumentation und Abschluß
152
5.1 Code dokumentieren mit extdeveval
152
5.2 Extension-Dokumentation schreiben
153
5.2.1 Die Vorlage
154
5.2.2 Der Aufbau der Dokumentation
154
5.2.3 Vorlagenstile
155
5.2.4 Die Dokumentation verfassen
155
5.3 Upload ins TER
156
Teil II Funktionsreferenz zur klassischenExtensionprogrammierung
158
6 Datenbank
160
6.1 $GLOBALS['TYPO3_DB']
160
6.1.1 exec_SELECTquery
160
6.1.2 exec_SELECT_queryArray
160
6.1.3 exec_SELECTgetRows
161
6.1.4 exec_SELECT_mm_query
161
6.1.5 exec_INSERTquery
162
6.1.6 exec_UPDATEquery
162
6.1.7 exec_DELETEquery
162
6.1.8 sql_fetch_assoc
162
6.1.9 sql_fetch_row
163
6.1.10 searchQuery
163
6.1.11 listQuery
163
6.1.12 splitGroupOrderLimit
164
6.1.13 quoteStr
164
6.1.14 fullQuoteStr
164
6.1.15 fullQuoteArray
165
6.1.16 escapeStrForLike
165
6.1.17 cleanIntArray
166
6.1.18 cleanIntList
166
6.1.19 debug_lastBuiltQuery
166
6.2 tslib_pibase
167
6.2.1 pi_exec_query
167
6.2.2 pi_getPidList
168
6.2.3 pi_getRecord
169
6.2.4 pi_prependFieldsWithTable
169
6.3 cObj
169
6.3.1 DBgetDelete
169
6.3.2 DBgetInsert
170
6.3.3 DBgetUpdate
171
6.3.4 enableFields
172
7 Dateisystem
174
7.1 t3lib_div
174
7.1.1 dirname
174
7.1.2 fixWindowsFilePath
174
7.1.3 formatSize
175
7.1.4 get_dirs
175
7.1.5 getAllFilesAndFoldersInPath
176
7.1.6 getFileAbsFileName
177
7.1.7 getFilesInDir
177
7.1.8 getURL
178
7.1.9 isAbsPath
178
7.1.10 isAllowedAbsPath
178
7.1.11 mkdir
179
7.1.12 mkdir_deep
179
7.1.13 removePrefixPathFromList
179
7.1.14 resolveBackPath
180
7.1.15 rmdir
180
7.1.16 split_fileref
181
7.1.17 tempnam
181
7.1.18 unlink_tempfile
181
7.1.19 upload_copy_move
181
7.1.20 upload_to_tempfile
182
7.1.21 verifyFilenameAgainstDenyPattern
182
7.1.22 writeFile
183
7.1.23 writeFileToTypo3tempDir
183
8 Strings, Arrays undUmgebungsvariablen
184
8.1 Allgemeine Funktionen
184
8.1.1 _GET
184
8.1.2 _GETset
184
8.1.3 _GP
185
8.1.4 _POST
185
8.1.5 callUserFunction
185
8.1.6 clientInfo
186
8.1.7 compat_version
186
8.1.8 compileSelectedGetVarsFromArray
187
8.1.9 getHostname
187
8.1.10 getIndpEnv
187
8.1.11 getThisUrl
187
8.1.12 linkThisScript
188
8.1.13 linkThisUrl
188
8.1.14 locationHeaderUrl
188
8.1.15 makeInstance
189
8.1.16 makeInstanceService
189
8.1.17 rmFromList
189
8.1.18 sysLog
190
8.2 String-Funktionen
190
8.2.1 calcParenthesis
190
8.2.2 cmpFQDN
190
8.2.3 cmpIP
191
8.2.4 convUmlauts
191
8.2.5 csvValues
191
8.2.6 deHSCentities
192
8.2.7 expandList
192
8.2.8 fixed_lgd
192
8.2.9 fixed_lgd_pre
193
8.2.10 formatForTextarea
193
8.2.11 generateRandomBytes
193
8.2.12 get_tag_attributes
194
8.2.13 htmlspecialchars_decode
194
8.2.14 implodeArrayForUrl
194
8.2.15 implodeAttributes
195
8.2.16 inList
195
8.2.17 int_from_ver
196
8.2.18 intInRange
196
8.2.19 intval_positive
196
8.2.20 isFirstPartOfStr
197
8.2.21 md5int
197
8.2.22 milliseconds
198
8.2.23 modifyHTMLColor
198
8.2.24 modifyHTMLColorAll
198
8.2.25 normalizeIPv6
199
8.2.26 removeXSS
199
8.2.27 revExplode
199
8.2.28 rm_endcomma
200
8.2.29 shortMD5
200
8.2.30 split_tag_attributes
200
8.2.31 splitCalc
201
8.2.32 strtolower
201
8.2.33 strtoupper
202
8.2.34 substUrlsInPlainText
202
8.2.35 testInt
203
8.2.36 trimExplode
203
8.2.37 uniqueList
204
8.2.38 validEmail
204
8.2.39 validIP
204
8.2.40 validIPv4
205
8.2.41 validIPv6
205
8.3 Array-Funktionen
205
8.3.1 addSlashesOnArray
205
8.3.2 array_merge
206
8.3.3 array_merge_recursive_overrule
206
8.3.4 array2json
207
8.3.5 array2xml
207
8.3.6 arrayToLogString
208
8.3.7 explodeUrl2Array
209
8.3.8 inArray
209
8.3.9 print_array
209
8.3.10 removeArrayEntryByValue
210
8.3.11 slashArray
210
8.3.12 view_array
211
8.3.13 xml2array
211
8.3.14 xml2tree
212
8.3.15 xmlGetHeaderAttribs
213
8.4 String-Funktionen in Frontend-Plug-ins
214
8.4.1 calcAge
214
8.4.2 checkEmail
214
8.4.3 codeString
214
8.4.4 encryptEmail
215
8.4.5 HTMLcaseshift
215
8.4.6 keywords
215
8.4.7 linebreaks
216
8.4.8 processParams
216
8.4.9 uniqueHash
217
8.4.10 URLqMark
217
9 Bilder
218
9.1 Einbinden
218
9.2 Bearbeiten
219
9.2.1 Bild umrechnen (fürs Web optimieren)
219
9.2.2 Abmessungen ändern
220
9.2.3 Zuschneiden
220
9.2.4 Graustufen
221
9.3 Erzeugen
222
9.3.1 Bild in bestehendes Bild einfügen
222
9.3.2 Text erzeugen
223
10 AJAX im Frontend
224
10.1 eID
224
10.1.1 Konfiguration
224
10.1.2 Basisdatei
225
10.2 Zusammenspiel AJAX & eID
225
10.2.1 Aufbau der XML-Response
225
10.2.2 AJAX-Request und Verarbeitung
226
11 Frontend-Plug-ins
228
11.1 Cache
228
11.1.1 cacheExpires
228
11.1.2 clearPageCacheContent
228
11.1.3 clearPageCacheContent_pidList
228
11.1.4 get_cache_timeout
229
11.1.5 set_cache_timeout_default
229
11.1.6 set_no_cache
229
11.2 Content-Elemente
230
11.2.1 cImage
230
11.2.2 cleanFormName
230
11.2.3 cObjGet
230
11.2.4 cObjGetSingle
231
11.2.5 currentPageUrl
231
11.2.6 fileResource
232
11.2.7 getImgResource
232
11.2.8 getSlidePids
232
11.2.9 gifBuilderTextBox
232
11.2.10 stdWrap
233
11.3 Links
234
11.3.1 baseUrlWrap
234
11.3.2 getMailTo
234
11.3.3 getTypoLink
235
11.3.4 getTypoLink_URL
235
11.3.5 http_makelinks
236
11.3.6 imageLinkWrap
236
11.3.7 mailto_makelinks
236
11.3.8 pi_getPageLink
237
11.3.9 pi_linkToPage
237
11.3.10 pi_linkTP
238
11.3.11 pi_linkTP_keepPIvars
238
11.3.12 pi_linkTP_keepPIvars_url
238
11.3.13 pi_openAtagHrefInJSwindow
239
11.3.14 prefixLocalAnchorsWithScript
239
11.4 Listen
239
11.4.1 pi_list_browseresults
240
11.4.2 pi_list_linkSingle
241
11.4.3 pi_list_makelist
241
11.4.4 pi_list_modeSelector
242
11.4.5 pi_list_searchBox
242
11.5 JavaScript
243
11.5.1 additionalHeaderData
243
11.5.2 additionalJavaScript
243
11.5.3 JSeventFuncCalls
244
11.5.4 minifyJavaScript
244
11.5.5 quoteJSvalue
245
11.5.6 rawUrlEncodeJS
245
11.5.7 setJS
245
11.5.8 wrapJS
246
11.6 CSS
246
11.6.1 additionalCSS
246
11.6.2 additionalHeaderData
247
11.6.3 pi_getClassName
247
11.6.4 pi_setClassStyle
247
11.6.5 setCSS
248
11.7 Mehrsprachigkeit
249
11.7.1 getLLL
249
11.7.2 pi_getLL
249
11.7.3 readLLfile
250
11.8 Umgebungsvariablen und allgemeine Funktionen
250
11.8.1 absRefPrefix
250
11.8.2 additionalHeaderData
251
11.8.3 all
251
11.8.4 anchorPrefix
252
11.8.5 applicationData
252
11.8.6 ATagParams
252
11.8.7 baseUrl
253
11.8.8 baseUrlWrap
253
11.8.9 beUserLogin
253
11.8.10 clientInfo
253
11.8.11 content
254
11.8.12 defaultBodyTag
254
11.8.13 domainStartPage
254
11.8.14 extTarget
255
11.8.15 fePreview
255
11.8.16 id
255
11.8.17 imagesOnPage
256
11.8.18 intTarget
256
11.8.19 lang
256
11.8.20 lastImageInfo
257
11.8.21 loginUser
257
11.8.22 no_cache
257
11.8.23 page
258
11.8.24 printError
258
11.8.25 rootLine
259
11.8.26 siteScript
259
11.8.27 tmpl->config, tmpl->setup
260
11.8.28 type
260
11.8.30 uniqueString
261
11.9 Konfiguration mit Flexforms
261
11.9.1 Erstellen einer Plug-in_Flexform
261
11.9.2 Auslesen der Formulardaten
262
11.10 Konfiguration mit TypoScript
262
11.11 Konfiguration im Extension-Manager
263
12 Frontend-User & Sessions
264
12.1 Frontend-User
264
12.1.1 Daten des aktuell angemeldeten Users
264
12.2 Sessions
264
12.2.1 Daten speichern
264
12.2.2 Daten auslesen
265
12.2.3 Warenkorb aufbauen
265
13 Backend & Services
268
13.1 Eigene Flexforms
268
13.1.1 Mehrsprachigkeit
269
13.1.2 Tabs
270
13.1.3 Elemente
271
13.1.4 Flexform-Daten im Frontend
275
13.2 Backend-Module
276
13.2.1 Dokumententypen für $this->doc
276
13.2.2 TypoScript einer Seite auslesen
276
13.2.3 AJAX im Backend
276
13.3 Services
278
13.4 cli
278
13.5 Debugging
279
13.5.1 debug
279
13.5.2 debug_ordvalue
280
13.5.3 debug_trail
280
13.5.4 debugRows
280
13.5.5 devLog
281
Teil III Extbase und Fluid
282
14 Der neue Weg der Extension-Programmierung
284
14.1 Grundlagen der objektorientierten Programmierung
286
14.1.1 Klassen und Objekte
286
14.1.2 Vererbung von Klassen
290
14.1.3 Kontrollierte Vererbung – abstrakte und finale Klassen
292
14.1.4 Sichtbarkeiten: public, private und protected
293
14.1.5 Interfaces
294
14.1.6 Type Hints
296
14.1.7 Statische Methoden und Eigenschaften
296
14.1.8 Namespaces
297
14.2 Neue Konzepte
298
14.2.1 Domain Driven Design
299
14.2.2 Model-View-Controller
300
14.2.3 Modellierung
301
14.2.4 Gemeinsamens Vokabular – Ubiquitous Language
301
14.2.5 Die Elemente des Modells
304
14.2.5.1 Entities (Entitäten)
304
14.2.5.2 Value Objects
304
14.2.5.3 Services
304
14.2.5.4 Aggregates
304
14.2.5.5 Factories
305
14.2.5.6 Repositories
305
15 Ein Rundgang durchs System
306
15.1 Installation von Extbase und Fluid
306
15.2 Installation der Extension blog_example
308
15.3 Datenstruktur im Blog-Example
310
15.4 Namenskonventionen
312
15.4.1 Verzeichnis- und Dateinamen
313
15.4.2 Klassennamen
313
15.4.3 Controller und Actions
314
15.5 Die Dateistruktur im Extension-Root-Verzeichnis
314
15.5.1 Die Datei ext_emconf.php
315
15.5.2 Die Datei ext_tables.php
316
15.5.3 Die Datei ext_localconf.php
320
15.5.4 Die Dateien ext_tables.sql und ext_icon.gif
321
15.6 Die Verzeichnisstruktur
321
15.6.1 Das Verzeichnis Classes
322
15.6.2 Das Verzeichnis Configuration
323
15.6.3 Das Verzeichnis Module
324
15.6.4 Das Verzeichnis Resources
324
15.6.5 Weitere Verzeichnisse
324
15.7 Der prinzipielle Ablauf
324
15.7.1 Aufruf des Dispatchers (Schritt 1)
325
15.7.2 Aufruf des Controllers (Schritt 2)
328
15.7.3 Ansprechen des Respositorys (Schritt 3)
328
15.7.4 Zurückliefern der Blog-Objekte (Schritt 4)
328
15.7.5 Das Objekt wird dem View zugeordnet (Schritt 5)
330
15.7.6 Rückgabe der Template-Ausgabe an den Controller (Schritt 6)
332
15.7.7 Rückgabe der Ausgabe an den Dispatcher (Schritt 7)
333
15.7.8 Rückgabe der Ausgabe an TYPO3 (Schritt 8)
333
16 Entwicklung eines eigenenPlug-ins
334
16.1 Aufbau einer minimal funktionstüchtigen Extension
334
16.1.1 Extension-Key
334
16.1.2 Verzeichnisse anlegen
335
16.1.3 Die Datei ext_emconf.php
335
16.1.4 Die Dateien ext_localconf.php und ext_tables.php
336
16.1.5 Einrichten eines Standard-Controllers
337
16.1.6 Installieren der Extension und das erste Erfolgserlebnis
338
16.2 Hinzufügen eines Views
339
16.3 Entitäten einführen
341
16.4 Daten persistieren (Datenspeicher)
343
16.4.1 Datenbankstruktur – die Datei ext_tables.sql
344
16.4.2 Datenbankstruktur – das TCA
348
16.5 Anlegen eines Repositorys
352
16.6 Anlegen einer neuen Action
354
16.6.1 Anlegen der Action addAction()
355
16.7 Daten per Formular eingeben und auswerten
356
16.8 Objekte aus dem Repository entfernen
357
16.8.1 Zufügen der Action delete in der Konfiguration
357
16.8.2 Anpassen der Template-Datei index.html
357
16.8.2.1 Zufügen der Action delete im Blog-Controller
358
16.9 Update von Objekten
358
16.9.1 Edit- und Update-Action hinzufügen
358
16.10 Der Query-Manager
360
16.11 Eingabevalidierung
362
16.12 Validatoren
362
16.12.1 Vordefinierte Validatoren
362
16.12.2 Eigene Validatoren
363
16.12.3 Ausgabe der Fehler
366
16.12.4 Optionale Argumente
366
16.13 Relationen zu anderen Tabellen
367
16.13.1 Erweiterung des TCA
367
16.13.2 Die Domain-Klasse Tx_Simpleblog_Domain_Model_Post
368
16.13.3 Registrieren der Actions in der Datei ext_localconf.php
369
16.13.4 Erstellung des Post-Controllers
369
16.13.5 Neue Templates und Template-Änderungen
371
16.13.6 Ändern der Blog-Identity
373
16.13.7 Aufruf der Extension im Frontend
375
16.14 Relationen zu anderen Tabellen m:n
375
16.15 Mehrsprachigkeit zufügen
380
16.16 Konfiguration mittels TypoScript
382
16.17 Backend-Module mit Extbase
384
16.18 Der Extbase-Kickstarter
385
16.18.1 Installation des Extbase-Kickstarters
386
16.18.2 Überblick über den Arbeitsbereich
387
16.18.3 Eingabe der Extension-Konfiguration
388
16.18.4 Modellierung
389
16.18.4.1 Anlegen des Blog-Objekts
390
16.18.5 Anlegen des Post-Objekts
391
16.18.6 Anlegen des Tag-Objekts
391
16.18.7 Relationen festlegen
392
16.19 Weitere Extbase-Interna
393
16.19.1 StoragePid
393
16.19.1.1 Schreibzugriffe
394
16.19.1.2 Aktualisieren
394
16.19.1.3 Lesen
395
16.19.2 MVC-Request
395
16.19.3 FlashMessages realisieren
396
17 Die Fluid-Template-Engine
398
17.1 Vorbereitung
399
17.2 Basissyntax und einfache Ausgabe
401
17.2.1 Arrays
401
17.2.2 Objekte
402
17.3 Fluid ViewHelper-Syntax
403
17.3.1 Namespace (Namensraum)
403
17.3.2 Argumente
404
17.3.2.1 Boolesche Ausdrücke
404
17.3.2.2 Komplexe boolesche Ausdrücke
405
17.3.2.3 Arrays
405
17.4 ViewHelper-Übersicht
406
17.4.1 alias
406
17.4.2 base
407
17.4.3 cObject
407
17.4.4 count
408
17.4.5 cycle
408
17.4.6 debug
409
17.4.7 else
409
17.4.8 for
409
17.4.9 form
410
17.4.9.1 form.checkbox
412
17.4.9.2 form.error
413
17.4.9.3 form.hidden
413
17.4.9.4 form.password
414
17.4.9.5 form.radio
415
17.4.9.6 form.select
416
17.4.9.7 form.submit
418
17.4.9.8 form.textarea
419
17.4.9.9 form.textbox
420
17.4.9.10 form.upload
420
17.4.10 format
421
17.4.10.1 format.crop
421
17.4.10.2 format.currency
422
17.4.10.3 format.date#
422
17.4.10.4 format.html
423
17.4.10.5 format.nl2br
424
17.4.10.6 format.number
424
17.4.10.7 format.padding
424
17.4.10.8 format.printf
425
17.4.11 groupedFor
425
17.4.12 if
426
17.4.13 image
427
17.4.14 layout
428
17.4.15 link
428
17.4.15.1 link.action
428
17.4.15.2 link.email
430
17.4.15.3 link.external
430
17.4.15.4 link.page
432
17.4.16 render
432
17.4.17 renderFlashMessages
433
17.4.18 section
434
17.4.19 then
434
17.4.20 translate
434
17.4.21 uri
435
17.5 Erstellen eines eigenen ViewHelpers
435
17.5.1 Der Dummytext-ViewHelper
436
17.5.2 Zugriff auf die übergebenen Argumente
437
17.5.3 Zufügen von Argumenten
438
17.5.4 Tag-basierende ViewHelper
438
17.5.5 Der Variablen-Container
439
17.6 Verwendung von Fluid in klassischen Extensions
440
17.7 Layouts und Partials
441
Register
446
Alle Preise verstehen sich inklusive der gesetzlichen MwSt.