Animint

  Anime & manga

 
 
“Animint traite des dessins animés japonais et du manga. Outre ce blog, le site comporte plusieurs milliers de pages de texte illustré.”

Expérience sur Animint pour passer des modules aux extensions en phpBB3

Par le :: Webmastering

webmastering , 2017

Cela fait plusieurs années que j'ai passé le forum d'Animint en phpBB3 et ai passé quelques mises à jour mineures jusqu'à la version 3.0.14. Pendant ce temps, la distribution officielle du programme phpBB a évolué et a notamment lancé une branche 3.1.x. Au niveau de la notation, il n'y a pas beaucoup de différence mais au niveau du code, la structure a été profondément remaniée avec deux freins importants à mes yeux pour franchir le pas et adopter cette nouvelle version : Le script de migration ne fonctionnait pas quand vous utilisez une base postgreSQL comme c'est le cas pour Animint et aucun module personnalisé n'est compatible entre la 3.0.x et la 3.1.x

Extension phpBB

La distribution propose un socle de base pour le forum et tout l'intérêt réside ensuite dans la possibilité de modifier l'apparence via les templates, mais aussi les fonctionnalités via les modules. Dans mon cas, j'avais également développé mes propres modules dont le jeu Animint no Sekai.

J'ai laissé la situation telle quelle jusqu'au moment où la branche 3.0.x est arrivée en fin de vie en décembre 2016, ce qui signifie l'arrêt des mises à jour dites de sécurité, et il n'est pas conseillé de conserver en ligne des versions obsolètes notamment pour du phpBB largement répandu et assujetti à des attaques régulièrement.

Dans ce contexte, j'ai d'abord exploré la piste de prendre un nouveau logiciel pour le forum, en testant plusieurs tels que Simple Machines Forum ou encore punBB. À chaque fois, j'ai été relativement déçu par les scripts de migration et pas très enthousiasmé par les modules de personnalisation disponibles. Une autre caractéristique est que la base d'utilisateurs du forum me sert également pour le site et changer de système m'aurait aussi forcé à faire des adaptations sur le code du site.

Cela était aussi dommage de mettre Animint no Sekai au rébus mais je ne me voyais pas non plus tout refaire depuis zéro, ce qui aurait représenté quelques semaines d'effort pour le développeur que je suis à mes heures perdues.

Extension phpBB

Après ces considérations, je suis revenu plus attentivement sur la version 3.1.x de phpBB alors même que la 3.2.x arrivait incessamment sous peu. La première étape a été de débogué le script de migration officiel pour passer de 3.0.14 à la 3.1.10 en corrigeant ce qui n'avait pas été testé pour postgreSQL et qui ne marchait pas, tout en le signalant, ce qui fait que c'est maintenant réglé dans la distribution officielle.

La suite a été de voir comment je pouvais adapter mes modules maison dans la nouvelle monture. Cette dernière s’appuie sur les mêmes concepts que le framework Symfony et quelques notions de PHP que je n'avais pas forcément l'habitude d'utiliser, ou du moins, je m'en passais très bien.

Sans entrer dans les détails, l'essentiel du travail est de faire entrer le code de son module dans cette nouvelle structure et le concept change d'ailleurs de nom, vu qu'on parle d'extensions à partir de la 3.1.x et non plus de modules. En 3.0.x, il y avait déjà quelques directives pour placer ses nouveaux fichiers mais en 3.1.x, la disposition est beaucoup plus stricte.

J'en ai surtout bavé pour comprendre où placer les éléments mon extensions dans une arborescence et la logique pour les relier entre eux, mais en ayant eu une approche standard modèle-vue-contrôleur, ce n'est pas la révolution et l'exercice a juste été de ventiler mon code existant entre les différents répertoires.

Le forum phpBB procure un modèle de base simplifié pour s'en inspirer mais le mieux est de repartir du code des extensions un peu similaires à ce que voulez faire. Il y a quelques pratiques dont je ne discerne pas les détails mais je les ai appliquées telles quelles, sans me poser de question, du moment que cela fonctionne.

