Clemens Gull Know-how ist blau. Joomla!-Extensions mit PHP entwickeln > Erweitern Sie das freie Content-Management-System > Das Joomla!-Framework verstehen und anwenden > PHP- und Datenbank-Grundwissen für eigene Entwicklungsprojekte Module, Plugins und Komponenten nach eigenen Vorstellungen programmieren FRANZIS
11 Inhaltsverzeichnis 1 Einführung... 15 1.1 Was ist Joomla?... 15 1.1.1 Content-Management-System... 15 1.1.2 Open-Source-Software... 16 1.2 Der Aufbau von Joomla... 17 1.2.1 Die Datenbank von Joomla... 17 1.2.2 Der Core von Joomla... 17 1.2.3 Erweiterungen von Joomla... 18 1.2.4 Die Perspektiven in Joomla... 19 1.2.5 Das Framework von Joomla... 19 2 Die Arbeitsumgebung... 21 2.1 Die notwendigen Werkzeuge und Produkte... 22 2.1.1 Server-Softwarepaket für Windows-Systeme... 22 2.1.2 Server-Softwarepakete für Mac OS X... 22 2.1.3 Installation für Windows-Systeme... 23 2.1.4 Installation für Systeme unter Mac OS X... 33 2.1.5 Einrichten der Entwicklungsumgebung... 49 2.1.6 Einrichten des Webbrowsers... 59 2.1.7 Joomla lokal verwenden... 63 3 Entwickeln mit Joomla... 75 3.1 Start der Entwicklung... 75 3.1.1 Was muss man unbedingt wissen?... 75 3.1.2 Die Änderung vorbereiten... 76 3.2 Die Kontaktverwaltung anpassen... 77 3.2.1 Das Anpassen der Datenbank... 77 3.2.2 Die bestehende Komponente kopieren... 85 3.2.3 Die Dateien der Komponenten verändern... 87 3.3 Noch mehr Hintergrundwissen zum Programmieren...121 3.3.1 Entscheidungen in PHP...121
12 Inhaltsverzeichnis 3.3.2 Der Blockoperator...122 3.3.3 Die else-anweisung in PHP...123 3.3.4 Die elseif-anweisung...124 3.3.5 Schleifen in PHP...127 3.3.6 Was sind Arrays?...132 3.3.7 Eine spezielle Schleife für Arrays...134 3.3.8 Die switch-anweisung...137 3.3.9 Den restlichen Code von mycontact anpassen...143 3.3.10 Anpassungen im Frontend von mycontact...145 3.3.11 Die Referenzen auf die Datenbanktabellen ersetzen...147 3.3.12 Die Sprachdateien anpassen...148 3.4 Die betroffenen Klassen von Joomla erweitern...149 3.4.1 Anpassen der Datenbankklassen...151 3.5 Die Präsentation der Erweiterung anpassen...156 3.5.1 Das Backend anpassen...156 3.5.2 Das Frontend anpassen...162 3.5.3 Anpassen der Sprachdateien...164 3.6 Abschließende Tests der Kontaktverwaltung...165 3.6.1 Anpassen der Suche...165 4 Joomla unter der Lupe... 167 4.1 Die Grundidee eines CMS...167 4.1.1 Die Unabhängigkeit der Darstellung...169 4.1.2 Die Wiederverwendbarkeit von Information...169 4.2 Das Joomla-Framework...169 4.2.1 Das Framework im Überblick...170 4.2.2 Die Pakete von Joomla...171 4.2.3 Basisfunktionen des Frameworks...177 4.2.4 Hilfreiche Klassen von Joomla...184 4.3 JHTML HTML mit Joomla...187 4.3.1 Basismethoden von JHTML...188 4.3.2 Elemente mit JavaScript einfügen...190 4.3.3 Die E-Mail-Adresse verstecken...196 4.4 Die JRequest-Klasse...197 5 Zusätzliche Erweiterungen entwickeln... 199 5.1 Eine neue Komponente...199 5.1.1 Die Eckdaten zur Komponente...199 5.1.2 Die Datenbank vorbereiten...200
Inhaltsverzeichnis 13 5.1.3 Die Verzeichnisstruktur anlegen...205 5.1.4 Das Backend erstellen...206 5.1.5 Das Frontend für mybooks...244 5.1.6 Die Metadaten für die Komponente...255 5.1.7 Das Installationspaket...257 5.2 Ein neues Modul für unsere Komponente...264 5.2.1 Vorbereitung zur Entwicklung...264 5.2.2 Eintragen des Moduls in die Datenbank...265 5.2.3 Erstellen des Moduls...266 5.2.4 Das Installationspaket für das Modul erstellen...271 5.2.5 Das neue Modul testen...272 5.3 myweather ein Mashup als Modul...273 5.3.1 Die Verzeichnisstruktur für myweather...273 5.3.2 Die Metadaten für myweather...273 5.3.3 myweather in die Datenbank eintragen...275 5.3.4 Die Steuerdatei für myweather...277 5.3.5 Die Vorlage (Template) von myweather...278 5.3.6 Der Helper von myweather...278 5.3.7 Das neue Modul testen...288 5.3.8 Das Installationspaket erstellen...289 5.4 Ein Plugin für mybooks...290 5.4.1 Die XML-Datei für das Plugin...290 5.4.2 Das Such-Plugin...290 5.4.3 Das Plugin in die Datenbank eintragen...294 5.4.4 Die Suche testen...294 5.4.5 Das Installationspaket erstellen...294 6 Softwareentwicklung... 295 6.1 Konventionen für die Programmierung in Joomla...295 6.1.1 Allgemein...295 6.1.2 Methoden...295 6.1.3 Variablen...296 6.1.4 Konstanten...296 6.1.5 Strings...296 6.1.6 Arrays...297 6.1.7 Klassen...298 6.1.8 Kontrollanweisungen...300 6.1.9 Dokumentation...301 6.1.10 Dateiformat...302
14 Inhaltsverzeichnis 6.1.11 Referenzen...302 6.2 UML Universal Modeling Language...303 6.3 OOP Object Oriented Programming...303 6.3.1 Objekte...304 6.3.2 Begriffe...304 6.3.3 Klassen...305 6.4 Entwurfsmuster in der Softwareentwicklung...307 6.4.1 Entwurfsmuster...307 6.4.2 Das MVC-Entwurfsmuster...308 6.4.3 Das Factory-Entwurfsmuster...310 6.4.4 Das Singleton-Entwurfsmuster...311 6.4.5 Koppelung...311 7 Anhang... 313 7.1 Eclipse auf UTF-8 umstellen...313 7.1.1 Die Datei eclipse.ini auf Windows-Systemen...313 7.1.2 Die Datei eclipse.ini auf Apple-Systemen...313 7.1.3 Die Datei eclipse.ini anpassen...314 7.2 Zahlen-, Datums- und Zeitformate in PHP...315 7.2.1 Formate für die Ausgabe...315 7.2.2 Datums- und Zeitformate...315 7.3 Zugriffskontrolle von Joomla...316 Stichwortverzeichnis... 325
15 1 Einführung 1.1 Was ist Joomla? Bevor wir uns mit der Programmierung zu Joomla auseinandersetzen, müssen wir uns ein wenig mit den Grundlagen dieses Systems beschäftigen. Übrigens: Die Lautumschreibung»Joomla«entstammt eigentlich der arabischen Sprache und wird dort in etwa»jumla«geschrieben. Dieses Wort kann mit»das Ganze«oder»als Ganzes«übersetzt werden. Damit ist auch der Grundgedanke des Systems in seinem Namen definiert: Es stellt nicht den Produktgedanken in den Vordergrund, sondern den der gesamten Entwicklergemeinschaft, die daran beteiligt ist. 1.1.1 Content-Management-System Diese Art von Anwendungen für das World Wide Web stellt einen grundlegenden Gedanken für Websites in den Vordergrund: Über die Jahre hat sich nämlich herausgestellt, dass es eine grundlegende Trennung bei Webseiten gibt nämlich die Trennung zwischen dem Inhalt selbst und der»auslieferung«des Inhalts. Am Anfang standen statische Webseiten, welche Inhalt, Funktionalität und auch Design in einem enthielten. Jeder, der diese klassischen Seiten entwickelt hat und auch pflegen muss, kennt die damit verbundenen Schwierigkeiten. Insbesondere der Inhalt wird dabei oft unterschätzt. Denn dieser Bereich ist sehr dynamisch und bedarf der regelmäßigen Aktualisierung, damit eine Website auf Dauer interessant bleibt. Besonders die Vermischung von Inhalt und Layout war in der Entwicklung von Webpublikationen immer wieder ein Problem. Erst in den 1990er-Jahren wurde mit der Definition von CSS 7 (Cascading Style Sheets) eine Trennung möglich. Ende der 90er- Jahre, mit der Einführung von Programmiersprachen wie PHP und Java, wurde auch die Trennung von Funktionalität und Inhalt weiter vorangetrieben. Entscheidend für diese Entwicklung war der Schritt, die Inhalte komplett zu separieren und in einer Datenbank zu speichern. Dadurch entwickelten sich mit der Zeit Content- Management-Systeme. Diese orientierten sich an bekannten Arbeitsabläufen, nämlich den bereits existierenden Redaktionssystemen in den Verlagen. Die zentrale Aufgabe 7 Cascading Style Sheets, eine Formatierungssprache unter anderem für HTML
16 Kapitel 1: Einführung dieser Systeme war das gemeinsame Bearbeiten und Strukturieren von Inhalten für Zeitungen und Magazine. Durch die Speicherung des reinen Inhalts, ohne jede Formatierung, waren diese auch nicht mehr an ein Ausgabemedium gebunden. Dadurch konnten sie für Zeitungen, Websites oder Werbung gleichermaßen verwendet werden. Die Autoren waren damit klar im Vorteil, da Inhalte nicht mehrfach erstellt beziehungsweise gepflegt werden mussten. Mit der Entwicklung des World Wide Web und hier besonders des interaktiven Web beziehungsweise des Web 2.0 wurden neue Formen der Veröffentlichung immer wichtiger, denken wir nur an die sozialen Netzwerke oder auch an Blogs. Dadurch wurden immer speziellere Formen von Content-Management-Systemen geschaffen. Heute gibt es mehr als 1000 verschiedene Lösungen im Bereich der CMS 8. Sie unterscheiden sich nicht nur in der zugrunde liegenden Technologie, den abgebildeten Arbeitsabläufen oder der Komplexität, sondern auch in der Art der Lizenz, unter der sie vertrieben werden. 1.1.2 Open-Source-Software Der Einsatz von Open-Source-Software hat verschiedene Vor- und Nachteile, welche teilweise sehr philosophisch und auch fanatisch diskutiert werden. Für uns ist hier aber der praktische Nutzen von Bedeutung. Denn auch Joomla unterliegt einer Open- Source-Lizenz. Eine der bekanntesten ist die GPL 9, welche auch für Joomla gilt. Im Rahmen dieser Lizenz wurde unter anderem definiert, dass der Quellcode frei zugänglich sein muss, dass der Code jederzeit verändert werden darf, dass die Software frei (kostenlos) benutzt werden darf, dass der Quellcode weitergegeben werden darf und dass alle Weiterentwicklungen und Änderungen der ursprünglichen Software derselben Lizenz unterliegen. Dadurch ergibt sich für uns der große Vorteil, dass wir die Software ändern und unseren Bedürfnissen anpassen können und dies sogar explizit dürfen. Für Joomla selbst ist ebenfalls ein großer Vorteil zu sehen. Da die Software frei ist und auch die Entwickler keine weiteren Rechte an ihrer Arbeit ableiten können, ist die Weiterentwicklung gesichert. Denn es können jederzeit neue Entwickler in das Team aufgenommen werden, ohne dass weitere Rechte verletzt oder abgegolten werden. 8 siehe http://www.cmsmatrix.org/ 9 siehe http://www.opensource.org/licenses/gpl-2.0.php
1.2 Der Aufbau von Joomla 17 1.2 Der Aufbau von Joomla Vielleicht haben Sie bereits als Anwender mit Joomla gearbeitet, sicher haben Sie es aber schon das eine oder andere Mal gesehen, wenn vielleicht auch nicht bewusst. Denn viele Websites beruhen auf diesem Content-Management-System. Nun beschäftigen wir uns aus der Sicht des Entwicklers mit dieser Software. 1.2.1 Die Datenbank von Joomla Die Datenbank mit allen Einstellungen und Inhalten für eine Website kann sicher als der zentrale Punkt des CMS bezeichnet werden. Natürlich sind nicht alle Daten in der Datenbank enthalten. Wenn zum Beispiel Daten von anderen Websites eingebunden werden, werden sie außerhalb der Datenbank abgelegt. Das gilt auch für Bilddateien, Audio- und Videodaten und andere Dokumente (zum Beispiel PDF-Dateien). Die Datenbank selbst ist in Tabellen untergliedert, welche die verschiedenen Inhalte strukturiert enthalten. Der Entwickler stellt sich als Erstes die Frage»Welche Daten muss ich in der Datenbank speichern, und wie sind sie mit anderen Daten (Tabellen) verbunden?«. Die Antwort auf diese Frage ergibt dann eine Tabellenstruktur. Diese Arbeit und Überlegung werden wir im Kapitel 3 genauer kennenlernen und auch nachvollziehen. Momentan unterstützt Joomla nur ein Datenbanksystem: die freie Datenbank MySQL. Daher werden wir auch im nächsten Kapitel diesen Datenbankserver und eine passende Verwaltungssoftware installieren. In ihr werden alle Tabellen von Joomla selbst und auch alle Erweiterungen gespeichert. 1.2.2 Der Core von Joomla Der Core (also der Kern) von Joomla ist die wichtigste Komponente der Software. Er besteht im Großen und Ganzen aus verschiedenen PHP-Skripten. Diese definieren die Klassen, Funktionen und Variablen, welche vom CMS benutzt werden. Dazu gehören zum Beispiel die Ausgaben als HTML-Datei, damit der Benutzer die Daten auch sehen kann. Wenn der User einen Artikel drucken will, greift eine andere Komponente des Core-Systems ein: die Ausgabe des Artikels als PDF-Datei. Genauso übernimmt der Core die automatische Prüfung von übergebenen Werten. Damit ist gemeint, dass der Grundsatz»Vertraue nie dem Anwender«von Joomla automatisch berücksichtigt wird. Jede Eingabe in ein Formular und auch jeder Wert, welcher von außen in das System eingebracht wird, durchläuft einen automatischen Sicherheitscheck. Natürlich ist das Core-System noch für viele andere Dinge zuständig. Es bildet die Grundlage für das ganze CMS und auch die Komponenten, Module, Plugins und Vorlagen.
18 Kapitel 1: Einführung 1.2.3 Erweiterungen von Joomla Generell können wir alle Softwarekomponenten, welche nicht in der Standardauslieferung enthalten sind, als Erweiterungen bezeichnen. Wenn Sie das CMS aus dem Netz herunterladen, wird es in einer funktionierenden und abgestimmten Version zur Verfügung gestellt. Der große Vorteil der Anwendung ist jedoch gerade die Erweiterbarkeit und damit die Möglichkeit zur Anpassung des Systems. Damit kann eigentlich jeder Wunsch an das System erfüllt werden. Der allgemeine Begriff»Erweiterung«wird in Joomla aber in fünf Gruppen eingeteilt: Modul: Eine kleinere Softwarekomponente, welche in die Website eingebaut wird. Module sind nicht sehr komplex und erzeugen keinen eigenen Eintrag im Administrationsbereich. Sie werden im Modulmanager des Administrations-Interfaces zusammengefasst. Mithilfe von Modulen werden oft Daten von entfernten Webservern angezeigt. Dazu zählen zum Beispiel RSS-Feeds 10 oder Wetterdaten. Komponente: Eine abgeschlossene, unabhängige Softwarekomponente von Joomla. Sie ist umfangreich und bietet Funktionen für die Administration wie auch für die Website selbst. Sie integriert sich als eigener Menüpunkt in die Administration. Plugin: Diese Erweiterung ist»dynamisch«, sie reagiert auf Ereignisse während des Programmablaufs. Plugins dienen generell der Verarbeitung von Ausgaben, bevor sie auf der Website angezeigt werden. So können wir beispielsweise automatisch Bilder einfügen oder Hyperlinks hervorheben. Durch ihre Vielseitigkeit nehmen Plugins im Joomla-Konzept eine herausragende Stellung ein. Verwaltet werden sie in der Administration im Plugin-Manager. Vorlagen (Templates): Dies sind»optische«erweiterungen. Sie stellen ein Grundgerüst für das Aussehen der Website und auch des Administrationsbereichs dar. Auch diese Erweiterung wird über einen eigenen Vorlagenmanager im Administrationsbereich verwaltet. Es ist auch möglich, dass wir eine eigene Vorlage für die Website und eine zweite für das Aussehen des Administrationsbereichs installieren. Sprache: So eigenartig es klingt: Auch die einzelnen Sprachen sind als Erweiterungen des Joomla-Core-Systems zu sehen, da Joomla in der Standardauslieferung nur auf Englisch verfügbar ist. Sie werden wie alle anderen Erweiterungen installiert, denn 10 Really Simple Syndication: eine Technik beziehungsweise ein Datenformat, um Inhalte von Websites zu abonnieren
1.2 Der Aufbau von Joomla 19 die Übersetzungen liegen in einer Gruppe von UTF-8 11 -codierten Dateien vor. Die Verwaltung erfolgt auch im Administrationsbereich durch den Sprachenmanager. 1.2.4 Die Perspektiven in Joomla Da das CMS aus verschiedenen Gesichtspunkten betrachtet werden kann, müssen wir uns auch mit den im Folgenden beschriebenen Fachbegriffen beschäftigen und sie beherrschen. Besonders für die Softwareentwicklung mit Joomla ist dies notwendig, da eine klare Trennung zwischen den einzelnen Bereichen herrscht. Das Backend Das Backend ist der Bereich der Administration, hier wird das System gewartet, und alle Komponenten werden installiert und konfiguriert. Im Backend werden das Aussehen und der Inhalt der Website festgelegt und angepasst. Im Administrationsbereich werden die Artikel und die Menüs erfasst. Da wir uns hier sozusagen im Herzen des Systems befinden, ist dieser Bereich auch speziell geschützt: Nicht jeder Benutzer erhält hierfür einen Zugang. Das Frontend Dies ist der Bereich, der öffentlich sichtbar ist. Jeder Benutzer kann hier zugreifen und sich den Inhalt der Website ansehen. Hier kommen die Vorlagen (Templates), welche das Aussehen bestimmen, zum Tragen. Aber der Benutzer, der die Seite besucht, kann nichts am System selbst verändern. 1.2.5 Das Framework von Joomla Dies ist die unterste Ebene, quasi die Basis des Content-Management-Systems. Früher war dieses Framework eine Sammlung von PHP-Dateien, welche allgemeine Funktionen für Joomla bereitstellten. Durch die Weiterentwicklung wurde es optimiert und ist unabhängig geworden. Heute können wir es grundsätzlich sogar für ein eigenes CMS einsetzen und als Basis verwenden. Prinzipiell stellt das Framework Funktionen für das gesamte CMS zur Verfügung. Es ist beispielsweise nicht sinnvoll, den Zugriff auf das Dateisystem bei jedem Modul neu zu erstellen oder Zugriffe auf die Datenbank in jeder Komponente neu zu programmieren. Dafür gibt es das Framework: Es stellt diese allgemeinen Funktionen zur Verfügung. Wir können beim Erstellen eines Moduls oder einer Komponente einfach auf diese Funktionen zugreifen und müssen uns nicht um die Feinheiten kümmern. 11 Unicode Transformation Format 8-Bit, eine sprach- und schriftunabhängige Codierung von Zeichen
325 Stichwortverzeichnis ()... 157 autoload... 184 construct... 155 destruct... 156 A Abstraktion... 304 AND... 109 Apache... 22 Aptana Studio erweitern... 56 installieren... 53 array (Befehl)... 132 Array... 102, 132, 286 assoziativ... 133 Element... 133 erstellen... 132 Hash... 133 nummerisch... 132 ASCII... 101, 302 B Backend... 19, 72, 77, 88, 145, 164, 241 Behavior calendar... 190 caption... 191 combobox... 191 modal... 192 switcher... 193 tooltip... 194 tree... 195 Benutzerkontensteuerung... 26, 27, 29, 55 Bindung frühe... 305 späte... 305 Blockoperator... 122 BooksController display... 231 BooksControllerBook... 233 construct... 233 cancel... 238 edit... 234 publish... 235 remove... 235 save... 234 BooksModelBook... 210 delete... 214 getdata... 211 setid... 210 store... 213 BooksModelBooks... 216, 244 _buildquery... 217 getdata... 217 BooksViewBook... 226 display... 226 BooksViewBooks... 219, 247 display... 219, 247 Boolean... 102 break... 137 by Reference... 209 by Value... 209 C camelcase... 102, 295 case... 137
326 Stichwortverzeichnis class... 116, 153 CMS... 17 com_mybooks... 200 com_mycontact... 203 Content-Management-System... 15, 75 Controller... 309 count... 215, 222 CSS... 15 curl... 280 curl_close... 282 curl_exec... 281 curl_init... 280 curl_setopt... 280 D Datei authorization.php... 184 book.php... 232 books.php... 244 com_mybooks.zip... 263 config.xml... 256 contacts.xml... 165 Controller... 249 controller.php... 185, 231 default.php... 247, 270, 278 eclipse.ini... 313 form.php... 228 helper... 278 helper.php... 266, 269 index.html... 206, 238, 265, 273 install.sql... 261 metadata.xml... 255 mod_mybooks.php... 269 mod_mybooks.xml... 270 mod_mybooks.zip... 271 mod_myweather.php... 277 mod_myweather.xml... 274 mod_myweather.zip... 289 mybooks.php... 207, 241 mybooks.php... 250, 290 mybooks.xml... 255 mybooks.xml... 255, 257, 263, 290 mycontact.xml... 165 plg_mybooks.zip... 294 router.php... 186, 187 uninstall.sql... 263 Datenbank... 17 Datenfeld hinzufügen... 79 Datensatz hinzufügen... 82 installieren... 65 Kollation... 80 MySQL... 17 Tabelle kopieren... 78 Tabelle neuanlegen... 201 Datenfeld hinzufügen... 79 Kollation... 80 Datensatz hinzufügen... 82 Datentyp... 102 defined... 208 Dekremtent... 130 Design Pattern... 307 Design-Time... 305 dirname... 269 Double... 102 E echo... 103 Eclipse... 21, 50, 264 Aptana Studio installieren... 53 Arbeitsbereich... 92 Arbeitsbereich festlegen... 52 Galileo... 50 index.html... 94 jquery... 56 Perspektive... 58 PHP... 56 Projekt anlegen... 90 Projekt-Explorer... 95, 205 Prototype... 56 Scriptaculous... 56 Sprachpaket... 50 Sprachpaket installieren... 51 Suchfunktion... 118
Stichwortverzeichnis 327 Eigenschaft... 154, 307 else... 124 elseif... 124 email cloaking... 196 empty... 212 endforeach... 134 endif... 125 Endlosschleife... 128 endwhile... 127 Entscheidung... 137 Entwicklungsstil Arrays... 297 camelcase... 295 default-anweisung... 301 Dokumentation... 298, 301 Einrückungen... 295 if-anweisung... 300 Klassen... 298 Kommentare... 298 Konstantennamen... 296 Kontrollanweisungen... 300 Methodennamen... 295 Strings... 296 switch-anweisung... 300 Variablennamen... 296 Entwurfsmuster... 149, 307 Controller... 308, 309 Factory... 177, 310, 311 Model... 308, 309 Model/View/Controller... 149 MVC... 149, 231, 244, 308 Observer... 309 Singleton... 311 View... 308, 309 explode... 237 extends... 158 F Factory-Entwurfsmuster... 177, 310 file_exists... 250 Firefox... 21, 59 FireBug... 60 GridFox... 62 WebDeveloper... 61 Float... 102 foreach... 134, 268 foreach-schleife... 293 for-schleife... 223, 286, 287 Framework... 19, 169 Frontend... 19, 72, 77, 88, 145,... 156, 162, 199, 253 FTP... 173 function... 113 Funktion... 112 G GPL... 16 Gültigkeitsbereichsoperator... 158 H Hash-Array... 133 http.conf... 36 I if... 121 if-else... 124 implode... 237 Inkrement... 130 Installation, mybooks... 257 Installationspaket... 271, 289, 294 Instanz... 305 Integer... 102 ISO-8859-1... 284 Iteration... 127 J JApplication... 175 JApplicationHelper... 175 JArchive... 173 JArrayHelper... 172, 236 tointeger... 236 JAuthentication... 176 JAuthenticationResponse... 176 JAuthorization... 176, 317, 319
328 Stichwortverzeichnis Java... 49 Runtime Environment... 50 JBrowser... 173 JBuffer... 172 JCache... 174 JCacheStorage... 174 JClientHelper... 173 JConfig... 177 JController... 231, 233, 249 execute... 241 JDatabase... 151, 173 JDate... 172, 180 getoffset... 180 toformat... 180 JDispatcher... 174 JDocument... 175 JDocumentRenderer... 175 JEditor... 172 JError... 172, 185 geterror... 185 geterrors... 185 raiseerror... 186 raisenotice... 186 raisewarning... 186 JEvent... 174 JException... 172 JFactory... 177, 239, 267 authorize... 239 getconfig... 182 getdate... 180 getdbo... 267 getlanguage... 181 getuser... 178, 182, 239 JFile... 174 JFilterInput... 174 JFolder... 174 JFrameworkConfig... 177 JFTP... 173 JHelp... 176 JHTML... 172, 187, 190, 222 _()... 190, 191, 192, 193, 194, 195, 196 addincludepath... 188 calendar... 188 date... 188 iframe... 188 image... 189 link... 189 script... 189 stylesheet... 189 tooltip... 189 JHTMLBehavior... 190 JHTMLEmail... 196 jimport... 185, 219 JInstaller... 175 JInstallerHelper... 175 JLanguage... 176 _()... 181 exists... 181 getdefault... 181 getknownlanguages... 181 setdefault... 181 JLanguageHelper... 176 JLDAP... 173 JLoader... 184 JLog... 172 JMail... 174 JMailHelper... 174 JMenu... 175 JModel... 210, 212, 216, 217, 244 _getlist... 217 loadobject... 212 model... 234 setquery... 212 JOberservable... 171 JObject... 171 JObserver... 172 Joomla Backend... 19, 72, 77, 88, 145, 164, 241 Benutzerrechte... 64 Core... 17 Datenbank... 17 Datenbank installieren... 65 Erweiterungen... 18 Execute... 208
Stichwortverzeichnis 329 Framework... 19 Frontend... 19, 72, 77, 88, 145,... 156, 162, 199, 253 installieren... 63 Komponente... 18 Komponenten-Manager... 81 Lizenz... 75 Modul... 18 Plug-In... 18 Sprachdatei... 87 Sprache... 18 Systemtabellen... 81 Template... 18 Vorlage... 18 Zugriffskontrolle... 316 jos_components... 201 jos_modules... 265, 272, 275 jos_mybooks... 200, 217, 229, 244, 259 jos_plugins... 294 JPagination... 172 JPaginationObject... 172 JPane... 172 JPaneSliders... 172 JPaneTabs... 172 JParameter... 172 JPath... 174 JPathway... 175 JPlugin... 176 JPluginHelper... 176 JProfiler... 172 JRecordSet... 173 JRegistry... 174, 182 getvalue... 182 setvalue... 182 JRegistryFormat... 174 JRequest... 173, 197, 215, 234 checktoken... 197 get... 198 getvar... 215 publish... 240 setvar... 234 JResponse... 173 JRoute... 186 _()... 186 JRouter... 175, 186 JRouterSite... 186 JSession... 175 JSessionStorage... 175 JSimpleCrypt... 172 JSimpleXML... 172 JSimpleXMLElement... 172 JString... 172 JTable... 151, 155, 208 JTemplate... 176 JText... 157, 158, 220, 229 _... 220 _()... 157 JToolBar... 172 JToolbarHelper... 219, 227 title... 219, 227 JTree... 172 JURI... 173 JUser... 176, 182 authorize... 183 JUserHelper... 176 JView... 219, 226, 247 assignref... 220 JView... 220 K Kapselung... 154, 304 Klasse... 153, 304, 305 BooksController... 231, 249 BooksControllerBook... 233 BooksModelBook... 210 BooksModelBooks... 216, 244 BooksViewBook... 226 BooksViewBooks... 219, 247 Eigenschaft... 154 erweitern... 149 JApplication... 175 JApplicationHelper... 175 JArchive... 173 JArrayHelper... 172, 236
330 Stichwortverzeichnis JAuthentication... 176 JAuthenticationResponse... 176 JAuthorization... 176, 317, 319 JBrowser... 173 JBuffer... 172 JCache... 174 JCacheStorage... 174 JClientHelper... 173 JConfig... 177 JController... 231, 233, 249 JDatabase... 151, 173 JDate... 172, 180 JDispatcher... 174 JDocument... 175 JDocumentRenderer... 175 JEditor... 172 JError... 172, 185 JEvent... 174 JException... 172 JFactory... 177, 239, 267 JFile... 174 JFilterOutput... 174 JFolder... 174 JFrameworkConfig... 177 JFTP... 173 JHelp... 176 JHTML... 172, 187, 190, 222 JHTMLBehavior... 190 JHTMLEMail... 196 JInstaller... 175 JInstallerHelper... 175 JLanguage... 176 JLanguageHelper... 176 JLDAP... 173 JLoader... 184 JLog... 172 JMail... 174 JMailHelper... 174 JMenu... 175 JModel... 210, 212, 216, 217, 244 JObject... 171 JObservable... 171 JObserver... 172 JPagination... 172 JPaginationObject... 172 JPane... 172 JPaneSliders... 172 JPaneTabs... 172 JParameter... 172 JPath... 174 JPathway... 175 JPlugin... 176 JPluginHelper... 176 JProfiler... 172 JRecordSet... 173 JRegistry... 174, 182 JRegistryFormat... 174 JRequest... 173, 197, 215, 234 JResponse... 173 JRoute... 186 JRouter... 175, 186 JRouterSite... 186 JSession... 175 JSessionStorage... 175 JSimpleCrypt... 172 JSimpleXML... 172 JSimpleXMLElement... 172 JString... 172 JTable... 151, 155, 208 JTemplate... 176 JText... 157, 158, 220, 229 JToolBar... 172 JToolbarHelper... 219, 227 JTree... 172 JURI... 173 JUser... 176, 182 JUserHelper... 176 JView... 219, 220, 226, 247 Kapselung... 154 Konstruktor... 209 Methode... 154 modbookshelper... 267 modweatherhelper... 278 parent... 220
Stichwortverzeichnis 331 stdclass... 212 TablemyBooks... 208 TablemyContact... 153, 155 Klassenkonstruktor... 209 Kollation... 80 Kommentare, PHP... 90 Komponente anpassen... 77 Contacts... 82 kopieren... 85 Metadaten... 255 mybooks... 200, 241 mycontact... 77 Sprachdatei... 148 Verzeichnisstruktur... 205 Komponenten-Manager... 81 Konfiguration, mycontact... 88 Konfigurationsdatei Eclipse... 314 PHP... 40, 44 PHPMyAdmin... 48 Webserver... 36 Konstante FILE... 269 _JEXEC... 208 DS... 240 JPATH_COMPONENT... 240 Konstruktor... 209, 310 Koppelung... 178, 311 lose... 311 L lcfirst... 252 LDAP... 173 logische Operatoren... 109 ltrim... 285 M Mac OS X Benutzer root... 40 Benutzerrechte... 64 MySQL installieren... 43 PHP aktivieren... 35 TextWrangler installieren... 33 Webserver... 22 Webserver aktivieren... 34 Webserver testen... 34 Mashup... 199, 273 MAX OS X phpmyadmin installieren... 43 Metadaten... 255, 273 Methode... 154, 306 _... 220 _()... 157, 181, 186 construct... 233, 310 _buildquery... 217 _getlist... 217 addincludepath... 188 assignref... 220 authorize... 183, 239 calendar... 188 cancel... 238 check... 214 checktoken... 197 date... 188 Default... 181 delete... 214 display... 219, 226, 231, 234, 247, 249 edit... 234 execute... 241 exists... 181 get... 198, 213 getbook... 267, 269 getconfig... 182 getdata... 211, 217 getdate... 180 getdbo... 267 getdefault... 181 geterror... 185 geterrormsg... 213 geterrors... 185 getknownlanguages... 181 getlanguage... 181 getoffset... 180
332 Stichwortverzeichnis getuser... 178, 182, 239 getvalue... 182 getvar... 215, 240 getweather... 279 iframe... 188 image... 189 jimport... 219, 231 link... 189 loadobject... 212 model... 234 publish... 235 query... 237 raiseerror... 186 raisenotice... 186 raisewarning... 186 redirect... 239 registerevent... 291 remove... 235 save... 234 script... 189 seterror... 213 setid... 210 setquery... 212 setredirect... 238 setvalue... 182 setvar... 234 store... 213 stylesheet... 189 title... 219, 227 toformat... 180 tointeger... 236 tooltip... 189 mod_mybooks, installieren... 271 modbookshelper... 267 getbook... 267, 269 Model... 309 modmybooks, Parameter... 268 Modul, mybooks... 265 Module, myweather... 273 modweatherhelper... 278 getweather... 279 MVC... 149 MVC-Entwurfsmuster... 231, 244, 308 mybooks... 200, 241 Controller... 231, 249 Installationspaket... 263 Model... 206, 244 Parameter... 271 Plug-In... 290 Verzeichnisstruktur... 253 View... 218, 246 mycontact... 77 MySQL... 17, 22 Benutzer root... 66 Datenbank installieren... 65 PHPMyAdmin... 21, 33 myweather... 273 installieren... 289 Metadaten... 273 Parameter... 274, 279 Verzeichnisstruktur... 273 N new... 212 NOT... 110 NULL... 102 O Object... 102 Objekt... 153, 304 Objektoperator... 158 Observer... 309 OOP... 116, 303 Abstraktion... 304 Begriffe... 304 Eigenschaft... 307 frühe Bindung... 305 Instanz... 305 Kapselung... 304 Klasse... 304, 305 Koppelung... 311 Methode... 306 Objekt... 304 Persistenz... 305
Stichwortverzeichnis 333 Polymorphie... 305 Prototype... 304 späte Bindung... 305 Vererbung... 305 Vielgestaltigkeit... 305 Open-Source... 16 Operator Block... 122 Gültigkeitsbereich... 158 logisch... 109, 122 Operator... 158 Punkt... 105 Referenz... 158, 178, 209 unitärer Dekrement... 130 unitäter Inkrement... 130 Vergleich... 107, 122 Zuweisung... 103 OR... 109 P Paket allgemein... 171 Anwendung... 175 application... 175 base... 171 cache... 174 client... 173 database... 173 document... 175 environment... 173 error... 172 event... 174 filesystem... 173 filter... 174 html... 172 installer... 175 language... 176 mail... 174 plugin... 176 registry... 174 session... 175 template... 176 unterstützend... 173 user... 176 utilities... 172 Parameter mybooks... 271 myweather... 274, 279 parent... 220 display... 234 Persistenz... 305 PHP... 21 $this... 220 autoload... 184 FILE... 269 array... 102, 132 Array... 132, 286 Ausgabe... 103 Blockoperator... 122 bool... 102 break... 137 case... 137 class... 116, 153 construct... 155 count... 215, 222 curl... 280 curl_close... 282 curl_exec... 281 curl_init... 280 curl_setopt... 280 Datumsformat... 315 default... 137 defined... 208 destruct... 156 die()... 208 dirname... 269 double... 102 echo... 103 else... 124 elseif... 124 empty... 212 endforeach... 134 endif... 125 endwhile... 127
334 Stichwortverzeichnis Entscheidung... 121, 137 explode... 237 extends... 158 file_exists... 250 float... 102 for... 223 foreach... 134 function... 113 Funktion... 112 if... 121 implode... 237 integer... 102 Interpreter... 99 Kommentare... 90 Konfigurationsdatei... 38, 44 lcfirst... 252 logische Operatoren... 109 ltrim... 285 new... 212 NULL... 102 object... 102 php.ini... 40, 44 phpinfo()... 100 printf... 105 Punkt-Operator... 105 require_once... 184, 219, 240, 250 return... 115 rtrim... 285 Schleife... 127, 135 Short-Tag... 98 simplexml_load_string... 283 str_replace... 281 string... 102 String verketten... 105 strtolower... 252 strtoupper... 252 switch... 137, 292 Syntax... 100 testen... 32, 40 trim... 285 ucfirst... 252 ucwords... 252 utf8_decode... 284 utf8_encode... 283 Variable... 101 Vergleichsoperatoren... 107 while... 127 Zeichenketten verketten... 105 Zeitformat... 315 Zuweisungsoperator... 103 php.ini... 40 phpmyadmin Datenbank installieren... 66 installieren... 45 konfigurieren... 45 testen... 48 PHPMyAdmin... 21, 43, 200,... 259, 265, 275, 294 Tabelle anlegen... 201 Tabelle kopieren... 78 Plug-In... 290 installieren... 294 search... 290 XML-Datei... 290 Polymorphie... 305 printf... 105 Programmierung Mashup... 199 objektorientiert... 116, 303 prozedural... 116 Projekt-Explorer... 95 Prototype... 304 Punkt-Operator... 105 Q Quellcode, Sicherung... 76 R Referenzoperator... 158, 178, 209 require_once... 184, 219, 240, 250 return... 115 RSS... 18 rtrim... 285 Run-Time... 305
Stichwortverzeichnis 335 S Schleife... 127, 135 endlos... 128 for... 223, 286, 287 foreach... 134, 215, 248, 268, 293 while... 127 setid... 210 SGML... 98 Short-Tag... 98 Sicherung... 76 Simple-XML... 282 simplexml_load_string... 283 Singleton-Entwurfsmuster... 311 Softwareentwicklung Konsequenzen... 75 Sprachdatei... 164 anpassen... 148 Standard Generalised Markup Language (SGML)... 98 stdclass... 212 str_replace... 281 String... 102 String verketten... 105 strtolower... 252 strtoupper... 252 switch... 137 T Tabelle Datenfeld hinzufügen... 79 Datensatz hinzufügen... 82 jos_components... 81, 201 jos_contact_details... 78 jos_contact_details_my... 78 jos_modules... 265, 272, 275 jos_mybooks... 200, 217, 229, 244, 259 jos_plugins... 294 kopieren... 78 neuanlegen... 201 TablemyBooks... 208 TablemyContact... 153, 155 Tag @access... 302 @throws... 302 a... 189 iframe... 188 img... 189, 268 li... 248, 268 param... 160 script... 189 ul... 268 Tag-img... 284 Template mybooks... 270 myweather... 278 TextWrangler... 23 this... 220 trim... 285 U Übergabe by Reference... 209 by Value... 209 ucfirst... 252 ucwords... 252 UML... 303 unitärer Dekrement... 130 Inkrement... 130 UTF-8... 19, 80, 263, 283, 302, 313 utf8_decode... 284 utf8_encode... 283 V Variable... 101 array... 102 bool... 102 Datentyp... 102 double... 102 float... 102 integer... 102 NULL... 102
336 Stichwortverzeichnis object... 102 string... 102 Vererbung... 305 Vergleichsoperatoren... 107 Verzeichnis administrator... 85 Books... 246 category... 146, 156 com_mybooks... 249, 250, 255 com_mycontact... 156 components... 85 controllers... 232, 241 language... 86 mod_mybooks... 264, 266, 269, 270 mod_myweather... 273, 277, 289 models... 146, 244 modules... 264 mycontact... 156 search... 290 tables... 145 tmpl... 147, 156, 221, 228,... 247, 264, 270, 273, 278 views... 146, 156 Verzeichnisstruktur, myweather... 273 Vielgestaltigkeit... 305 View... 309 W Webserver... 23 XAMPP... 22 while... 127 Windows Sicherheitsrichtlinien... 27 Webserver... 22 Webserver testen... 31 XAMPP installieren... 23 Workspace... 52, 92 X XAMPP... 22 Control Panel... 26, 30 Dienste... 26, 30 installieren... 26 XML... 88 Datei... 160 Daten... 280 default... 271 description... 271 files... 259, 274 folder... 258 Knoten... 259, 271, 274 label... 271 limit... 271 Objekt... 284 params... 271 photos... 271 Simple... 282 type... 271 XML-Datei... 165, 255, 256,... 257, 270, 274, 284, 290 items... 160 XOR... 110 Z Zeichencodierung ASCII... 302 UTF-8... 80, 263, 283, 302, 313 Zeichensatz ASCII... 101 ISO-8859-1... 284 Zugriffskontrolle... 316 Zuweisungsoperator... 103