Comment détecter le browser d’un mobile avec Zend Framework

dimanche 25 septembre 2011
Voici une vidéo explicative qui permet via un plugin Wurfl de détecter si on est oui ou non sur un mobile et affiche le layout adéquat. http://www.zendcasts.com/setting-up-zend_http_useragent/2011/01/ Dans cette vidéo on découvre l’utilité des plugins dans Zend Framework. Un plugin permet de réaliser des actions à des moments bien précis avant l’affichage de la page demandée. Ainsi dans ce cas-ci, on peut créer un plugin avec une action Predispatch qui pourra détecter avant l’affichage du layout si on est sur un mobile ou non. On place le plugin généralement dans le folder library ce qui permet de le réutiliser par après pour d’autres sites. Pour l’installation et la configuration de WURFL: http://framework.zend.com/manual/1.11/en/zend.http.user-agent.html En résumé, il faut télécharger la dernière version de WURFL, la dézipper dans library à partir du dossier WURFL, ensuite créer un folder data/wurfl/cache sur la racine du site. Donner les droits d’écriture et mettre deux fichiers pour wurfl. Après ça il faut configurer Zend Framework pour qu’il charge les classes nécessaires au bon fonctionnement de WURFL. Attention il faut tenir compte de la version de WURFL. Pour info voici ma configuration: J’ai installé la dernière version de wurfl qui est la 1.3.1 ————– application.ini ————————
autoloaderNamespaces[] = "Plugins"
// Plugin qu'on appelle pour détecter le mobile
ressources.frontController.plugins[] = "Plugins_Controller_Plugin_DetectMobile"
resources.useragent.wurflapi.wurfl_api_version = "1.1"
resources.useragent.wurflapi.wurfl_lib_dir = APPLICATION_PATH "/../library/WURFL/"
resources.useragent.wurflapi.wurfl_config_file = APPLICATION_PATH "/configs/wurfl-config.php"
————– wurfl-config ————————

<?php
$resourcesDir            = dirname(__FILE__) . '/../../data/wurfl/';
$configuration = array(
'wurfl' => array(
'main-file' => $resourcesDir . 'wurfl.xml',
'patches' => array($resourcesDir . 'web_browsers_patch.xml'),
),
'allow-reload' => true,
'persistence' => array(
'provider' => "file",
'params' => array(
'dir' => $resourcesDir . 'cache/',
),
),
'cache' => array(
'provider' => "null",
),
);
————– index.php ————————

Il faut aussi dans index.php ajouter la ligne suivante pour que Zend charge le plugin

$front = Zend_Controller_Front::getInstance();
$front->registerPlugin(new MyFinance_Controller_Plugin_DetectMobile());