|
Inhaltsübersicht |
8 |
|
|
Inhaltsverzeichnis |
10 |
|
|
Einleitung |
20 |
|
|
Warum ich dieses Buch schreibe |
20 |
|
|
Warum Sie dieses Buch lesen sollten |
21 |
|
|
Wie Sie mit dem Buch arbeiten können |
22 |
|
|
Dankeschön |
22 |
|
|
Noch Fragen? |
22 |
|
|
Teil I Einführung in die Entwicklung mit Joomla! |
24 |
|
|
1 Was ist Joomla!? |
26 |
|
|
1.1 Joomla! als Content Management System verstehen |
28 |
|
|
1.2 Joomla! und die Welt von Open-Source-Projekten |
29 |
|
|
2 Der Aufbau von Joomla! |
34 |
|
|
2.1 Übersicht und Einführung in die Terminologie |
34 |
|
|
2.1.1 Joomla! Core |
35 |
|
|
2.1.2 Die Joomla!-Datenbank |
36 |
|
|
2.1.3 Joomla!-Erweiterungen |
36 |
|
|
2.2 Was das Entwickeln auf Basis von Joomla! für den Entwickler bedeutet |
37 |
|
|
2.2.1 Die Joomla!-Softwarearchitektur |
38 |
|
|
2.3 Die Schichten der Joomla!-Architektur |
41 |
|
|
2.3.1 Das Joomla!-Framework |
42 |
|
|
2.3.2 Applikationsschicht |
44 |
|
|
2.3.3 Erweiterungen und CMS-Funktionen |
44 |
|
|
3 Die Arbeitsumgebung für Joomla! einrichten |
46 |
|
|
3.1 Überblick über die Arbeitsumgebung |
46 |
|
|
3.2 Werkzeuge und Produkte für die Arbeitsumgebung |
48 |
|
|
3.3 Installation und Konfiguration der Serverdienste |
52 |
|
|
3.3.1 Grundinstallation unter Windows |
52 |
|
|
3.3.2 Grundinstallation unter Mac OS X |
57 |
|
|
3.3.3 Serverinstallation in einer virtuellen Umgebung |
62 |
|
|
3.4 Einrichtung der lokalen Entwicklungswerkzeuge |
63 |
|
|
3.4.1 Vorschlag für die lokale Umgebung |
63 |
|
|
3.4.2 Entwicklungswerkzeuge auf Windows einrichten |
65 |
|
|
3.4.3 Entwicklungsumgebung für Mac OS X |
66 |
|
|
3.4.4 Einrichtung eines Subversion-Clients |
68 |
|
|
4 Joomla! erweitern |
70 |
|
|
4.1 Hilfreiche Anwenderforen für Erweiterungen |
70 |
|
|
4.2 Joomla! Extension-Websites |
71 |
|
|
4.2.1 extensions.joomla.org |
72 |
|
|
4.2.2 Weitere Verzeichnisse für Erweiterungen |
73 |
|
|
4.3 JoomlaCode - ein Platz für Entwicklungen |
74 |
|
|
4.3.1 Die Forge aus Sicht des Benutzers |
75 |
|
|
4.3.2 Tracker |
78 |
|
|
4.3.3 Download von Releases bzw. Quellcodes |
80 |
|
|
4.3.4 Die Forge für Projektleiter |
86 |
|
|
4.4 Installation von Joomla! Erweiterungen |
87 |
|
|
4.4.1 Nutzung des Joomla!-Erweiterungsmanagers |
87 |
|
|
4.4.2 Konfigurationsdateien für die Installation |
88 |
|
|
4.4.3 Installationsablauf, Aktualisierung und Abhängigkeiten |
90 |
|
|
Teil II Erste Schritte in der Entwicklung für Joomla! |
92 |
|
|
5 Kennenlernen und Anpassen von Erweiterungen |
94 |
|
|
5.1 Grundverständnis bei Anpassungen |
94 |
|
|
5.2 Vorbereitungen für die Anpassungen |
95 |
|
|
5.2.1 Sicherung der aktuellen Installation |
96 |
|
|
5.2.2 Aktualisierung der aktuellen Version |
99 |
|
|
5.2.3 Abgleich der lokalen Entwicklungsumgebung |
103 |
|
|
5.3 Erweiterung der Kontaktverwaltung |
104 |
|
|
5.3.1 Anforderungen an die Anpassung aufnehmen und analysieren |
105 |
|
|
5.3.2 Die Schritte zur vollständigen Anpassung |
106 |
|
|
5.3.3 Vorbereiten der Komponente |
107 |
|
|
5.3.4 Erstellung der neuen Datenbanktabellen |
108 |
|
|
5.3.5 Anpassungen innerhalb der Komponente |
110 |
|
|
5.3.6 Anpassungen der Verwaltungsklassen |
116 |
|
|
5.3.7 Anpassung der Darstellung |
119 |
|
|
5.4 Fazit zum Anpassen von Erweiterungen |
124 |
|
|
6 Grundlagen von Templates |
126 |
|
|
6.1 Das Beez-Template |
126 |
|
|
6.2 Anpassen bestehender Templates |
128 |
|
|
6.2.1 Analyse der Designanforderungen |
128 |
|
|
6.2.2 Planung der Template-Anpassungen |
129 |
|
|
6.2.3 Vorbereiten des Templates |
130 |
|
|
6.2.4 Anpassungen innerhalb des Templates |
131 |
|
|
6.2.5 Anpassungen der allgemeinen Template-Struktur |
132 |
|
|
6.2.6 Anpassungen von Design und Grafiken |
142 |
|
|
6.2.7 Anpassungen der Programmierung im Template |
143 |
|
|
6.3 Dynamische Elemente integrieren |
145 |
|
|
6.3.1 Dynamische Steuerung des Templates über Parameter |
145 |
|
|
6.3.2 Einbinden von dynamischen Menüs |
147 |
|
|
6.3.3 Dynamik im Template oder in den Modulen |
149 |
|
|
6.4 Überschreiben der Ausgaben von Erweiterungen |
150 |
|
|
6.4.1 Nutzung der Überschreibung für individuelle Anpassungen |
150 |
|
|
6.4.2 Überschreiben von Ausgaben in Modulen und Komponenten |
151 |
|
|
7 Eigene Entwicklungen |
154 |
|
|
7.1 Konzeption und Planung |
154 |
|
|
7.1.1 Analyse der Anforderungen |
154 |
|
|
7.1.2 Design der Informationsstruktur |
155 |
|
|
7.1.3 Softwarearchitektur |
156 |
|
|
7.1.4 Design des Benutzerinterface |
159 |
|
|
7.2 Erweiterte Einsatzgebiete für Erweiterungen |
162 |
|
|
7.2.1 Spezielle Komponenten |
162 |
|
|
7.2.2 Einsatz von Modulen innerhalb der Entwicklung |
163 |
|
|
7.2.3 Einsatz von Plugins |
165 |
|
|
7.3 Anwendungen auf Basis des Frameworks |
167 |
|
|
7.4 Anpassen oder neu entwickeln - das ist die Frage |
168 |
|
|
8 Weitere Informationen zu den Technikgrundlagen |
170 |
|
|
8.1 Erforderliche Serverdienste |
170 |
|
|
8.1.1 Der Webserver |
170 |
|
|
8.1.2 Die Programmiersprache PHP |
171 |
|
|
8.1.3 Datenbank MySQL |
171 |
|
|
8.2 Konfiguration eines Produktivservers |
172 |
|
|
8.2.1 Webserver und virtuelle Hosts |
172 |
|
|
8.2.2 Integration von PHP |
177 |
|
|
8.2.3 MySQL-Datenbank |
181 |
|
|
8.3 Optimierung von Joomla!-Servern |
181 |
|
|
8.3.1 Performanz |
181 |
|
|
8.3.2 Sicherheit und Verfügbarkeit |
182 |
|
|
8.4 Übertragung der Entwicklungsergebnisse |
183 |
|
|
8.4.1 Vorbereitung der Übertragung |
184 |
|
|
8.4.2 Lokale Entwicklungsumgebung zusammenstellen |
185 |
|
|
8.4.3 Übertragung der Dateien zum Server |
186 |
|
|
8.4.4 Einspielen der Datenbank |
186 |
|
|
8.4.5 Tests und Abschluss |
187 |
|
|
Teil III Das Joomla!-Framework im Detail |
188 |
|
|
9 Allgemeine CMS-Architektur |
190 |
|
|
9.1 Trennung von Inhalt, Verwaltung und Darstellung |
191 |
|
|
9.2 Trennung von Inhalt und Navigation |
194 |
|
|
9.2.1 Organisatorisch bedingte Trennung |
195 |
|
|
9.2.2 Wiederverwendung von Inhalten |
196 |
|
|
9.3 Herstellen einer Verbindung zwischen Inhalt und Navigation |
196 |
|
|
9.3.1 Verbindung von Navigation und Inhalt |
197 |
|
|
9.3.2 Verbindung zwischen Navigation und Template |
201 |
|
|
9.3.3 Verbindung von Inhalt und Komponenten |
202 |
|
|
9.3.4 Verbindungen von Komponenten untereinander |
203 |
|
|
9.3.5 Verbindung zwischen Modul und Komponente |
204 |
|
|
10 Entwicklungsgrundlagen und allgemeine Programmierkonzepte |
208 |
|
|
10.1 Kurze Einführung in UML |
209 |
|
|
10.1.1 Use Case oder Nutzfall-Diagramme |
209 |
|
|
10.1.2 Seitenablauf mit Zustandsdiagramm |
211 |
|
|
10.1.3 Klassendiagramme |
212 |
|
|
10.2 Softwareentwicklungsrichtlinien von Joomla! |
214 |
|
|
10.2.1 Grundlegende Richtlinien für den Einsatz der Entwicklungssprache |
216 |
|
|
10.2.2 Namenskonventionen innerhalb von Joomla! |
219 |
|
|
10.2.3 Namenskonventionen für Klassen, Attribute usw. |
221 |
|
|
10.2.4 Kontrollstrukturen innerhalb von PHP |
222 |
|
|
10.2.5 Deklarationen und Aufrufe von Funktionen/Methoden |
225 |
|
|
10.2.6 Absicherung von Skripten vor unerwünschtem Zugriff |
227 |
|
|
10.2.7 Bereits verwendete Konstanten |
229 |
|
|
10.3 Genutzte Entwicklungspatterns |
231 |
|
|
10.3.1 Model/View/Controller (MVC) |
232 |
|
|
10.3.2 Fabrik und Singletons |
241 |
|
|
10.3.3 Nachrichten & Beobachter (Events & Observer) |
246 |
|
|
11 Einstieg in das Framework |
252 |
|
|
11.1 Übersicht der Bibliotheken |
252 |
|
|
11.2 Bibliotheken aus dem Joomla!-Projekt |
253 |
|
|
11.2.1 Allgemeine Pakete |
254 |
|
|
11.2.2 Unterstützende Pakete |
254 |
|
|
11.2.3 Joomla!-Anwendungspakete |
256 |
|
|
11.3 Allgemeine Funktionen des Frameworks |
257 |
|
|
11.3.1 JFactory, die Fabrik von Joomla! |
259 |
|
|
11.3.2 JLoader, automatisches Laden von Klassen |
259 |
|
|
11.3.3 JRoute & JRouter für sprechende URLs und Suchmaschinenoptimierung |
262 |
|
|
11.3.4 Mehrsprachige Texte, UTF-8 und Leserichtung |
264 |
|
|
11.3.5 Versionsprüfung und Abstimmung |
269 |
|
|
11.4 Unterstützung für allgemeine Aufgaben |
270 |
|
|
11.4.1 Basisklassen |
270 |
|
|
11.4.2 Fehlerhandling und Logging |
271 |
|
|
12 Erstellung von HTML-Dialogen |
278 |
|
|
12.1 HTML-spezifische Elemente |
279 |
|
|
12.1.1 JHTML-Basismethoden |
280 |
|
|
12.1.2 Behavior |
282 |
|
|
12.1.3 Content |
288 |
|
|
12.1.4 E-Mail |
289 |
|
|
12.1.5 Form |
290 |
|
|
12.1.6 Grid |
291 |
|
|
12.1.7 Image |
293 |
|
|
12.1.8 List |
295 |
|
|
12.1.9 Menu |
298 |
|
|
12.1.10 Select |
298 |
|
|
12.2 Joomla!-spezifische HTML-Komponenten |
301 |
|
|
12.2.1 Seitenbereiche |
301 |
|
|
12.2.2 Seitenaufteilung |
302 |
|
|
12.2.3 Editor-Integration |
305 |
|
|
12.2.4 Parameter-Darstellung |
305 |
|
|
12.2.5 Toolbar-Darstellung |
308 |
|
|
13 Details zu den unterstützenden Paketen |
318 |
|
|
13.1 Versand von E-Mails |
319 |
|
|
13.2 Dateisystem |
320 |
|
|
13.2.1 Übersicht der Dateisystem-Implementierung |
322 |
|
|
13.2.2 Zugriffe auf Dateien und Verzeichnisse |
322 |
|
|
13.2.3 Zugriffe auf komprimierte Archive |
327 |
|
|
13.3 Spezielle Clients |
327 |
|
|
13.4 Systemumgebung |
328 |
|
|
13.5 Pakete zur Unterstützung von Anwendungen |
333 |
|
|
13.5.1 Nutzen strukturierter Daten |
333 |
|
|
13.5.2 Filtern von Ein- und Ausgaben |
335 |
|
|
13.5.3 Eventhandling und Integration von Plugins |
337 |
|
|
13.5.4 Verwenden von Caches |
341 |
|
|
13.5.5 Verwenden von Session-Informationen |
343 |
|
|
14 Das Präsentationsframework |
346 |
|
|
14.1 Allgemeine Funktionsweise |
347 |
|
|
14.1.1 Einfluss der Anwendung auf die Präsentation |
348 |
|
|
14.1.2 Nutzung eines zentralen Ausgabedokumentes |
350 |
|
|
14.1.3 Generierung der Ausgabe |
354 |
|
|
14.2 Allgemeiner Aufbau der Templates |
356 |
|
|
14.2.1 Die Template-Datei |
358 |
|
|
14.2.2 Übersicht der Standard-CSS-Klassen |
359 |
|
|
14.2.3 Zusätzliche XHTML-Tags innerhalb eines Templates |
363 |
|
|
14.2.4 Parameter und Manifestdatei eines Templates |
364 |
|
|
14.3 Präsentationen von Erweiterungen |
366 |
|
|
14.3.1 Definition eines Views |
367 |
|
|
14.3.2 Ablauf der Verarbeitung in einer Erweiterung |
371 |
|
|
14.3.3 Sprachdateien von Templates |
372 |
|
|
14.4 Überschreiben der Präsentation im Template |
373 |
|
|
15 CMS-Erweiterungen im Framework |
378 |
|
|
15.1 Allgemeine Funktionsweise der Erweiterungen |
380 |
|
|
15.1.1 Installation von Erweiterungen |
382 |
|
|
15.1.2 Aufbau von Erweiterungen |
385 |
|
|
15.2 Integrierte Komponenten |
386 |
|
|
15.2.1 Manifest für Komponenten |
389 |
|
|
15.2.2 Individuelle Konfiguration einer Komponente |
393 |
|
|
15.3 Module als Gestaltungselemente |
393 |
|
|
15.3.1 Installation Manifestdatei |
394 |
|
|
15.3.2 Dynamisches Design |
396 |
|
|
15.3.3 Integration von Modulen |
396 |
|
|
15.4 Plugins für die Erweiterungen |
397 |
|
|
15.4.1 Installation Manifestdatei |
397 |
|
|
15.4.2 Integration des Plugins |
399 |
|
|
15.4.3 Beispiele für Plugins |
400 |
|
|
15.5 Besondere Typen von Erweiterungen |
402 |
|
|
15.5.1 Brücken zu anderen Lösungen (z. B. Galeriesystem) |
402 |
|
|
15.5.2 Komplette Erweiterungen der Systemfunktionalität |
403 |
|
|
16 Die Datenbank von Joomla! |
404 |
|
|
16.1 Datenbankserverunterstützung |
405 |
|
|
16.1.1 Nutzung von MySQL vs. MySQLi |
405 |
|
|
16.1.2 Unterstützung weiterer Datenbanken |
405 |
|
|
16.2 Joomla! Entity Relationship Modell |
405 |
|
|
16.2.1 Joomla! Core-System-Tabellen |
407 |
|
|
16.2.2 Core- und Framework-Tabellen |
408 |
|
|
16.2.3 CMS-Erweiterungen |
411 |
|
|
16.3 Joomla!-Datenbank-Abstraktionsschicht |
413 |
|
|
16.3.1 Grundaufbau der Datenbankschicht |
414 |
|
|
16.3.2 Grundlegende Datenbankzugriffe |
415 |
|
|
16.3.3 Integration von Datenbanktabellen |
421 |
|
|
16.3.4 Verbindung zwischen Datenbank und der Anwendung |
424 |
|
|
17 Zusätzliche Managementpakete |
428 |
|
|
17.1 Benutzersteuerung und Autorisierung |
428 |
|
|
17.1.1 Authentifizierung eines Benutzers |
430 |
|
|
17.1.2 Prüfung der Benutzerrechte |
432 |
|
|
17.2 Installation von Erweiterungen |
436 |
|
|
17.3 Zusätzliche Funktionen |
437 |
|
|
17.4 Konfiguration des Systems |
438 |
|
|
18 Sichere Webentwicklung |
440 |
|
|
18.1 Grundthematik von Angriffen |
441 |
|
|
18.1.1 Code Injections |
442 |
|
|
18.1.2 SQL Injections |
446 |
|
|
18.1.3 Cross-Site-Scripting (XSS)-Angriffe |
448 |
|
|
18.2 Spezielle Techniken innerhalb des Frameworks |
449 |
|
|
18.3 Serverkonfiguration und Sicherheit |
450 |
|
|
18.3.1 Serverauswahl und -setup |
450 |
|
|
18.3.2 Konfiguration von Joomla! |
453 |
|
|
18.3.3 Sicherheit bei der Nutzung von Erweiterung |
455 |
|
|
Teil IV Projektorganisation und Fertigstellung |
456 |
|
|
19 Entwicklungsmethoden |
458 |
|
|
19.1 Planen und Ziele setzen |
458 |
|
|
19.1.1 Einfaches Planen |
459 |
|
|
19.1.2 Einhalten von Zielen |
460 |
|
|
19.1.3 Ziele selbst überprüfen |
460 |
|
|
19.2 Extreme oder Agile Programming |
460 |
|
|
19.2.1 Produktiver Nutzen |
461 |
|
|
19.2.2 Geplante Iterationen |
462 |
|
|
19.2.3 Test-getriebene Entwicklung |
463 |
|
|
19.3 Entwicklungsmethoden des Joomla! Core Teams |
464 |
|
|
19.3.1 Entwicklungszyklus von Joomla! |
464 |
|
|
19.3.2 Kommunikation innerhalb und mit dem Core Team |
465 |
|
|
19.3.3 Qualität und Sicherheit |
466 |
|
|
19.3.4 Entwicklung neben dem Beruf |
467 |
|
|
19.3.5 Entscheidungsprozesse |
467 |
|
|
19.3.6 Bei Joomla! mitmachen |
468 |
|
|
20 Joomla! Forge als Entwicklungsplattform |
470 |
|
|
20.1 Umgang mit Feedback |
471 |
|
|
20.2 Projektverwaltung in JoomlaCode |
471 |
|
|
20.2.1 Einrichten eines Projektes |
472 |
|
|
20.2.2 Einladen von neuen Entwicklern |
473 |
|
|
20.2.3 Berechtigungen innerhalb des Projektes |
474 |
|
|
20.3 Projektarbeit mit Forge |
477 |
|
|
20.3.1 Aktuelle Nachrichten |
477 |
|
|
20.3.2 Verwalten der Tracker |
478 |
|
|
20.3.3 Dokumentenverwaltung |
482 |
|
|
20.3.4 Quellcodeverwaltung (SVN) |
483 |
|
|
20.3.5 Verwalten der Diskussionsforen |
485 |
|
|
20.3.6 File Release System |
487 |
|
|
20.3.7 Dokumentationsplattform (Wiki) |
489 |
|
|
21 Testen |
492 |
|
|
21.1 Grundansätze für das Testen |
492 |
|
|
21.1.1 Testdokumentation |
492 |
|
|
21.1.2 Unit Tests |
493 |
|
|
21.1.3 GUI-Validierung und -Tests |
494 |
|
|
21.1.4 Automatische Tests |
494 |
|
|
21.2 Unit Tests innerhalb von Joomla! |
495 |
|
|
21.2.1 Das Test-Framework |
496 |
|
|
21.2.2 Aufbau einer Testumgebung |
498 |
|
|
21.2.3 Integration erster Tests |
499 |
|
|
21.2.4 Aufruf der Tests von der Kommandozeile |
504 |
|
|
22 Fertigstellung |
506 |
|
|
22.1 Release-Planung |
507 |
|
|
22.1.1 Ein fertiges Release |
508 |
|
|
22.2 Dokumentation |
510 |
|
|
22.2.1 Allgemeine Dokumentation |
510 |
|
|
22.2.2 Technische Dokumentation |
511 |
|
|
22.2.3 API-Dokumentation mit phpDocumentor/docBuilder |
512 |
|
|
22.3 Übersetzungen |
520 |
|
|
22.3.1 Umgang mit anderen Sprachen |
520 |
|
|
22.3.2 Allgemeine Struktur der Sprachdateien |
523 |
|
|
22.3.3 Einbindung von Textausgaben in den Quellcode |
524 |
|
|
22.3.4 Organisation der Übersetzer |
525 |
|
|
22.4 Zusammenstellung eines Joomla!-Paketes |
525 |
|
|
22.4.1 Aufbau eines Joomla!-Paketes |
525 |
|
|
22.4.2 Verzeichnis- und Dateistruktur |
526 |
|
|
22.4.3 Nutzung der Versionskontrolle in Verbindung mit den Paketen |
527 |
|
|
23 Lizenzen und Vermarktung |
528 |
|
|
23.1 Grundverständnis zu Rechten und Lizenzen |
528 |
|
|
23.1.1 Grundeigenschaften von Open-Source-Lizenzen |
529 |
|
|
23.1.2 Überblick weiterer Eigenschaften von OS-Lizenzen |
529 |
|
|
23.2 Open-Source-Lizenzen und ihre Bedeutung |
530 |
|
|
23.2.1 Nutzung von Open Source im Unternehmen |
531 |
|
|
23.3 Mischung zwischen kommerziellen und freien Lizenzen |
531 |
|
|
23.3.1 Lite- und Pro-Versionen unter Open Source |
532 |
|
|
23.4 Anerkennungen und Arbeit verschiedener Entwickler |
532 |
|
|
23.4.1 Copyright- und Lizenzvereinbarungen |
533 |
|
|
23.5 Kommerzielle Erweiterungen und ihre Bedeutung |
534 |
|
|
23.5.1 Lizenzabgrenzung für kommerzielle Erweiterungen |
535 |
|
|
Stichwortverzeichnis |
538 |
|