Fork me on GitHub




(1) 2 »


Hack "Intégration/gestion des thémes pour mobiles"
Admin Frxoops
Inscrit: 05/03/2005 05:20
De Vaucluse
Messages: 960
Bonjour à tous,

Aujourd'hui je vous propose un petit tuto (@alain01 ) afin d'intégrer la gestion des thèmes pour appareils mobiles (smartphones, tablettes) à notre xoops préféré. Ce hack n'est peut être pas le mieux que l'on puisse faire et mérite certainement d'être amélioré (autre script de détection, optimisation du code...) mais il fonctionne parfaitement.
Testé sur 2.5.5 et 2.5.6 (mais doit pouvoir être simplement adapté aux versions antérieures).Les indications de lignes à insérer ou modifier dans le code correspondent à la version 2.5.6 de xoops.

Le principe est assez simple (même si il a nécessité pas mal de tortures pour mes pauvres neurones afin de le mettre en œuvre):

1- Détecter si le site est visité depuis un appareil mobile.
2- Stocker le résultat dans une variable de session.
3- Rediriger vers un thème mobile si site visité depuis appareil mobile.
4- Créer une variable smarty système utilisable dans tous les templates du site.
5- Piloter le tout depuis les préférences générales d'administration du système.

ATTENTION: Sauvegardez votre site et vos bases avant toutes modifications.

1- Récupérer la classe mobile_detect (Download en haut à gauche de la page) qui permet de détecter les appareils mobiles et copier le fichier mobile_detect.php dans /include.
Cette classe comporte pas mal d'options, je vous laisse le plaisir de les découvrir et éventuellement de les rajouter à mon code.

2- Rajouter dans /include/common.php ligne 88 (dans * Include Required Files *)
include_once $xoops->path('include/mobile_detect.php');

3- Rajouter dans index.php (ligne 24) aprés
include dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mainfile.php';
//hack mobile detect V2
//création variable de session et redirection vers théme approprié si appareil mobile et redirection activée.
if ($xoopsConfig['mobile_active'] ==1) {
    
$detect = new Mobile_Detect;
    if(!
$_SESSION['xoopsIsMobile']){
        if (
$detect->isMobile() ) {  // Tous les appareils mobiles.
            
$_SESSION['xoopsIsMobile'] = 1;
            
redirect_header$_SERVER['HTTP_REFERER']."index.php?xoops_theme_select=".$xoopsConfig['mobile_theme'], 0'');
            exit;
        }
    else { 
$_SESSION['xoopsIsMobile'] = 0;}
    }
}
else { 
$_SESSION['xoopsIsMobile'] = 0;}
// end hack

4- Ajout des variable de préférences systéme dans la partie administration:
- Dans /module/system/language/french/admin/preferences.php insérer (ligne 34):
define('_MD_AM_MTHEMEACTIVE',"Activer la redirection mobile");
define('_MD_AM_MTHEMEACTIVEDSC',"Permet de rediriger les appareils mobiles vers un théme spécifiquement adapté");
define('_MD_AM_MTHEME',"Thème mobile par défaut");
define('_MD_AM_MTHEMEDSC',"Théme spécifique si la redirection mobile est activée");

- Dans la base de données rajouter dans la table config les deux enregistrement suivants:

>> Attention: ne rien mettre dans conf_id (AUTOINCREMENT) <<

conf_modid -> 0
conf_catid -> 1
conf_name -> mobile_active
conf_title -> _MD_AM_MTHEMEACTIVE
conf_value -> 0
conf_desc -> _MD_AM_MTHEMEACTIVEDESC
conf_formtype -> yesno
conf_valuetype -> int
conf_order -> 43

conf_modid -> 0
conf_catid -> 1
conf_name -> mobile_theme
conf_title -> _MD_AM_MTHEME
conf_value -> default
conf_desc -> _MD_AM_MTHEMEDESC
conf_formtype -> theme
conf_valuetype -> other
conf_order -> 44

- Mettre à jour le module systéme

- Aller dans administration-> Préférences -> Paramétres généraux et vérifiez en bas de la page (juste avant les options de caches) la présence des deux nouveaux champs.
Open in new window
Pour tester cocher oui pour la redirection mobile et choisir un théme différent de celui par défaut du site.

5- Création de la variable smarty systéme

- Dans /class/theme.php insérer dans la fonction xoInit (ligne 265):
'xoops_ismobile' => htmlspecialchars($_SESSION['xoopsIsMobile'], ENT_QUOTES),

