TYPO3 Contexts: Mobile und mehr

Der Bedarf, Inhalte für mobile Endgeräte gesondert verwalten und darstellen zu können, steigt zunehmend. Als TYPO3 Enterprise Spezialist haben wir eine Multichannel-Lösung für TYPO3 entwickelt, mit der sich Inhalte nicht nur je Endgerättyp (z.B. PC, Tablet, Smart Phone, TV, Google Glasses…), sondern auch über andere Kriterien und Kanäle (z.B. Herkunft, Standort, Domain u.a.) steuern lassen.

Die Erfahrung hat gezeigt, dass sich die Anforderungen an mobile Websites grundsätzlich in zwei Bereiche unterteilen lassen: In die Darstellung einerseits und die Verwaltung und Auslieferung von Inhalten andererseits.

Während es für ersteres zwischenzeitlich zuverlässige Technologien – z.B. Responsive Webdesign – gibt, die nicht vom Content Management oder Shopsystem abhängen, sind die Verwaltung und Auslieferung von Inhalten dagegen direkte Anforderungen an das jeweilige Content Management System: Hierbei sollen Redakteure festlegen können, welche Inhalte für welche Geräte ausgeliefert werden sollen und das System muss anhand des Gerätes entscheiden, welche dieser Inhalte es auszuliefern hat.

Es galt also, eine Lösung als TYPO3-Erweiterung zu entwickeln, die dies ermöglicht.

PC, Tablet, Smart Phone, TV, Glasses – was kommt als nächstes?

Die Antwort vorweg: Einiges sicherlich. Zum einen ist es anhand der rasanten Entwicklung der letzten Jahre abzusehen, dass in naher Zukunft weitere Endgerätetypen auf den Markt kommen werden oder schon sind und nicht mehr lange brauchen, bis sie in den Marketing-Abteilungen eine Rolle spielen. Zum anderen gibt es zahlreiche Hersteller und Varianten von Smart Phones und Tablets – was manchen dazu verführen könnte, zwischen diesen unterscheiden zu wollen.

Folglich ergibt sich eine zusätzliche Anforderung an unsere neue Erweiterung: Sie muss ermöglichen, dass beliebige viele Geräteklassen nach vom Kunden vorzugebenden Kriterien wie bspw. Auflösung oder Touch Screen verwaltet werden können.

Bei diesen “vom Kunden vorzugebenden Kriterien” klingelte etwas: Hatten wir es nicht häufig erlebt, dass Kunden Inhalte abhängig von verschiedenen Bedingungen aus- bzw. eingeblendet sehen wollten – vom Vorhandensein eines bestimmten GET-Parameters etwa oder von der geografischen Lage des Besuchers? Diese Anforderungen sind den oben genannten bis auf die Geräteerkennung sehr ähnlich und es lag daher nahe, diese ebenfalls mit der neuen Erweiterung zu verwirklichen und sie so universeller, als TYPO3 Multichannel Extension anzugehen.

Bei der Recherche nach bestehenden Lösungen stießen wir auf das Drupal-Context-Modul und damit den Gedanken von Kontexten, die frei definierbar sein können und von denen Datensätze unmittelbar abhängen.

Die Erweiterung

Im Sinne der Einfachheit und Granularität – und weil wir nicht wissen, welche Kriterien morgen benötigt werden – entschieden wir uns dafür, die verschiedenen Features auf mehrere Erweiterungen zu verteilen.

Die Erweiterung contexts (Dokumentation) stellt dabei die zentralen Funktionalitäten bereit: die Verwaltung von Kontexten, die Steuerung von Datensätzen anhand von Kontexten und eine API für andere Erweiterungen.

Grundlegend funktioniert die Erweiterung so, dass vom Administrator der Seite Kontexte mit verschiedenen Kriterien angelegt werden. Diese erscheinen dann im Tab “Kontexte” der Datensätze von kontextgesteuerten Tabellen (standardmäßig Seiten und Inhaltselemente). In diesem Tab läßt sich nun die Sichtbarkeit in Abhängigkeit vom Kontext einstellen.

Vor der Ausgabe im Frontend werden alle Kontexte überprüft. Passen dabei die Kriterien eines oder mehrerer Kontexte auf die Anfrage, werden diese aktiviert und deren (Sichtbarkeits-) Regeln auf die gesteuerten Datensätze angewendet.

Kontexte

