Smarty Template Engine zustätzlich mit Anzeige einer mobilen Version ausstatten

Die Smarty Template Engine ist ein mächtiges Tool, wenn es um die Template-Behandlung und deren Caching geht. Seit gut einem Jahr programmiere ich nun in meiner Freizeit an einem PHP-Projekt, welches nun auch auf meinem HTC Kaiser dargestellt werden soll. Da dieser jedoch ein paar Änderungen an der Übersicht (Beispielsweise statt 50 Einträgen in einer Liste nur 10-20) und am prinzipiellen Datenhandling (Ajax ist da im Pocket Internet Explorer nicht so wirklich vorhanden) benötigt, kann man nicht einfach nur im Header ein anderes Stylesheet einsetzen.

Werbung


Bei Smarty lassen sich diverse Variablen setzen, die verschiedene Templates erlauben. Mittels der „template_dir“ lässt sich das Verzeichnis des zu nutzenden Templates festlegen (Beispielsweise: $Smarty->template_dir = $generalTemplateDir . $specificStyle;). Wenn man nun jedoch einfach so Smarty laufen lässt, werden die gecachten Seiten aller Styles im Cache-Verzeichnis einfach gegenseitig überschrieben, was nicht im Sinne des Erfinders ist. Dieses Problem lässt sich jedoch schnell lösen, wenn man die sog. compile_id setzt (Beispiel: $Smarty->compile_id = $specificStyle;). Wenn diese eindeutig vergeben ist (ich vergebe einfach den Templatenamen), dann werden die Dateien im Cache je nach Style abgelegt und nicht mehr überschrieben.

Nun fehlt es eigentlich nur noch an der Browsererkennung. Hierzu kann man beispielsweise den „OSNews‘ Mobile Detection Kit“ verwenden (dieser bedarf allerdings zuvor einer Geschwindigkeitüberarbeitung, sonst werden bei jedem Aufruf mehr als 200 Statements abgefragt). Eine andere Möglichkeit wäre die Liste der mobilen Browser aus dem WordPress-Plugin wp-mobile von Alex King zu extrahieren und die Erkennung auf diese zu beschränken (was im Regelfall ausreicht, wenn man nicht auch noch WAP-Erkennung möchte).

Ich habe mich also hingesetzt und schnell was gecoded, erfüllt seinen Zweck bestens… Das Ergebnis auf meinem HTC Kaiser (Pocket IE) ist links zu bewundern.
Hier der Download mit Beispiel: mobileBrowserDetection-V0.1.zip

Statt den Ausgaben können natürlich auch Smarty-Variablen entsprechend gesetzt werden. Dies habe ich aufgrund der verschiedenen Umgebungen, in denen das Script zum Einsatz kommt, nicht direkt gezeigt und ist dem Coder selbst überlassen.

Fragen und Anmerkungen bitte in den Kommentaren!

Veröffentlicht von

Uli

IT-Nerd und Admin

3 Gedanken zu „Smarty Template Engine zustätzlich mit Anzeige einer mobilen Version ausstatten“

  1. Sehr schön, aber man bekommt man bei Abfrage der Weite, mit Classfunc „getWidth()“, immer 100%.
    Behebung:
    1. Deklaration Klasse: private $browser; dazu
    2. In Func „isMobile()“ bei pos. Erkennung: „if(stristr($agent, $str ) !== FALSE)“ noch dazu setzen: „$this->browser = $str;“

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.