pour cloner un module
Catégorie : Comment faire ...

Ce guide est rédigé à  l'intention des utilisateurs qui veulent installer deux fois le même module. Il leur faudra cloner le module original afin de pouvoir l'installer en double.

1) Préliminaire

Le clonage d'un module n'est pas une opération extrêmement compliquée, mais peut se révéler fastidieuse.
La difficulté sera três variable d'un module à  l'autre:
- certains modules seront plus difficiles à  cloner, en particulier s'ils ne respectent pas les conventions d'écriture, ne sont pas homogênes dans cette écriture, n'utilisent pas les fonctions de xoops pour l'accès à  la bdd, etc. Il n'est pas certain qu'ils vaillent le coup d'être clonés !
- d'autres modules, bien codés, seront assez faciles à  cloner.

Mieux vaut disposer d'un bon éditeur permettant de faire les remplacements sur tout un répertoire: le risque d'erreur est plus important, mais en cas de réussite, c'est nettement plus rapide. Faites ce remplacement en pas à  pas en activant l'option de respect de la casse.
Si vous optez pour cette solution, réfléchissez au contenu et à  l'ordre de vos remplacements, afin de ne pas les cumuler (genre 'news' transformé en 'news0202' au lieu de 'news02').

Ce tuto vous explique la marche à  suivre en se basant sur le module de news de xoops.
En principe toutes les modifications sont décrites, en ommettant celles que l'on pourait croire nécessaires, et qui ne le sont pas!
Maintenant à  vous de l'adapter !
Et attendez d'avoir terminé pour installer et tester votre clone.

2) Le répertoire

3) Les tables

4) Les définitions de language (modinfo.php)
Vous devrez renommer toutes les définitions de langage du fichier modinfo.php, pour éviter notamment qu'elles soient déclarées 2 fois et génêrent des Warning en mode debug php.
En principe, les autres fichiers de langues n'ont pas besoin d'être modifiés, mais vous pouvez le faire pour des questions de cohérence.
Pas três facile de décrire une méthode, tout dépendra du module.
Si toutes les variables sont préfixées (ex) _MI_NEWS_ faites un remplacement global de_MI_NEWS_ par _MI_NEWS02_
Idem si elles sont toutes préfixées _MI_ faites un remplacement global de _MI_ par _MI_NEWS02_ p.ex.
Si c'est un mixte, attention à  ne pas vous retrouver avec des _MI_NEWS02_NEWS02_ p.ex.
NB : si vous ne réalisez pas entiêrement cette partie, à  la fin du clonage, installez et lancez le module en mode debug php: corrigez les defines générant un warning.

5) Fonction recherche

6) Blocs

7) Commentaires

8) Notification

9) Les templates

10) Le logo

11) Pour finir
Allez dans l'administration des modules: votre clone doit apparaitre sans message d'erreur. Si c'est le cas, inutile d'aller plus loin !
Installez votre clone. Si vous avez des messages d'erreur à  l'install, notez les pour corriger.
Lancez votre clone. Activez le mode debug php pour corriger les erreurs.
Testez toutes les configurations de blocks et fonctionnalités (recherche, commentaires, notification).
Ces tests doivent être réalisés dans les 2 cas de figure:
- avec la version originale installée, pour détecter des conflits ou interactions
- sans la version originale installée (répertoire supprimé, ou temporairement renommé) pour vérifier que votre clone est autonome, et que certains fichiers ne pointent pas sur ceux d'origine.

12) Problêmes courants
- Vérifiez bien que les données de l'original ne s'affichent pas dans votre clone, ou que l'insertion de données du clone ne se fasse pas dans l'original. Vous auriez dans ce cas oublié de renommer certaines références aux tables.

- Fatal error: cannot redeclare ... Ce cas a été rencontré avec WFSection lors de l'accès à  userinfo: l'original et son clone font chacun un 'include' de groupaccess.php, et les fonctions de ce fichier portant le même nom, Php refuse de les redéclarer.
Il est possible, soit de faire pointer le clone sur le fichier groupacces.php de l'original, soit de renommer toutes les fonctions de ce fichier, ainsi que les appels à  ces fonctions. Cette seconde solution est préférable, car elle rend votre clone autonome, et évite un problême en cas de désinstallation et suppression de l'original.

<a href="http://creativecommons.org/licenses/by-nc-sa/2.0/fr/" title="Licence, certains droits réservés"><img src="http://www.frxoops.org/images/cdr_bouton.gif" alt="Licence, certains droits réservés" /></a>