Zen-Cart : adapter le template à l’équipement du visiteur

Zen-Cart est un outil open-source dérivé d’OS Commerce et qui permet l’exploitation de boutiques en ligne d’une manière à la fois simple et sophistiquée. Son système « d’overrides » et de templates permet notamment de modifier le code sans pour autant mettre en péril la mise en oeuvre des nouvelles versions, et d’adapter la présentation des informations à tout type de situation. Je l’utilise depuis 2005 sur plus de 20 boutiques actuellement opérationnelles avec beaucoup de satisfaction de la part de mes clients.

Depuis quelque temps, le nombre de visiteurs utilisant des plateformes mobiles grandit et il apparaît que la proportion PC / mobile risque de s’inverser rapidement. Or la présentation des pages conçues pour être visualisées sur un écran disposant d’une résolution égale ou supérieure à 1024 x 768 (90%+ des visites) n’est pas toujours adaptée à la navigation à partir d’un mobile. Dès lors il convient de mettre en place un mécanisme permettant à ces visiteurs (sur mes sites : actuellement 7% en forte progression) de bénéficier d’une navigation et d’une présentation adaptées afin que du statut de visiteur ils passent à celui de client.

Plusieurs approches sont possibles : un sous-domaine dédié, un jeu de feuilles de style spécifiques, la ré-écriture du site, … En ce qui me concerne, je prévois d’utiliser les possibilités offertes par Zen-Cart afin d’utiliser un template dédié à la plateforme du visiteur. Le mécanisme est simple : on détecte le type de plateforme utilisée et, en fonction de ce type, on utilise un template plutôt qu’un autre. Certains templates présenteront la totalité des informations, d’autre une version simplifiée mieux adaptée à un écran de petite taille.

Voici l’approche que j’ai proposée récemment sur le forum Zen-Cart :

Pour diriger un visiteur sur un template adapté à sa plateforme plutôt qu’un autre, il suffit de faire un override du programme init_templates.php.

Tout d’abord il faut s’assurer de disposer d’un accès au fichier browscap.ini. C’est un des paramètres de php.ini. Téléchargez le fichier browscap.ini (browsers.garykeith.com/downloads.asp) et placez le sur votre serveur. Modifiez la variable browscap = /emplacement/du/fichier/browscap.ini et redémarrez Apache. Vous disposez maintenant d’un certain nombre d’informations sur votre visiteur depuis vos programmes PHP.

Dupliquez le fichier init_templates.php de includes/init_includes vers includes/init_includes/overrides et ajoutez ces quelques lignes juste avant le commentaire « The actual template directory to use » :

/**
* BOF : SPECIFIC TEMPLATE FOR MOBILE CLIENT
*/
/**
* Determine if client is a mobile device or not ($mobile = 1 ==> it is | $mobile = 0 ==> it is not)
*/
$browser = get_browser($_SERVER['HTTP_USER_AGENT'], true);
$mobile = ($browser['ismobiledevice'] == null ? 0 : $browser['ismobiledevice']);
$platform = $browser['browser'];
/**
* Check if there is a specific template for this mobile platform and use it
*/
if ($mobile == 1)
{
$exists_mobile = file_exists(DIR_WS_TEMPLATES . $template_dir . '_mobile');
if ($exists_mobile)
{
$exists_platform = file_exists(DIR_WS_TEMPLATES . $template_dir . '_mobile_' . $platform);
if ($exists_platform)
{
$template_dir .= '_mobile_' . $platform;
}
else
{
$template_dir .= '_mobile';
}
}
else
{
// use regular template
}
}
/**
* EOF : SPECIFIC TEMPLATE FOR MOBILE CLIENT
*/

En utilisant les informations issues du browscap.ini, le programme détermine si le visiteur utilise ou non un mobile (si non : template habituel). Si oui, il vérifie qu’il existe un template spécifique pour sa plateforme et dans ce cas utilise ce template. Le cas échéant il utilise un template générique pour mobiles. Si rien n’existe il utilise le template habituel. Ainsi, si le template standard se nomme monTpl, le template générique pour les mobiles s’appellera monTpl_mobile et il est possible de prévoir des templates adaptés comme : monTpl_mobile_Android, monTpl_mobile_iPhone, … etc

Pour que tout fonctionne correctement, il conviendra également de dupliquer les répertoires de templates dans languages, modules, …

Enfin, il y a de nouvelles plateformes sur le marché presque tous les jours. N’oubliez pas de mettre à jour fréquemment votre browscap.ini.

Virtualiser un ancien PC

Contexte

Equipé de deux PC de bureau depuis deux ans, un ancien sous XP et un plus récent sous Windows 7, j’ai du me séparer récemment du plus récent des deux. J’ai donc installé Windows 7 sur une nouvelle partition créée pour l’occasion sur l’ancien PC.

Pas de problème particulier dans cette opération sinon que pour passer d’un OS à l’autre il me fallait alors arrêter Windows 7 et démarrer XP, ou l’inverse ce qui n’est pas pratique. Je conserve XP car il y a dessus notamment un vieux programme de compta qui m’est bien utile mais que je serai bien en peine de transférer sur le nouvel OS.

Utilisateur depuis quelque temps de solutions de virtualisation (vmWare et VirtualBox), j’ai pensé transformer mon système XP existant en machine virtuelle afin de pouvoir l’utiliser sous Windows 7.

Démarche

La procédure indiquée par VirtualBox pour migrer une installation existante Windows sous VirtualBox m’a paru complexe et dans mon cas peu réaliste car faut faire une image complète du disque (600 Go) puis la transformer en VDI. Or seule la partition XP m’intéresse.

Microsoft propose l’utilisation de Disk2VHD qui permet de faire une image d’une partition, même si le fichier inclut toutes les caractéristiques du disque d’origine. Dans mon cas, le fichier produit ne fait plus que 65 Go. Par ailleurs, VirtualBox peut utiliser nativement les fichiers au format VHD (ceux de Microsoft VirtualPC). Disk2VHD utilise les fonctionnalités de snapshot présentes dans Windows depuis XP SP2. Il peut être exécuté depuis le système que l’on souhaite virtualiser, et permet même de sauvegarder l’image disque sur le disque en question (même si pour des questions de performances il vaut mieux le sauvegarder sur un autre disque).

  • faire le ménage sur le système à virtualiser, afin de minimiser la taille de l’image produite
  • sauvegarder les données critiques (et les autres)
  • télécharger le programme Disk2VHD (ici)
  • faire une copie de la partition souhaitée avec Disk2VHD
Disk2VHD

L'utilisation de Disk2VHD est intuitive et très simple. Parmi les partitions de votre disque, choisissez celle(s) qui vous intéresse(nt), un fichier de destination et Go!

Une fois le fichier image créé (image.vhd), ce qui peut prendre pas mal de temps en fonction de la taille de la partition, on peut quitter le système à virtualiser et aller sur le système hôte.

Sur VirtualBox on créé alors une nouvelle machine virtuelle en lui attachant l’image créée précédemment. Il faut s’assurer que les IO-APIC sont bien activées. Le reste de la configuration est assez simple.

Si le système hôte est sur le même disque que la partition créée le disque hôte et le disque virtuel vont avoir le même UUID. Il faut donc le changer à l’aide de la commande ligne

VBoxManage internalcommands sethduuid

La nouvelle VM est maintenant prête à être lancée. Lors du premier lancement, il est fort probable que Microsoft demande une activation de Windows. Pour être complètement opérationnelle, il faut enfin installer les VirtualBox Guest Additions sur la VM.

Après quelques tests on peut maintenant se séparer définitivement de la partition de l'ancien système.