Der Name ist Programm: Die Präsentation bietet einen Einblick in die Nutzung des plattformunabhängigen, XAML-ähnlichen GUI-Toolkits des Mozilla-Projekts mit einem per AJAX angebundenem PHP-Backend.
Der Vortrag wurde auf der International PHP Conference 2005 in Frankfurt gehalten.
2. Inhalt
Was ist XUL?
Crashkurs: XUL
Was ist AJAX?
Crashkurs: AJAX
XUL - Stolpersteine
Ausblicke
Weitere Informationen
2
3. Was ist XUL ?
Extensible User Interface Language
XML-basierte Beschreibungssprache für
grafische Benutzeroberflächen
Grundidee: Kleiner, hochportabler Kern
interpretiert GUI-Definition und Javascript-
Eventhandler zur Laufzeit
Ideal für Rapid Prototyping
Mit XUL erstellte Anwendungen auf allen
gängigen Plattformen lauffähig
Lokale Installation ebenso möglich wie
Remote-Betrieb im Browser
3
4. Was ist XUL ? (2)
Markup erweiterbar über XBL
Erlaubt Zusammenfügen beliebiger XUL-
Elemente zu einem kombinierten Element
Erlaubt Definition eigener Tag-Attribute
Erlaubt Hinterlegung von komplexem
Javascript zur Initialisierung sowie für
eigene Objektmethoden
Eigene Containertags können beliebigen
Inhalt haben, der in XBL zugreifbar ist
Eigenes Komponentensystem XPCOM
für lokale Applikationen
4
5. Was ist XUL ? (3)
Browser mit XUL-Unterstützung: Alle
mit Gecko-Engine
Mozilla-Browser: Firefox, Seamonkey,
Camino
Galeon (Gnome)
Epiphany (Gnome)
Künftig evtl. Konqueror (KDE) ?
XUL-fähiger Desktop: SymphonyOS
Microsoft im IE mit eigener
Konkurrenz-Technik: XAML
5
6. Crashkurs: XUL
Content-Type:
application/vnd.mozilla.xul+xml
Apache: Als MIME-Type für .xul –
Dokumente hinzufügen
PHP: Senden via header()
Bei lokalem Betrieb Dateiendung .xul
verwenden
6
20. Crashkurs XUL (15)
Problem: Einbetten von Daten erfordert
Reload der kompletten Maske bei
Änderungen (siehe HTML)
Datenquellen-Support in Mozilla nur für
RDF: Viel Overhead
Alternative: Datenimport via
Javascript & XMLHttpRequest (AJAX)
20
21. Was ist AJAX ?
Scheuerpulver der Firma Colgate-
Palmolive
Akronym für:
Asynchronous
Javascript
And
XML
Unterstützung durch alle gängigen
Browser
Kandidat für Buzzword des Jahres
21
22. Was ist AJAX ? (2)
Grundprinzip:
Webserver liefert initiales Dokument aus
Dokument enthält Javascript-Eventhandler
Eventhandler fragen bei User-Interaktion
per XML-Request Daten vom Webserver an
Webserver liefert Daten via XML zurück
XML-Response wird in Javascript
interpretiert und führt (z.B.) zu Änderungen
im Dokument
22
23. Was ist AJAX ? (3)
Programmierweise nähert sich der von
Desktop-Anwendungen an
Applikationen sind nicht mehr
zwangsläufig „Stateless“
Durch Nachladen nur von Nutzdaten
beschleunigte Response-Time der
Anwendungen
Komplexere Userinteraktionen werden
ohne Komfortverlust möglich
23
24. Was ist AJAX ? (4)
Nachteile:
Spielt nicht mit Suchmaschinen zusammen
Barrierefreiheit problematisch
Nicht nutzbar bei ausgeschaltetem
Javascript oder (bei IE) ActiveX
Fazit:
Einsetzbar nur bei klarer Zielgruppe oder
unter kontrollierten Bedingungen (z.B.
Intranet)
Bei Einsatz auf Websites immer
Alternativen ohne Javascript anbieten
24
25. Crashkurs: AJAX
...am Beispiel von PEAR::HTML_AJAX
Ziel: Serverseitige PHP-Klassen in
Javascript transparent zur Verfügung
stellen
Installation via PEAR Installer:
pear config-set preferred_state alpha
pear install HTML_AJAX
25
26. Crashkurs: AJAX (2)
Von Javascript aus zu benutzende
PHP-Klasse:
class served_class {
public function __construct() {
$this->pdo = new PDO('mysql:host=localhost;dbname=test',
'ajax', 'ajaxpw');
}
public function get_records($search='') {
$sql = quot;SELECT * FROM publications quot;;
if (trim($search) != '')
$sql .= quot;WHERE title LIKE quot;.$this->pdo->quote($search);
return $this->pdo->query($sql)->fetchAll(PDO_FETCH_ASSOC);
}
}
26
27. Crashkurs: AJAX (3)
HTML_AJAX Serverscript:
include 'HTML/AJAX/Server.php';
class TestServer extends HTML_AJAX_Server {
public $initMethods = true;
public function initServed_class() {
include_once 'served_class.php';
$this->registerClass(new served_class());
}
}
$server = new TestServer();
$server->clientJsLocation = '/path/to/PEAR/data/HTML_AJAX/js/';
$server->handleRequest();
27
28. Crashkurs: AJAX (4)
Einbindung des generierten Javascripts
in XUL-Dokumente:
<script type='text/javascript'
src=quot;ajax_server.php?client=allquot; />
<script type='text/javascript'
src=quot;ajax_server.php?stub=allquot; />
28
30. Crashkurs: AJAX (6)
Klick-Handler definieren:
function doSearch() {
var search = document.getElementById(quot;sometextquot;).value;
var server = new served_class();
var result = server.get_records(search);
var tree = document.getElementById(quot;resultTreequot;);
refreshTree(tree, result);
}
30
31. Crashkurs: AJAX (7)
Ergebnisse dem Tree hinzufügen:
function refreshTree(tree, result) {
emptyTree(tree);
var exThrown = false;
for (var i=0; i < result.length; i++) {
var treeItem = document.createElement(quot;treeitemquot;);
var treeRow = document.createElement(quot;treerowquot;);
for (var name in result[i]) {
var cell = document.createElement(quot;treecellquot;);
cell.setAttribute(quot;labelquot;,result[i][name]);
treeRow.appendChild(cell);
}
treeItem.appendChild(treeRow);
tree.childNodes[1].appendChild(treeItem);
}
} 31
33. Crashkurs: AJAX (9)
Variante 2: Das „A“ in AJAX
function doSearch() {
var search = document.getElementById(quot;sometextquot;).value;
var callback = new ResultHandler();
var server = new served_class(callback);
}
function ResultHandler() {}
ResultHandler.prototype = {
get_records: function(result) {
var tree = document.getElementById(quot;resultTreequot;);
refreshTree(tree, result);
}
}
33
34. XUL: Stolpersteine
Dokumentation hängt Entwicklung
hinterher
Einige Funktionen nur bei lokal
registrierten Applikationen verfügbar:
Wizards
Dialogfenster
Dateizugriff
Server-Debugging teils knifflig
Absolute Pflicht: Error Logging
Kür: Unit-Tests
34