1.Vorwort
- Bookmarken Sie die Buch-Website
- Quelltexte in diesem Buch
- 1.1TYPO3 CMS 7 LTS
- 1.2Meine persönliche Extbase-Geschichte
- 1.3Danksagung
- 1.4Changelog
2.Der moderne Weg der Extension-Programmierung
- 2.1Ein neues TYPO3 ensteht
- 2.2Das Berlin-Manifesto
- 2.3Die Geburtsstunde von Flow aka TYPO3 Flow aka FLOW3
- 2.4Phoenix aus der Asche
- 2.5Das TYPO3-Dilemma
- 2.6Der Split
- 2.7Die Geschichte von Extbase & Fluid
- 2.7.1Backports: Extbase & Fluid
- 2.7.2Höheres Programmierniveau
3.Grundlagen der objektorientierten Programmierung (OOP)
- OOP in Extbase & Fluid
- 3.1Klassen und Objekte
- TYPO3 Coding Guidelines
- Schreibweise
- 3.2Methoden
- 3.2.1Der Pfeil-Operator
- 3.2.2Der Konstruktor
- 3.2.3Zugriff mittels
$this - 3.2.4Methoden mit Inhalt füllen
- 3.3Vererbung von Klassen
- 3.3.1Zugriff mittels parent
- 3.3.2Überprüfung der Klassenzugehörigkeit
- 3.4Abstrakte Klasse: Kontrollierte Vererbung
- 3.5Interfaces
- 3.6Sichtbarkeiten: public und protected
- Sichtbarkeiten in Extbase & Fluid
- 3.6.1Getter und Setter
- 3.7Type Hints
- 3.8Statische Zugriffe
- 3.9Namespaces
- 3.10Wichtige Entwurfs- und Architekturmuster
- 3.10.1Singleton
- 3.10.2Prototyp
- 3.10.3Dependency Injection
- 3.11Annotations
4.Domain Driven Design
- Definition von DDD
- 4.1Infrastructure Ignorance
- 4.2Vertikale Schichtarchitektur
- 4.3Das Domain Model
- 4.3.1Ubiquitous Language
- Pragmatisches Vorgehen
- 4.3.2Bausteine für das DDD
- 4.4DDD strukturieren
- 4.4.1Bounded Context (BC)
- 4.4.2Context Map
- 4.4.3Core Domain
- 4.4.4Shared Kernel
- 4.4.5Zusammenfassung
- 4.4.6Weitere Links
5.Extbase im Überblick
- 5.1Installation von Extbase & Fluid
- Versionsnummern der System Extensions
- 5.1.1PHP Doc Comments erhalten
- 5.2Installation der Extension efempty
- Extensions, Plugins und Modules
- 5.3Rundgang durch die Extension
- 5.3.1Die Dateien ext_emconf.php und ext_icon.gif
- 5.3.2ext_tables.php
- Mehrere Plugins in einer Extension
- 5.3.3ext_localconf.php
- 5.3.4Controller:
Pluswerk\Efempty\Controller\StartController - 5.3.5Domain:
Pluswerk\Efempty\Domain\Model\Start - 5.3.6Die Ausgabe über den View
- Schreibweise von Templates
- 5.3.7Aufruf der Show-Action
6.Erstellung des Domain Models (Modellierung)
- 6.1Das Domain Model für das Buch
- 6.2Grundidee
- 6.2.1Das Glossar
- 6.2.2Modell
- 6.3Modellierung in Extbase - Der Extension Builder
- Vertrauen Sie dem Extension Builder nicht zu sehr!
- Aktuelle Entwicklerversion des Extension Builders
- 6.3.1Extension-Eigenschaften
- Exakt an das Beispiel halten
- 6.3.2Domain Model
- Didaktik: Die Reihenfolge ist wichtig
- 6.3.3Eigenschaften des Domain Models
- 6.3.4Relationen des Domain Models
- 6.4Anpassen der Extension bzgl. Klassen-Autoloader
- 6.5Installation der Extension
- 6.6Analyse der Dateien des Extension Builders
- 6.7Weitere Funktionen des Extension Builders
- 6.7.1Backup erstellen
- 6.7.2Model modifizieren
- 6.7.3Class Builder
- Quellcode
7.Vorbereitung
- 7.1Frontend Frameworks
- 7.2Statisches TypoScript laden
- 7.3CSS Datei laden
- 7.4IDE Einstellungen
- 7.4.1PhpStorm: Projekt anlegen
- 7.4.2PhpStorm: TYPO3 Core-Dateien in den Include-Pfad aufnehmen
- 7.4.3PhpStorm: Schema-Dateien für Fluid einbinden
- 7.4.4PhpStorm: Tipp für Auflösung von Klassen
- 7.4.5PhpStorm: TYPO3 Extension phpstorm
- 7.5Fehlermeldung in TYPO3
- 7.6Systemcache Menüpunkt aktivieren
- Quellcode
8.Der CRUD-Prozess
- 8.1Erstellung eines Objekts (Create)
- 8.1.1Action im Controller anlegen
- 8.1.2Template für listAction anlegen
- 8.1.3Exkurs: Rendering des Templates
- Rendern eines Views ohne Ausgabe
- 8.1.4Statische Blogs anlegen
- 8.1.5Persistierung der Blogs
- 8.1.6Exkurs: Persistierung
- Implizite Persistierung
- 8.1.7Der PersistenceManager: manuelle Persistierung
- Öffentliche API
- 8.1.8Aufteilung der Erzeugung auf eine eigene Action
- Der Redirect
- 8.1.9Formular zum Anlegen eines Objektes
- Achten Sie auf den Cache
- 8.2Anzeigen eines Objekts (Read)
- 8.3Aktualisierung eines Objekts (Update)
- 8.4Löschen eines Objekts (Delete)
- Übung
- 8.5Optische Verbeserungen
- 8.6Zusammenfassung
- Quellcode
9.Das Fluid-Templating: Templates, Layouts & Partials
- 9.1Layout erstellen und referenzieren
- Optionale Sections
- 9.2Partials
- 9.2.1Einfache Partials
- Unterverzeichnisse bei Partials und Layouts und Extension
- 9.2.2Komplexe Partials
- Übertragung von Argumenten ins Partial
- Übung
- Quellcode
10.Query Manager und Repositories
- 10.1Aufbau einer Repository Klasse
- 10.2Schreibende Repository Funktionen
- 10.3Lesende Repository Funktionen
- 10.4Default-Aufbau einer Query
- 10.4.1Exkurs: Debugging
- 10.5Anpassen des Queries
- Quelle in Extbase
- 10.5.1Ergebnis-Set bestimmen
- 10.5.2Ergebnisset einschränken
- 10.5.3Logische Verknüpfungen
- 10.5.4Natives SQL
- 10.5.5Query-Settings
- 10.6Beispiel: Suchwort im Titel
- 10.7Dynamische Suche auf dem Repository
- Escapen
- 10.8Exkurs: Request-Objekt
- Quellcode
11.Konfiguration via TypoScript und Flexforms
- 11.1TypoScript
- 11.1.1Scope im Setup
- 11.1.2Grundaufbau
- 11.1.3Optionen: view
- 11.1.4Optionen: persistence
- 11.1.5Optionen: objects
- Klassen Autoloader
- 11.1.6Optionen: features
- 11.1.7Optionen: mvc
- 11.1.8Optionen: settings
- 11.1.9Optionen: _LOCAL_LANG
- 11.1.10Optionen: _CSS_DEFAULT_STYLE
- 11.2FlexForms
- TCA überschreiben
- 11.2.1FlexForm Konfiguration
- FlexForm immer abspeichern
- Bug in der Ermittlung der Konfiguration
- 11.2.2Switchable Controller Actions (SCA)
- Hartnäckige Flexform
- 11.3TypoScript für weitere Bearbeitung des Buches setzen
- Settings in anderen Bereichen auslesen
- 11.4TypoScript für Backend-Module
- Quellcode
12.Validierung und Error-Handling
- 12.1Zeitpunkt der Validierung
- 12.2Error-Handling
- 12.3Die Validierung in der Übersicht
- Wann wird genau validiert?
- 12.4Property-Validation
- 12.4.1Eingebaute Validatoren
- 12.4.2Mehrere Validatoren
- 12.4.3Eigene Validatoren
- Rückgabewerte der Funktion
isValid() - 12.5Object-Validation
- Anderes Verzeichnis für den Object Validator
- 12.6Action-Validation
- 12.7Fehlerangabe beim Formularfeld
- 12.7.1Möglichkeit 1 - mit Bordmitteln
- ViewHelper Inline Syntax
- 12.7.2Möglichkeit 2 - mit Hilfe eines ViewHelpers
- Quellcode
13.Relationen
- 13.1Relation im Domain Model
- 13.2Das Table Configuration Array (TCA)
- 13.2.1TCA: ctrl
- 13.2.2TCA: interface
- 13.2.3TCA: types
- 13.2.4TCA: palettes
- 13.2.5TCA: columns
- LowLevel-Zugriff zur Datenbank
- 13.3Der CRUD-Prozess der Posts
- 13.3.1Vorbereitungen
- 13.3.2Posts anlegen (Create)
- Übung
- 13.3.3Posts ansehen (Read)
- 13.3.4Posts editieren (Update)
- 13.3.5Posts löschen (Delete)
- 13.4Die m:n-Beziehung am Beispiel der Tags
- 13.4.1Anlegen der Tags im Backend
- 13.4.2Repository für die Tags
- 13.4.3Anpassen des Post-Controllers
- 13.4.4Anpassen der Templates und Partials
- 13.4.5Anzeige der Tags in der Liste
- Das Attribut
iterationim For-ViewHelper - 13.5Die 1:1-Relation am Beispiel des Autors
- 13.5.1Anlegen der Frontend User und Gruppen
- 13.5.2Koppeln des Domänen-Objekts Author mit der fe_users-Tabelle
- 13.5.3Festlegen des Autors beim Erstellen und Editieren eines Posts
- 13.5.4Eingeloggten User als Autor verwenden
- 13.6Comments & AJAX
- 13.6.1Registrierung der AJAX-Action
- 13.6.2Anzeige der Kommentare
- 13.6.3JavaScript-Handler
- console.log und IE
- 13.6.4Ajax-Action im Post-Controller
- 13.6.5AJAX Page-Type im TypoScript festlegen
- Kommentare nur für eingeloggte User ermöglichen
- Quellcode
14.Eigene ViewHelper erstellen
- 14.1Namespace-Deklaration
- 14.2Text-ViewHelper
- 14.2.1Parameter via Attribut
- 14.2.2Parameter via Inhalt
- 14.2.3TSFE-ViewHelper
- 14.3Tag-ViewHelper
- Allgemeine Attribute
- 14.4If-ViewHelper
- 14.5Widget-ViewHelper
- 14.5.1Sort Widget
- 14.5.2A-Z Widget
- Quellcode
15.Mehrsprachigkeit
- 15.1Sprachen konfigurieren
- 15.2Sprachlabels
- 15.3Sprachlabels mit Platzhaltern
- 15.4Sprachlabels mit TypoScript überschreiben
- 15.5Sprachlabels in PHP
- 15.6Mehrsprachigkeit bei Domänenobjekten
- 15.6.1Datenbank und TCA
- 15.6.2Sprache im Backend anlegen
- 15.6.3Datensatz übersetzen
- 15.6.4Repository richtig ansprechen
- 15.6.5Anlegen von übersetzten Datensätzen
- Quellcode
16.Backend Module
- 16.1Registrierung des Moduls
- 16.2Sprachdatei für die Labels
- 16.3TypoScript
- 16.4Comment-Repository
- 16.5Comment-Controller
- 16.6Templates
- 16.6.1Aufbau Backend-Markup
- 16.6.2Index-Action
- 16.6.3List-Action
- 16.6.4CSH-Buttons
- 16.6.5Action-Menü
- 16.6.6Shortcut-Button
- 16.6.7Icon-Button
- Quellcode
17.Der Property Mapper
- Das folgende Kapitel betrachtet einen vom didaktischen Beispiel losgelösten Sachverhalt
- 17.1Beispiel 1: Einfacher Typ
- 17.2Beispiel 2: Komplexer Typ
- 17.3Konfigurieren des Property Mapper
- 17.4Konfiguration des Property Mapping im MVC Stack
- IDE-konforme Schreibweise
- 17.5Sicherheitserwägungen
- 17.6Ablauf der Konvertierung
- 17.6.1Automatische Auflösung des TypeConverters
18.Best Practices
- 18.1Flash Messages
- 18.1.1Mehrere FlashMessage-Queues
- 18.1.2Zugriff im Controller
- 18.2Plugin per TypoScript laden
- 18.3RSS-Feed
- 18.3.1Fontawesome Icon
- 18.3.2Rss-Action registrieren
- 18.3.3RSS-Action im Blog-Controller
- 18.3.4XML-View
- 18.3.5Feld crdate nachrüsten
- 18.3.6TypoScript Setup
- 18.4UriBuilder
- 18.5Upload von Dateien
- 18.5.1Anpassen des Domain Models
- 18.5.2Hinzufügen eines Upload-Feldes
- 18.5.3Anpassungen im Blog-Controller
- 18.5.4Anpassungen im Blog Model
- 18.5.5TCA anpassen
- 18.6Upload via FAL
- 18.6.1Blog Domain Model
- 18.6.2FileReference Domain Model
- 18.6.3Datenbank
- 18.6.4TCA des Blog Domain Model
- 18.6.5TypoScript
- 18.6.6Speicherort für die Dateien
- 18.6.7Upload-Feld im Template
- 18.6.8Show-Template
- 18.6.9Form.Upload ViewHelper
- 18.6.10Blog-Controller
- 18.6.11Registrierung TypeConverter
- 18.6.12Upload File Reference Converter
- 18.7File Abstraction Layer (FAL)
- 18.7.1Datenbank
- 18.7.2TCA
- 18.7.3XLIFF
- 18.7.4Domain Model
- 18.7.5Show-Template des Post-Controllers
- 18.8StdWrap in den Settings
- 18.9Signal Slot Dispatcher
- 18.9.1Signal
- 18.9.2Slot
- 18.9.3Eingebaute Signale
- 18.9.4Beispiel für die Nutzung eingebauter Signale
- Schreibender Zugriff via Slot
- 18.9.5Eigene Signale erstellen
- 18.10Category API
- 18.11Extbase Models
- 18.12Scheduler Tasks
- 18.13JSON View
- 18.13.1JSON-View im Blogbeispiel
- Quellcode
19.PHP 7
- 19.1Fehlermeldung “FileReference” (should be kompatible)
20.Reference
- 20.1Datei
ext_emconf.php - 20.2FlexForm Field Types
- 20.2.1Textfeld
- 20.2.2Datumsfeld
- 20.2.3Checkbox
- 20.2.4Textarea
- 20.2.5Textarea mit RTE
- 20.2.6Radio Buttons
- 20.2.7Selectbox
- 20.2.8Selectbox (Multi-Select)
- 20.2.9Page Browser