Skip to content
Gérits Aurélien edited this page Feb 18, 2026 · 2 revisions

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

Initialisation

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
}

Méthodes Disponibles

La classe se concentre sur les deux besoins fondamentaux du développement Responsive/Adaptatif.

  1. 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);
}
  1. 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');

Notes Techniques

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.

Extension : Utiliser MobileTool dans Smarty

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.

  1. 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;
}
  1. 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>

Configuration Requise

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
]);

Clone this wiki locally