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 |