Die Kontexte werden ähnlich Domains als Datensätze in der Wurzelebene der Website angelegt. Der Typ eines Kontexts entscheidet darüber, welche Kriterien zur Verfügung stehen und wie sie im Frontend ausgewertet werden.

Die möglichen Typen werden über die API von anderen Kontext-Erweiterungen registriert – contexts selbst bringt bereits die Typen Domain, GET-Parameter, IP und Logische Kontext-Kombination mit. Kontext-Kombinationen ermöglichen es, beliebige Kontexte mittels boolescher Ausdrücke miteinander zu kombinieren und so neue Kontexte auf basis von Kontext-Kombinationen zu definieren.

Mobile Kontexte mit contexts_wurfl

Die ursprüngliche Anforderung – Seiten und Seiteninhalte in Abhängigkeit vom Endgerät des Besuchers verwalten und ausgeben zu lassen – haben wir mit der Kontext-Erweiterung contexts_wurfl (Doku) umgesetzt.

Diese arbeitet mit der WURFL-Datenbank, welche Informationen über die Eigenschaften von derzeit über 4300 mobilen Endgeräten enthält. Neben einem Modul für den Import dieser Datenbank sowie zum Testen von User-Agent-Abfragen stellt contexts_wurfl den Kontext-Typ Device properties bereit, mit dem sich Kriterien für Geräteeigenschaften festlegen lassen.

So lassen sich alle mobilen Endgeräte oder nur kabellose Geräte, Tablets, Smart Phones oder SmartTVs erkennen und Bildschirmauflösungen, Hersteller und Browser eingrenzen.

Zusammen mit der Möglichkeit, mehrere Kontexte für verschiedene Anforderungen anzulegen und diese miteinander zu verknüpfen, kann man die Sichtbarkeit von Inhalten bei beliebigen Endgeräte steuern.

Ortsgebundene Kontexte mit contexts_geolocation

Die IP-Adresse eines Nutzers gibt oftmals Auskunft über seinen physischen Standort: Mittels einer Geo-IP-Datenbank lassen sich Geokoordinaten (Längen- und Breitengrad) zu einer IP-Adresse bestimmen.

Mit contexts_geolocation (Doku) stellen wir eine Extension zur Verfügung, mit der man Seiteninhalte anhand der Position des Nutzers anzeigen und verstecken kann: Zum einen auf der Ebene von Kontintenten und Ländern, zum anderen kann man auf einer Karte eine beliebige Position wählen und den gewünschten Umkreis angeben.

Benutzer innerhalb des festgelegten Areals bekommen dann den Kontext zugewiesen, der die Seiten und Seitenelemente sichtbar macht oder verbirgt. Die Genauigkeit der Nutzerkoordinaten hängt von der jeweiligen Datenbasis ab; die freie geoip-Datenbank von Maxmind löst die meisten IPs auf Großstadt- und Bundeslandebene korrekt auf. Die kommerzielle Variante erhöht die Genauigkeit deutlich.

Was lässt sich wie steuern?

Die Grunderweiterung contexts ist so umgesetzt worden, dass die kontextabhängige Steuerung über eine API für beliebige Tabellen ermöglicht werden kann, die über das TCA konfiguriert werden.

Dabei können frei definierbare Einstellungen als Checkbox-Felder festgelegt werden, die dann für jeden Kontext ein- bzw. ausgeschaltet werden können – contexts selbst registriert die Einstellungen “Sichtbarkeit” und “Sichtbar in Menüs” für Seiten sowie “Sichtbarkeit” für Inhaltselemente.

Bei der Registrierung der Einstellungen lässt sich definieren, ob die Einstellung als sogenanntes enableField in die SQL-WHERE-Abfragen über die TYPO3-API einbezogen werden soll. In diesem Fall werden Datensätze, die wegen der aktuelle Kontextkombination deaktiviert sind, gar nicht erst aus der Datenbank ausgelesen. Dies wird bei den Sichtbarkeitseinstellungen angewendet.

Desweiteren lässt sich für jede Einstellung festlegen, ob die Kontexte, in denen die Einstellung explizit aktiviert oder deaktiviert wurde, zusätzlich zur relationalen Einstellungstabelle auch in entsprechenden Feldern in der Tabelle selbst gespeichert werden sollen, um Abfragen zu sparen – das Anlegen dieser Felder übernimmt contexts dann automatisch. Um die Einstellungen bereits abgerufener Datensätze zu prüfen, steht ebenfalls eine API-Methode zur Verfügung, die z.B. von contexts für die “Sichtbar in Menüs”-Einstellung in einem tslib_menu-Hook genutzt wird.