- Dans /include/functions.php insérer dans la function redirect_header (ligne 593):
'xoops_ismobile' => htmlspecialchars($_SESSION['xoopsIsMobile'], ENT_QUOTES),

Ce qui nous permet d'avoir maintenant notre smarty système <{$xoops_ismobile}> utilisable dans tous les templates de tous les modules (et même dans la partie administration).

A utiliser ainsi dans les templates:
<{if $xoops_ismobile == 0}>
Code du template normal ici
<{else}>
Code du template mobile ici
<{/if}>

Il ne vous reste plus qu'à écrire un théme adapté aux mobiles et modifier les templates de vos modules pour que votre site soit enfin visible sur nos petits smartphones ou tablettes. .

IMPORTANT: Pensez à mettre le thème mobile dans "Thèmes disponibles pour les utilisateurs" dans les paramètres généraux de votre site.

Posté le : 04/07/2013 00:45

Edité par tatane sur 07/07/2013 17:49:47
Partager Twitter Partagez cette article sur GG+
Re: Hack "Intégration/gestion des thémes pour mobiles"
Xoops accro
Inscrit: 27/07/2005 16:10
De France
Messages: 2970
Bonjour slider84
Tous d'abord merci pour ce tuto et détaillé.Cependant ce qui serait bien c'est de savoir pour les mobiles ou tablettes :
• Quelle est mieux entre le système de de mobile_detect ou un thème 100% responsive ?

Posté le : 04/07/2013 09:38
Partager Twitter Partagez cette article sur GG+
Re: Hack "Intégration/gestion des thémes pour mobiles"
Admin Frxoops
Inscrit: 04/03/2011 09:10
De Lot
Messages: 2837
la différence entre les deux :
- mobile_detect
- utilise des ressources serveurs, donc limite le nombre de visiteurs simultanés
- la page se charge légèrement plus vite.
- fonctionne correctement tant que la bibliothèque est a jour, risque de ne pas reconnaître un nouvel appareil tant que la mise à jour n'est pas faîte.
- Très facile a mettre en place

- thème 100% responsive
- utilise les ressources du navigateur, économise les ressources serveurs, utile lorsque il y a beaucoup de visiteurs.
- Fichier CSS plus gros donc un peu plus long a chargé.
- se base sur la largeur de l'écran, donc pas de soucis avec les nouveaux appareils.
- demande des connaissances en CSS "niveau averti"

Posté le : 04/07/2013 10:16
Partager Twitter Partagez cette article sur GG+
Re: Hack "Intégration/gestion des thémes pour mobiles"
Admin Frxoops
Inscrit: 04/03/2011 09:10
De Lot
Messages: 2837
Citation :

>> Attention: ne rien mettre dans conf_id (AUTOINCREMENT) <<

conf_modid -> 0
conf_catid -> 1
conf_name -> mobile_active
conf_title -> _MD_AM_MTHEMEACTIVE
conf_value -> 0
conf_desc -> _MD_AM_MTHEMEACTIVEDESC
conf_formtype -> yesno
conf_valuetype -> int
conf_order -> 43

conf_modid -> 0
conf_catid -> 1
conf_name -> mobile_theme
conf_title -> _MD_AM_MTHEME
conf_value -> default
conf_desc -> _MD_AM_MTHEMEDESC
conf_formtype -> theme
conf_valuetype -> other
conf_order -> 44

fonctionnera donc jusqu'à la prochaine mise à jour du système

vaut mieux le mettre dans xoops_version.php au niveau des conf, je donne un exemple pour le premier
$i++;
$modversion['config'][$i]['name'] = 'mobile_active';
$modversion['config'][$i]['title'] = '_MD_AM_MTHEMEACTIVE';
$modversion['config'][$i]['description'] = '_MD_AM_MTHEMEACTIVEDESC';
$modversion['config'][$i]['formtype'] = 'yesno';
$modversion['config'][$i]['valuetype'] = 'int';
$modversion['config'][$i]['default'] = '1';


Posté le : 04/07/2013 10:24
Partager Twitter Partagez cette article sur GG+
Re: Hack "Intégration/gestion des thémes pour mobiles"
Xoops accro
Inscrit: 27/07/2005 16:10
De France
Messages: 2970
Citation :
montuy337513 a écrit :
la différence entre les deux :
- mobile_detect
- utilise des ressources serveurs, donc limite le nombre de visiteurs simultanés
- la page se charge légèrement plus vite.
- fonctionne correctement tant que la bibliothèque est a jour, risque de ne pas reconnaître un nouvel appareil tant que la mise à jour n'est pas faîte.
- Très facile a mettre en place