Il y a aussi quelques écueils de base à éviter, à savoir par exemple rafraîchir le cache du forum quand on touche un certain type de fichiers alors que d'autres sont pris en compte tout de suite.

Il est difficile d'entrer dans la logique des extensions si vous n'avez pas l'habitude de Symfony mais c'est quand même beaucoup plus propre. Non seulement parce que c'est plus structuré mais surtout parce que votre code est à part, même lorsque vous voulez modifier les comportements de base du forum. Il est inutile de traficoter le code officiel pour rajouter un paramètre en plus dans une fonction. Vous pouvez faire en sorte que votre fonction prenne le dessus sur la version originale.

C'est quand même plus simple pour la maintenance et les applications de mises à jour. En 3.0.x, le script de migration proposait de fusionner les fichiers officiels avec les modifications personnalisées qu'il avait trouvées, mais j'avais toujours un ou deux cas, où il y avait conflit et il fallait bien choisir ce qu'il fallait conserver.

D'autres aspects sont mieux gérés telle que les tâches planifiées. Sur le fond, la version la plus complète passe toujours par une petite image chargée par le visiteur, qui déclenche ou pas une action, mais au moins le réceptacle du code est structuré. Il faut un minimum d'outils pour capturer les traces car en mode programmé, les messages n'apparaissent pas d'office à l'écran. Il existe aussi une manière pour lancer une vraie crontab depuis le système d'exploitation, sans dépendre des visites sur son forum, mais des objets ne sont pas instanciés par défaut. Par exemple, l'objet lié au profil de l'utilisateur n'est pas initialisé car il n'y a pas d'utilisateur défini sous ce mode système.

Extension phpBB

Une autre nouveauté que j'aime bien est au niveau des templates, avec la possibilité de définir le modèle par défaut et de sélectionner quelques fichiers à personnaliser sans avoir à tout recopier dans le répertoire de son style. Si un fichier manque, phpBB va le lire dans le répertoire du style par défaut. Là aussi, il est possible de mettre des sous éléments de templates qui prennent le dessus ou qui s'insère dans le template par défaut.

J'ai un tout petit peu exploité la fonctionnalité en adaptant la barre de navigation d'Animint no Sekai mais honnêtement, je ne vois pas trop l'intérêt de cette épicerie fine au niveau des templates. Les concepteurs sont partis aussi du principe qu'on n'avait pas à toucher à aucun élément du noyau du style de base, mais là, c'est plutôt mal vu, surtout lorsqu'on a déjà la possibilité de personnaliser un seul fichier.

Il y aussi une gestion plus rigoureuse des changements en base de données et de l'initialisation des données quand l'extension en a besoin, ainsi que le nettoyage quand on souhaite désinstaller l'extension. Je n'en ai pas l'usage pour mes propres modules mais c'est effectivement appréciable et évite les manipulations fastidieuses en base de données pour nettoyer les traces des modules que j'avais en 3.0.x et qui n'étaient plus compatibles.   

Au niveau du code, phpBB comporte toujours des excentricités telle que le dictionnaire de tous les termes qui est uniquement associée à l'utilisateur encore en 3.1.x Du coup, le mode crontab système ne peut pas envoyer de mails qui s'appuie sur le dictionnaire si vous n'avez pas instancié un utilisateur fictif. En 3.2.x, ils ont modifié la structure et créer un objet langue à part.

Extension phpBB

Le passage de 3.1.x en 3.2.x est beaucoup moins perturbant, avec finalement très peu d'impacts et surtout une compatibilité des extensions entre les deux versions.

