TYPO3-Extensions (eBook)
466 Seiten
Carl Hanser Fachbuchverlag
978-3-446-42357-2 (ISBN)
TYPO3 GEKONNT ERWEITERN
-Behandelt alle wesentlichen Aspekte der Extensionentwicklung
-Berücksichtigt topaktuell Extbase und Fluid
-Nur soviel allgemeine TYPO3-Grundlagen wie nötig
-Ideale Mischung aus Referenz und Lernbuch
-Code und Lösungen unter http://downloads.hanser.de und www.typo3-backstage.de
TYPO3 spielt im Markt der Content Management Systeme eine zentrale Rolle. Mit ein Grund für diesen Erfolg sind die vielfältigen Möglichkeiten zur Erweiterung des Systems durch eigene Extensions.
Genau diesem Thema widmet sich dieses Buch. Es wendet sich an TYPO3-Anwender und -Entwickler, die mithilfe eigener Erweiterungen das TYPO3-Grundsystem leistungsfähiger machen möchten. Schritt für Schritt wird der Leser durch die Welt der Extensionprogrammierung für das TYPO3-Backend und -Frontend geleitet, dabei werden alle Aspekte sowohl der klassischen Extensionentwicklung behandelt als auch neue Ansätze wie Extbase und Fluid berücksichtigt. Unterstützt wird die Darstellung durch zahlreiche anschauliche Beispiele. Der Referenzteil nennt und erläutert sämtliche Referenzen, API`s, Strukturen und Funktionen. TIPP: Suchen Sie Lösungen für Probleme im Umgang mit TYPO3? Dann könnte Ihnen das "TYPO3-Kochbuch" von Alexander Ebner und Patrick Lobacher gefallen, das ebenfalls bei Hanser erschienen ist.
Systemvoraussetzungen für eBook-inside: Internet-Verbindung und eBookreader Adobe Digital Editions.
Alexander Ebner arbeitet als TYPO3-Entwickler beim Münchner Reiseveranstalter FTI Frosch Touristik GmbH. TYPO3 begleitet ihn seit Jahren.Patrick Lobacher ist freier Entwickler, Mitglied in der TYPO3-Association und berät seit 1996 Unternehmen beim Einsatz von Webtechnologien.Tobias Hauser & Christian Wenz sind Herausgeber der Content Management-Bibliothek bei Hanser und beschäftigen sich seit Mitte der Neunziger Jahre mit Webtechnologien. Dabei haben sie zahlreiche CMS- und Portal-Projekte realisiert. Ihre Erfahrungen geben sie als Trainer, Berater und Autoren an ihre Kunden und Leser weiter.
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
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->
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
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
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
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
14 Der neue Weg der Extension- Programmierung (S. 265-266)
Das TYPO3-Projekt steht am Scheideweg. Einerseits wird weiterhin auf die allseits bewährte Basis der Version 4.x vertraut - andererseits steht mit dem Rewrite der Version 5.x eine architektonisch komplett neue Version in den Startlöchern bzw. ist gar schon erschienen. Technisch gesehen handelt es sich dabei um zwei völlig verschiedene Programme. Während der 4er-Zweig in den letzten elf Jahren organisch gewachsen und so auch vom Code her selbst für Experten unübersichtlich und weitläufig ist, baut die 5er-Version auf einem der modernsten Frameworks auf, die es momentan auf dem Markt gibt - namentlich FLOW3.
Dieses Framework wurde von Anfang an gezielt so konzipiert, dass es all jene Unzulänglichkeiten der technischen Basis der 4er-Version vermeidet und neue, leistungsstarke Konzepte einführt, die es ermöglichen, moderne und zeitgemäße Webapplikationen zu erschaffen. Man hatte anfangs zwar darüber nachgedacht, ob dieses Ziel auch möglich wäre, wenn man den bestehenden Code der 4er-Version anpasst, hat aber dann bald feststellen müssen, dass dies aufgrund der dort verwendeten Architektur nicht möglich ist.
So hat man beschlossen, TYPO3 5.x komplett neu zu entwickeln, und dabei festgestellt, dass es sinnvoll ist, dieses Projekt in zwei Teile zu trennen - in das zugrunde liegende PHP-Webapplikations-Framework FLOW3 und das Content-Management-System TYPO3 5 - das lediglich" eine sogenannte Komponente, also eine Art Extension für FLOW3 ist.
Mit dem Architekturwechsel einher geht aber auch ein relativ dramatischer Sachverhalt. Während es für das Kernsystem letztlich egal ist, wenn der komplette Quellcode ausgetauscht wird, trifft dies für die Extension nicht zu. Es gibt momentan weit über 3500 Extensions für TYPO3 4.x. Keine dieser Extensions kann in der Version TYPO3 5.x wieder verwendet werden. Letztlich müssen alle (oder zumindest die wichtigsten) Extensions komplett neu geschrieben werden. Dies muss freilich nicht sofort geschehen. Im Oktober 2008 wurde von den Kernentwicklern beider TYPO3-Entwicklungszweige das sogenannte Berlin Manifesto1 verabschiedet.
Dieses besagt zwar grundsätzlich, dass die Entwicklung von TYPO3 4.x noch einige Jahre weitergehen wird und man somit mit der klassischen Art, Extensions zu schreiben, ebenso lange weitermachen könnte, aber die Erfahrung zeigt, dass Kunden sicherlich bei neuen Projekten direkt auch auf die zukunftsträchtigere Technologie der Version 5.x setzen wollen. Immerhin wird oftmals viel Geld in die Entwicklung gesteckt, und daher will man sicher sein, dieses auch bei einem eventuellen Technologiewechsel nicht erneut investieren zu müssen. Dies geht allerdings natürlich erst, wenn eine stabile Version von TYPO3 5.x erschienen ist. Bestehende Projekte werden sicherlich nicht bei Erscheinen der neuen Version gleich neu aufgebaut werden.
Ebenso befinden sich Projekte, die jetzt begonnen werden sollen, in der Zwickmühle. Die neue Version von TYPO3 ist noch nicht stabil, aber die "alte" Version erscheint nicht zukunftsträchtig genug. Hier wäre es sinnvoll, eine Möglichkeit zu haben, direkt in TYPO3 4.x Extensions nach den neuen Methoden und Paradigmen der Version 5.x zu schreiben, die man dann später - bei Erscheinen der stabilen Version von TYPO3 5.x - mit geringem änderungsaufwand wieder verwenden kann. Damit könnte man gleich hier und heute anfangen, neue Entwicklungen zu starten, die aber auch in der Zukunft einsetzbar sind."
| Erscheint lt. Verlag | 1.1.2010 |
|---|---|
| Verlagsort | München |
| Sprache | deutsch |
| Themenwelt | Mathematik / Informatik ► Informatik ► Programmiersprachen / -werkzeuge |
| Mathematik / Informatik ► Informatik ► Web / Internet | |
| Schlagworte | CMS • Content Management Systeme • Extensions • MySQL • Open Source • PHP • TYPO3 • TypoScript |
| ISBN-10 | 3-446-42357-5 / 3446423575 |
| ISBN-13 | 978-3-446-42357-2 / 9783446423572 |
| Informationen gemäß Produktsicherheitsverordnung (GPSR) | |
| Haben Sie eine Frage zum Produkt? |
DRM: Digitales Wasserzeichen
Dieses eBook enthält ein digitales Wasserzeichen und ist damit für Sie personalisiert. Bei einer missbräuchlichen Weitergabe des eBooks an Dritte ist eine Rückverfolgung an die Quelle möglich.
Dateiformat: PDF (Portable Document Format)
Mit einem festen Seitenlayout eignet sich die PDF besonders für Fachbücher mit Spalten, Tabellen und Abbildungen. Eine PDF kann auf fast allen Geräten angezeigt werden, ist aber für kleine Displays (Smartphone, eReader) nur eingeschränkt geeignet.
Systemvoraussetzungen:
PC/Mac: Mit einem PC oder Mac können Sie dieses eBook lesen. Sie benötigen dafür einen PDF-Viewer - z.B. den Adobe Reader oder Adobe Digital Editions.
eReader: Dieses eBook kann mit (fast) allen eBook-Readern gelesen werden. Mit dem amazon-Kindle ist es aber nicht kompatibel.
Smartphone/Tablet: Egal ob Apple oder Android, dieses eBook können Sie lesen. Sie benötigen dafür einen PDF-Viewer - z.B. die kostenlose Adobe Digital Editions-App.
Buying eBooks from abroad
For tax law reasons we can sell eBooks just within Germany and Switzerland. Regrettably we cannot fulfill eBook-orders from other countries.
aus dem Bereich