I. Introduction▲
I-A. Remerciements▲
Je remercie Florian et Alexandre pour avoir essayé les scripts sur la machine de développement.
I-B. Préambule▲
L'un des forums dont je m'occupe (en dehors de Developpez) a grossi avec le temps, à tel point qu'il a été temps de réfléchir à son évolution. Après concertation, nous avons décidé de le diviser : le forum principal serait dédié au cinéma, tandis que tous les sujets traitant d'un thème différent (culture, loisirs, etc.) seraient déplacés dans un site distinct. Cependant, ne voulant pas obliger les membres actuels à s'enregistrer sur le nouveau forum (ce qui les ferait probablement partir), nous avons réfléchi à un moyen de partager la base de données entre les deux forums.
Puisque nous utilisons phpBB2 depuis plusieurs années, les scripts de notre installation phpBB2 sont très largement modifiés et cela nous demanderait beaucoup d'efforts de changer de technologie de forum. De plus, où serait le défi technique ? ;-)
Ainsi, cet article décrit la méthode que j'ai suivie pour permettre à plusieurs installations de phpBB2 (sur le même serveur) de partager la même base de données. Tout est prévu pour avoir les mêmes utilisateurs sur les deux sites et pour permettre à un administrateur de déplacer des sujets (catégories, forums ou discussions) d'un site à l'autre.
Il ne s'agit pas ici de vous livrer un paquetage clefs en main. Je n'ai pas l'intention d'adapter ce tutoriel à toutes les déclinaisons de phpBB, je décrirai simplement la procédure pour le paquetage officiel, à vous de faire le reste du chemin. Cela dit, vos questions seront les bienvenues sur les forums ;)
I-C. Contraintes techniques▲
La seule réelle contrainte est la possibilité d'utiliser des Vues SQL.
Avantage d'utiliser des Vues : nous n'avons pas à toucher aux requêtes de type « SELECT » (qui constituent la très large majorité des requêtes dans phpBB).
Inconvénient : selon le SGBD, il n'est pas toujours possible de modifier ou de supprimer au travers des Vues. Dans mon cas, MySQL 5 permet la modification, mais pas la suppression : je devrai modifier les requêtes de type « DELETE » qui touchent à des vues, mais les requêtes de type « UPDATE » n'ont pas besoin d'être modifiées pour cette raison.