Studie “Backboned”: AJAX-powered WordPress-Theme mit Backbone.js

Um mir gelegentlich etwas Zerstreuung vom Lernen zu geben, habe ich einen lange gehegten Plan in die Tat umgesetzt: Ein AJAX-betriebenes WordPress-Theme mit Backbone.js zu bauen. Und zwar keine auf “Graceful Degradation” setzende Kompromisslösung. Alle Inhalte werden asynchron geladen und sind per Hashbang URIs ansteuerbar. Ein Blick in den Quellcode offenbart, was ich meine: Ein JSON-Objekt mit allen grundlegenden Daten, eine Handvoll jQuery-Templates und das HTML-Grundgerüst. Das war es an statischem Content - die Darstellung des Inhalts geschieht über Backbone.js.
Damit Suchmaschinen nicht außen vor bleiben und man sich nicht die Mühe machen muss, einen “Headless Browser” à la HtmlUnit auf seinem Server zum laufen bringen zu müssen, werden grundsätzlich alle Inhalte als GET-Anfrage mit dem Parameter “_escaped_fragment_” abgehandelt - die Ausgabe variiert dann je nachdem zwischen statischem HTML oder einem nackten JSON-Objekt. So ist sichergestellt, dass die Inhalte trotzdem indiziert werden können. Die einzigen, die in die Röhre schauen, sind Besucher ohne JavaScript.
Um diesen Workaround zu realisieren, war jedoch ein hohes Maß an Improvisation vonnöten. Mit WordPress-Bordmitteln habe ich es nicht geschafft, das Frontend-seitige URL-Routing von Backbone.js server-seitig abzubilden und entsprechend zu bearbeiten. Ich habe deshalb auf ein simples MVC-Pattern zurück gegriffen und in das eigentliche Theme eine Art Child-Theme integriert. Das ist insgesamt kein Ansatz der mir - besonders in meiner Umsetzung - gefällt. Des weiteren muss man für einen störungsfreien Betrieb des Themes das URL-Rewriting in den WordPress-Einstellungen deaktivieren.
Darüber hinaus bleibt anzumerken, dass das Theme insgesamt eher rudimentär ist. Ich würde von einem Produktiveinsatz abraten. Allerdings bin ich grundsätzlich von der Idee des Themes überzeugt und freue mich natürlich, wenn jemand sich ebenfalls dafür begeistern kann und daran weiterarbeitet. Gerne auch in Kollaboration mit mir. Zu tun gibt es unter anderem noch:
- die grundsätzliche Verbesserung des PHP-Codes (sicherer machen, besser in das WordPress-Environment integrieren,…)
- den Funktionsumfang erhöhen (Neueste Kommentare, Tags, Suchfunktion, Sidebar-Widgets(?),…)
- das JavaScript straffen (Performance, geschmeidigere GUI-Abläufe,…)
…um ein paar Aspekte zu nennen.
Ansonsten freue ich mich wie immer über Anregungen und Verbesserungsvorschläge - gerade bei einem Vorhaben dieser Größenordnung hat man als Entwickler nicht wirklich einen umfassenden Überblick.
PS: Wahrscheinlich werde ich das Teil zeitnah bei GitHub reinladen. Muss mich da aber erst noch anschlauen.
Update: Okay, die Geschichte ist jetzt auch auf GitHub - https://github.com/herschel666/Backboned. Viel Spaß.
Thomas
– 11.11.2011Hallo!
Ich habe vor einiger Zeit ein ähnliches Projekt angefangen, eine WordPress Seite, dessen Frontend komplett auf die mitgelieferten Templates verzichtet und den kompletten Inhalt per AJAX (und hashbang Link anzeigerbar) einfügt.
Wenn ich dich bezügl. SEO richtig verstanden habe, bekommt google nur ein Serverseitig generiertes JSON Object vorgesetzt? Interessante Idee!
mfg
Thomas
Emanuel
– 11.11.2011moin thomas.
google bekommt eine statisch ge-renderte version der seite, indem das hashbang '#!' durch '?_escaped_fragment_=' ersetzt wird. du kannst das bei meiner Backboned-installation bei kodingen auch ausprobieren.
allerdings ist mein weg, die statische variante zu erzeugen, nicht ideal. die sinnvollere alternative zum headless-browser wäre das rendern der statischen seite mithilfe von PHP DOMDocument.
Thomas
– 11.11.2011Das "_escaped_fragment_" war mir durchaus bewusst bzw. bekannt. Ich hatte nur die Beschreiung mit dem übergebenen JSON-Object falsch verstanden und mich doch ein wenig gewundert
Der Tipp mit dem DOMDocument ist allerdings schon mal sehr interessant!
Danke
mfg
Thomas