Was gibt es für Alternativen?

TYPO3 wäre natürlich nicht TYPO3, wenn es für die anfangs genannten Anforderungen nicht wenigstens eine Lösungsmöglichkeit bieten würde. So gibt es auch zwei Ansätze, die sich ohne Extensions realisieren lassen:

Zum einen können pro Geräteklasse wie z.B. Tablet, Smart Phone oder PC jeweils ein Seitenbaum gepflegt und dem Besucher nach einer Geräteerkennung entsprechend angezeigt werden. Der Vorteil dabei ist, dass sich die Seiten- und Inhaltstruktur sehr individuell auf die Geräteklassen zuschneiden lässt – nachteilig ist allerdings, dass die Inhalte zwangsläufig doppelt gepflegt werden müssen, was entsprechend hohen redaktionellen Aufwand bedeutet.

Zum anderen kann das Mehrprachigkeits-Feature von TYPO3 so genutzt werden, dass die Geräteklassen als Sprachen eingepflegt und die Inhalte entsprechend gesteuert werden. Vorteilhaft an dieser Lösung ist, dass damit auf eine sehr ausgereifte Funktionalität ohne redundante Pflege zurückgegriffen wird – der Nachteil dabei ist allerdings, dass diese nicht für diesen Einsatzzweck bestimmt ist, was sich dann rächen kann, wenn man beabsichtigt, mehrere Sprachen einzusetzen.

Jenseits von diesen nativen Lösungsmöglichkeiten gibt es noch eine seit mehreren Jahren nicht mehr gepflegte WURFL-Erweiterung, mit der sich die Darstellung mit TypoScript-Bedingungen auf Geräte abstimmen lässt.

Zum Schluß gibt es noch die kommerzielle – also kostenpflichtige und nicht Open Source – Erweiterung t3mobile, mit der sich allerdings nur Inhaltselemente und nicht Seiten endgeräteabhängig verwalten lassen. Leider ist sie auf zwei Geräteklassen (Tablet und Smart Phone) beschränkt.

Bei anderen CMS wie Drupal, Joomla, Liferay, Plone oder Magnolia ist die Lage vergleichbar, wenngleich wir bei Extensions wie Context, Mobile Tools oder Mobile Device Rules auf einige interessante Ansätze gestoßen sind, die wir in unsere Anfordungen aufgenommen haben.

Schlußendlich wurde aber klar, dass wir eine Erweiterung entwickeln werden müssen, die den Anforderungen – der einfachen aber flexiblen Pflege der Inhalte ohne doppelten Seitenbaum – gerecht wird. Wir denken, dass uns das mit den vorliegenden Erweiterungen, die im Übrigen mit TYPO3 4.5, 4.6, 4.7 und 6.1 kompatibel sind, gelungen ist.

Wie geht es weiter?

Wir haben die Erweiterungen vor kurzem im TER und im TYPO3-Forge veröffentlicht und freuen uns auf Euer Feedback, Verbesserungsvorschläge und Feature-Wünsche, die wir dort gern entgegennehmen! In jedem Fall werden wir die Erweiterungen weiterhin betreuen und ausbauen und in naher Zukunft außerdem ein Demo-System aufsetzen, auf dem die Funktionalität im Back- und Frontend ausprobiert werden kann.

Downloads / Links

Die Extensions sind direkt über den TYPO3-Extensionmanager installierbar.

 

 

weitere Artikel zum Thema

Diesen Artikel kommentieren

9 Kommentare zu “TYPO3 Contexts: Mobile und mehr”
1
Udo Butschinek, am 10.07.2013 um 13:08

Eine sehr schöne Extension, die technische umsetzt, was ich nie müde werde zu betonen: Es reicht eben nicht, nur das Layout in der Größe zu verändern, sondern der Content muss sich ebenfalls anpassen (1000 Wörter Produkttext auf einen iPhone ist halt uncool).
Man hat dafür auch das Wort “adaptive content” geprägt.
Der nächste Schritt muss nun daraus bestehen entsprechende “content models” zu entwickeln und entsprechend im TYPO3-Backend zur Verfügung zu stellen.

2
Sven Wolfermann, am 11.07.2013 um 08:53

