-
Notifications
You must be signed in to change notification settings - Fork 0
MobileTool
MobileTool est un wrapper ultra-léger autour de la bibliothèque Mobile_Detect v4. Son rôle est de fournir une détection rapide et fiable du type de terminal utilisé par le visiteur afin de permettre au framework d'adapter l'affichage (chargement d'un contexte Smarty spécifique) ou d'exécuter une logique métier dédiée.
Namespace : Magepattern\Component\Tool\MobileTool
Le composant utilise le système de chargement dynamique du Bootstrap pour n'importer la bibliothèque que lorsqu'elle est réellement sollicitée.
use Magepattern\Component\Tool\MobileTool;
// La première détection charge automatiquement le package via le Bootstrap
if (MobileTool::isMobile()) {
// Logique spécifique
}La classe se concentre sur les deux besoins fondamentaux du développement Responsive/Adaptatif.
- Détection Mobile (isMobile) Retourne true si le terminal est un téléphone portable (inclut les smartphones de toute marque).
if (MobileTool::isMobile()) {
// Exemple : Désactiver certains effets visuels lourds
$smarty->assign('is_low_bandwidth', true);
}- Détection Tablette (isTablet) Retourne true si le terminal est une tablette (iPad, Galaxy Tab, etc.).
if (MobileTool::isTablet()) {
// Exemple : Ajuster le nombre de colonnes dans une grille
$smarty->assign('grid_columns', 2);
}Cas pratique : Routage de Template L'utilisation la plus courante dans Magepattern 3 consiste à choisir le contexte Smarty au moment du rendu.
use Magepattern\Component\Tool\MobileTool;
use Magepattern\Component\Tool\SmartyTool;
// Choix du contexte selon le terminal
$context = MobileTool::isMobile() ? 'mobile' : 'frontend';
// Rendu via SmartyTool
SmartyTool::getInstance($context)->display('index.tpl');Bibliothèque : Propulsé par MobileDetectLib (v4.8+).
Performance : L'instance de détection est stockée en Singleton pour éviter de ré-analyser le User-Agent plusieurs fois durant la même exécution.
Mise à jour : Pour supporter les derniers modèles de smartphones (iPhone 16, etc.), il suffit de mettre à jour le dossier package/mobiledetect via Composer sans modifier votre code.
Pour éviter de surcharger les contrôleurs, vous pouvez créer un plugin Smarty qui permet de tester le terminal directement dans vos fichiers .tpl.
- Création du Plugin Créez le fichier suivant dans votre dossier de plugins personnalisé (celui défini dans votre registerContext).
Fichier : function.device.php
Emplacement : /app/plugins/frontend/ (Exemple)
<?php
/**
* Plugin Smarty 5 : Détection de terminal
* Usage : {device type="mobile"} ou {device type="tablet"}
*/
use Magepattern\Component\Tool\MobileTool;
function smarty_function_device($params, $smarty) {
$type = $params['type'] ?? 'mobile';
$result = ($type === 'tablet')
? MobileTool::isTablet()
: MobileTool::isMobile();
// Si un paramètre 'assign' est présent, on stocke dans une variable Smarty
if (isset($params['assign'])) {
$smarty->assign($params['assign'], $result);
return;
}
return $result;
}- Utilisation dans les templates (.tpl) Grâce à ce plugin, vous pouvez adapter votre interface de manière très fluide.
Test direct dans une condition
{if device(type="mobile")}
<div class="alert">Format optimisé pour smartphone</div>
{/if}
{if device(type="tablet")}
<div class="sidebar">Menu spécial Tablette</div>
{/if}Assignation pour un usage répété
{device type="mobile" assign="isMobile"}
<header class="{if $isMobile}header-compact{else}header-full{/if}">
<h1>Mon Site</h1>
{if !$isMobile}
<nav>...Menu étendu...</nav>
{/if}
</header>Pour que ce plugin soit opérationnel, vérifiez que votre contexte Smarty pointe bien vers le dossier contenant le fichier :
SmartyTool::registerContext('frontend', [
'template_dir' => '/var/www/html/themes/site/templates',
'plugins_dir' => '/var/www/html/app/plugins/frontend', // Le dossier du plugin
]);