Il y a eu des améliorations théoriques avec des classes et des containers, dont j'ai souvent du mal à suivre la logique et leur utilisation, à défaut de pouvoir juger leur utilité, mais le code de phpBB traîne comme un boulet un certain nombre de fonctions et de variable globales, et pas les moindres. La fonction pour poster un message fait trois kilomètres de longs avec un appel de toutes les variables globales que peut comporter le forum. Personne ne s'amuse à la réécrire ou à l'adapter donc vous avez souvent au milieu d'un contrôleur un include du fichier avec la fonction et un "bel" appel en plein milieu de la classe, où toutes les variables ont pourtant été proprement passées à la création au niveau du constructeur mais pour des prunes étant donné que la fonction utilise les objets globaux.

Vous avez ainsi quelques fonctions phpBB du même acabit et pas qu'un peu utilisé. A priori cela devrait changer quand je lis les commentaires dans le code officiel qui remarque qu'il faudrait changer cela un jour. D'un autre côté, ce sera synonyme de réadaptation pour remplacer ces appels de fonction.

Pour revenir à la migration des modules en extensions, je suggère de commencer par quelque chose de simple. Le plus dur est d'entrer dans la nouvelle structure et la logique. Je vous conseille également de lire les messages des développeurs d'extension dans le forum officiel de phpBB, pour éviter de glisser sur les mêmes peaux bananes. Il y a le truc tout bête du cache mais aussi par exemple, l'utilisation stricte de 4 espaces dans un fichier de configuration et non pas de la tabulation, par exemple. Souvent, c'est assez sournois quand même.

La documentation est malheureusement assez déconcertante. Pas qu'elle soit mal faite mais elle située à part et on ne sait plus trop qu'elle est la référence du coup. Elle m'a surtout découragé au premier abord, avec le sentiment que c'était compliqué et fastidieux. Une fois compris le principe, c'est beaucoup moins dur que cela en a l'air. J'ai transformé mon petit module pour poster des sujets au sujet des articles en une poignée d'heures, surtout parce que je découvrais la logique.

Pour Animint no Sekai, la première étape a été d'identifier les éléments et de les répartir. La réécriture a surtout concerner les noms de variables et leurs transformations en attributs d'objet. Quelques rustines ont demandé des adaptations mais c'était du classique et c'était bien signalé dans la documentation. J'ai été plus gêné par la conservation des fonctions "globales" qui continuent à marcher dans la nouvelle structure, sans avoir d'équivalent.

La dernière extension en date que j'ai codée n'était pas dans le forum précédent. Il s'agit d'une passerelle qui lit automatiquement le fil du compte Twitter du site et qui rapatrie uniquement les tweets qui traitent des précommandes des figurines et les postent ensuite en bloc dans le forum, dans la rubrique des actualités.

Extension phpBB

La combinaison Symfony et composer permet d'importer les bonnes bibliothèques comme par magie, le reste étant du code assez sommaire à mettre cependant à la fin en crontab et donc à tester assez intensivement avant. Le côté magique pour intégrer les dépendances a cependant l'inconvénient d'alourdir la taille des fichiers proprement dits. Si vous abusez des dépendances, vous pouvez vous retrouvez avec des duplications de fichiers pas forcément nécessaires et plusieurs mega octets en trop, même si votre code dans l'extension ne fait que quelques kilo octets. 

Après tous ces efforts, je réfléchie (un peu) à comment revitaliser les forums et sa fréquentation, même si ce n'est plus dans l'air du temps. Cependant, je regarde pour l'instant les problèmes techniques donc si vous voyez des choses qui ne fonctionnent pas, vous pouvez le signaler. J'essaierai d'y remédier dans la mesure de mes capacités. Certains ont eu des bugs que je n'arrive pas à reproduire ^^;  

Extension phpBB

Discuter de ce billet sur le forum - - Laisser un commentaire »

Cet article vous a plu?

Faites-le connaître ou votez pour cet article sur les sites suivants :

  • anime manga aggregator sama
  • Partager sur del.li.cious
  • Partager sur Facebook
  • Partager sur Google

Ajoutez votre commentaire:

Merci de bien vouloir soigner votre orthographe et de proscrire le style SMS.


Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

 

↑ Haut de page