De plus il faut faire un thème par résolution

Posté le : 04/07/2013 11:38
Partager Twitter Partagez cette article sur GG+
Re: Hack "Intégration/gestion des thémes pour mobiles"
Admin Frxoops
Inscrit: 05/03/2005 05:20
De Vaucluse
Messages: 960
Merci à tous les deux pour vos remarques et commentaires.

Il y a un post assez récent que je n'avais pas vu très intéressant sur le sujet, je profite de l'occasion pour remettre le lien ici pour ceux qui seraient intéressés..

Etant une buse en html5 et css je suis parti sur l'option de deux thèmes séparés et reprise des templates des modules et un peu de php que je maîtrise mieux.

@montuy337513:
Merci pour tes commentaires sur le code.
Citation :
vaut mieux le mettre dans xoops_version.php au niveau des conf, je donne un exemple pour le premier
J'y avais bien pensé mais je n'étais pas sûr que cela fonctionne .
Citation :
fonctionnera donc jusqu'à la prochaine mise à jour du système
Les deux variables restent dans la base et a l'écran malgré la mise à jour du module système... Un petit bug peut être ?
Bon, pour le plaisir (et surtout pour apprendre) je vais faire un mix des deux solutions: Mon thème standard pour les fixes et un en 100% responsive très 'light' 1 colonne pour les mobile (ce qui résoudra le probléme de résolutions) en gardant ma redirection avec mobile_detect.

Posté le : 04/07/2013 23:04
Partager Twitter Partagez cette article sur GG+
Re: Hack "Intégration/gestion des thémes pour mobiles"
Xoops accro
Inscrit: 27/07/2005 16:10
De France
Messages: 2970
Citation :
slider84 a écrit :
Mon thème standard pour les fixes et un en 100% responsive très 'light' 1 colonne pour les mobile


Si tu par sur de bonne bas comme bootstrap,tu peux faire des deux colonnes car en version mobile elle passerons en dessus du content

Posté le : 05/07/2013 09:49
Partager Twitter Partagez cette article sur GG+
Re: Hack "Intégration/gestion des thémes pour mobiles"
Admin Frxoops
Inscrit: 05/03/2005 05:20
De Vaucluse
Messages: 960
Citation :
Si tu par sur de bonne bases comme bootstrap,tu peux faire des deux colonnes car en version mobile elle passerons en dessus du content

Merci pour l'info. Une seule colonne suffira pour le contenu mobile que je prévois de diffuser en version mobile. Effectivement, une bonne occasion pour regarder de plus prés bootstrap
A ce sujet, tu sais si il cohabite bien avec Jquery UI ?

Posté le : 05/07/2013 17:45
Partager Twitter Partagez cette article sur GG+
Re: Hack "Intégration/gestion des thémes pour mobiles"
Xoops accro
Inscrit: 27/07/2005 16:10
De France
Messages: 2970
Citation :
slider84 a écrit :
A ce sujet, tu sais si il cohabite bien avec Jquery UI ?


Aucune idée,j'utilise celui présent dans bootstrap qui est déjas bien fournis

Posté le : 05/07/2013 18:22
Partager Twitter Partagez cette article sur GG+
Re: Hack "Intégration/gestion des thémes pour mobiles"
Admin Frxoops
Inscrit: 05/03/2005 05:20
De Vaucluse
Messages: 960
@montuy337513
Citation :
fonctionnera donc jusqu'à la prochaine mise à jour du système

vaut mieux le mettre dans xoops_version.php au niveau des conf, je donne un exemple pour le premier
$i++;
$modversion['config'][$i]['name'] = 'mobile_active';
$modversion['config'][$i]['title'] = '_MD_AM_MTHEMEACTIVE';
$modversion['config'][$i]['description'] = '_MD_AM_MTHEMEACTIVEDESC';
$modversion['config'][$i]['formtype'] = 'yesno';
$modversion['config'][$i]['valuetype'] = 'int';
$modversion['config'][$i]['default'] = '1';

Les deux variables restent dans la base et à l'écran malgré la mise à jour du module système...
Je ne trouve aucune trace des variables des paramètres généraux dans tous les xoops_version en faisant une recherche 'full text', juste les traductions dans les fichiers de langues.
Je pense qu'elles sont bien codées en dur dans la base...

Posté le : 06/07/2013 19:38
Partager Twitter Partagez cette article sur GG+

 Haut   Précédent   Suivant
(1) 2 »



Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

107 Personne(s) en ligne (82 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 0 | Invité(s): 107 | Plus ...