Hat WURFL jetzt nicht die Lizenz geändert? Kann man das in einer Open Source Extension verwenden? Ich hatte das anders verstanden. Zudem ist die WURFL-Datenbank nie aktuell, problematisch wird es wenn neue Geräte erscheinen, wie ist das abgefangen?

3
Christian Weiske, am 11.07.2013 um 09:54

@Sven Wolfermann:

Hat WURFL jetzt nicht die Lizenz geändert? Kann man das in einer Open Source Extension verwenden?

WURFL ist duallizensiert unter AGPL und einer kommerziellen Lizenz. Wir passen bei der API nur die Datei TeraWurflConfig.php, die auch unter AGPL steht. Diese Änderungen sind auf Github veröffentlicht, womit die Lizenz eingehalten wird.

Zudem ist die WURFL-Datenbank nie aktuell, problematisch wird es wenn neue Geräte erscheinen, wie ist das abgefangen?

Es gibt für die WURFL-API jedes halbe Jahre ein Update, was für unsere Zwecke ausreicht.

Aktualisieren kann man die WURFL-Daten direkt im TYPO3-Backend über einen Update-Knopf.

Wenn man unbedingt aktuellere Daten braucht, kann man sie von WURFL kaufen – oder selbst updaten; wobei das Update veröffentlicht werden muss.

4
TYPO3 und Shopware: So lässt man Hybris alt aussehen Content-Driven E-Commerce, am 24.10.2013 um 14:16

[…] mit der TYPO3-Inhalte kontextbezogen ausgegeben werden können (genaueres findet man im Blog). Dazu gehört auch die Möglichkeit, Inhalte in Abhängigkeit von dem jeweiligen Endgerät des […]

5
Stefan, am 12.11.2013 um 10:33

Funktioniert leider nicht so….
Ich habe ein Datensatz im root ID 0 wie im Artikel beschrieben erstellt.

als Type habe ich “device properties” und den haken bei Tablet und Phone. Soweit so gut.

Gehe ich nun auf eine beliebige Seite im Seitenbaum und setze bei Kontexte Sichtbar “No” so passiert im FE rein gar nichts.

Setzte ich auf “Yes” dann ist der Inhalt weg, jedoch auch im ganz normalen Desktop Modus er unterscheidet also nicht zwischen Mobile und Desktop.

Das setzen von Android/Apple bei “Product info” bringt auch nichts er versteckt es immer für alles.

6
Christian Weiske, am 12.11.2013 um 13:29

@Stefan: Hast du die WURFL-Datenbank importiert? Anleitung ist in der Doku: http://docs.typo3.org/typo3cms/extensions/contexts_wurfl/

7
Christian, am 13.11.2013 um 16:18

@Stefan: Die Logik ist aktuell die, dass der Datensatz versteckt wird, sobal für einen Kontext “Yes” angegeben wurde.

Du könntest einen Kombinationskontext mit der Regel “!mobile” als Desktop-Kontext anlegen und den dann auf Yes und den mobilen auf No stellen.

Kontext “Desktop”:
- Alias. desktop
- Type: Logical Context Combination
- Expression: !mobile
Kontext “Mobile Endgeräte”:
- Alias: mobile
- Type: Device Properties
- Tablet: Ja
- Phone: Ja

Und im Inhalt bzw. auf der Seite:
Desktop: Sichtbar: Ja
Mobile: Sichtbar: Nein

(Die Reihenfolge der Kontexte kann auch umgekehrt sein).

8
volker, am 27.11.2013 um 13:41

hi, ich wollte eure extension einmal auf meiner spielwiese ausprobieren, jedoch kam schon nach dem installieren folgende meldung:

– schnipp –
Fatal error: Declaration of Tx_Contexts_Service_Page::getPage_preProcess() must be compatible with that of TYPO3\CMS\Frontend\Page\PageRepositoryGetPageHookInterface::getPage_preProcess() in /var/www/techdays/html/typo3conf/ext/contexts/Classes/Service/Page.php on line 41
– schnapp –

meine typo3 version ist 6.1.5. in der Page.php habe ich gelesen, das ich unter http://forge.typo3.org/issues/50881 eine entsprechende information finde, die mir bei dem problem helfen soll.

leider bin ich etwas überfordert und würde mich über hilfe freuen.

9
Christian Weiske, am 07.03.2014 um 14:13

@volker: Das Problem kann ich nicht nachvollziehen (6.1.5, PHP 5.3.28). Stell bitte sicher, daß alle Caches einmal geleert wurden.