L'architecture de PHPBoost se décompose en deux principales parties qui sont le noyau et les modules. Les modules s'appuient sur le noyau pour fonctionner, mais le noyau n'a en aucun cas besoin des modules pour fonctionner. D'ailleurs, il ne les connait pas et peut très bien fonctionner sans module, bien que l'intérêt en soit très réduit. C'est la raison pour laquelle nous pouvons installer ou désinstaller des modules sans aucune contrainte.
Tout cela passe par un standard que les modules doivent respecter de façon à pouvoir s'intégrer à PHPBoost. Cet article va vous permettre de pouvoir créer vos propres modules que vous pourrez installer sur PHPBoost.
Préambule
Cet article n'est en aucun cas un cours de PHP. Pour créer un module pour PHPBoost, il est indispensable de maîtriser les bases du langage PHP. Mais une application Web (PHPBoost en est une et donc votre module aussi) ne se réduit pas uniquement au PHP, il est aussi nécessaire de maitriser les langages de présentation de site Web (HTML, CSS et éventuellement Javascript) et d'intéragir avec une base de données MySQL.
La connaissance de la langue anglaise est aussi fortement recommandée car la documentation de l'environnement de PHPBoost est écrite uniquement en anglais.
Il vous faudra également de la détermination, car même si l'intégration d'un module à PHPBoost a été facilitée au maximum, vous rencontrerez surement des difficultés. Dans ce cas, n'hésitez pas à demander de l'aide sur le forum de support, vous y trouverez toute l'assistance technique nécessaire.
Cet article va vous guider pas à pas dans la création d'un module. Nous vous conseillons d'y consacrer un certains temps afin de vous familiariser avec les différentes notions présentes dans PHPBoost.
Un module = 1 répertoire
Votre module se présentera sous la forme d'un répertoire.
Il est maintenant temps de savoir comment s'appellera votre module, ou du moins le dossier de votre module. Il ne doit pas contenir de caractères spéciaux ni d'espaces et ne pas être trop long. En fait, ce nom apparaîtra dans les URL des pages, c'est la raison pour laquelle vous devez choisir un nom simple.
Le nom que vous donnez à votre dossier sera l'identifiant de votre module et sera utilisé à de nombreuses reprises par la suite de son développement, donc décidez vous une bonne fois pour toute car son changement aura d'importantes conséquences.
Exemples d'identifiants de modules : forum, wiki, news, articles...
Nous allons dans les exemples qui vont suivre créer un module qui s'appellera "mymodule". Créez donc un dossier
mymodule à la racine du site.
Les langues
Ce paragraphe explique comment développer un module en faisant en sorte qu'il puisse être traduit en n'importe quelle langue seulement en y ajoutant un fichier.
Vous trouverez des explications sur l'intérêt de l'internationalisation, la façon selon laquelle PHPBoost la gère et comment l'utiliser sur
cette page.
La mise en pratique
Créez un dossier
lang dans le répertoire de votre module.
Créez un dossier
french dans le répertoire
lang que vous venez de créer.
Enfin créez un fichier
mymodule_french.php dans le répertoire
french.
A noter que le fichier doit respecter la forme mymodule_langue.php, ici mymodule_french.php
L'arborescence de votre module devrait être celle-ci :
lang
lang/french
lang/french/mymodule_french.php
Dans le fichier
mymodule_french.php, placez le contenu suivant :
Code PHP :<?php
global $MYMODULE_LANG;
$MYMODULE_LANG = array();
$MYMODULE_LANG['hello_world'] = 'Bonjour tout le monde !';
?>
Les templates
La partie interface utilisateur de PHPBoost est régie par un système de templates. Le dossier présentant l'architecture technique de PHPBoost vous aidera certainement à comprendre cette notion et à la situer parmi les différentes couches du CMS.
Principe, fonctionnement et utilisation du moteur de templates de PHPBoost
Vous trouverez des informations sur le fonctionnement et l'utilisation du moteur de templates sur
la page qui lui est consacrée.
Mise en place dans votre module
Créez un dossier
templates dans le dossier de votre module, puis pour commencer créez un fichier
mymodule.tpl dans le répertoire
templates.
Votre arborescence devrait ressembler à ceci :
templates
templates/mymodule.tpl
Dans le fichier
mymodule.tpl, placez le contenu suivant :
Code TPL :Mon premier module PHPBoost qui affiche : {L_HELLO_WORLD}
Le fichier de configuration
Votre module a certaines propriétés que le noyau doit pouvoir connaître pour pouvoir travailler avec lui. En outre cela permet de donner des informations aux personnes tierces qui pourrait utiliser votre module. Ces informations sont regroupées en un seul fichier de configuration.
Ce fichier appelé config.ini, est dépendant de la langue, par conséquent il doit se trouver dans le répertoire
lang/nomdelalangue/.
Dans notre exemple créez un fichier
config.ini dans le répertoire
lang/french que nous avons créé dans la partie concernant les langues.
Votre arborescence devrait ressembler à ceci :
lang
lang/french
lang/french/mymodule_french.php
lang/french/config.ini
Dans le fichier config.ini, placez le contenu suivant :
Code TEXT :name="Mon Module"
author="Moi"
author_mail="moi@mail.com"
author_link="http://www.votresite.com"
version=1.0
info="Mon module de test."
date="01/09/09"
compatibility="3.0"
admin=""
admin_links=""
css=0
cache=0
sql_table=0
starteable_page=""
contribution_interface=""
com=""
note=""
mini_module=""
url_rewrite=""
Pour l'instant peu de fonctionnalités sont utilisées dans notre module. Par la suite nous serons amenés à modifier ce fichier afin d'ajouter de nouvelles possibilités à notre module.
L'interface de communication
La communication inter-modules
Afin de pouvoir implémenter des fonctionnalités particulières, il est indispensable que le noyau et les modules puissent communiquer.
Le
dossier présentant les nouveautés de PHPBoost 3.0 explique quels sont les enjeux et quelle est la réponse qui a été choisie dans PHPBoost.
Création de l'interface de communication
L'interface de communication entre le noyau et plus généralement le monde extérieur à votre module (autre modules par exemple) et votre module est matérialisée par un fichier
mymodule_interface.class.php à la racine du dossier du module.
C'est ce fichier qui permet l'interaction avec le reste de PHPBoost. En effet ce dernier permet de déterminer à quels appels votre module est capable de répondre et on pourra éventuellement vous demander d'y répondre. La recherche en est un exemple : votre interface annonce que vous proposez de rechercher dans votre module, vous devez implémenter la méthode correspondante afin de déterminer comment vous le faite. A partir de là, quelqu'un d'extérieur à vous peut vous demander de rechercher un mot dans votre contenu.
On retrouvera notamment les fonctions permettant la régénération du cache, l'exécution d'actions journalières, l'exportation de flux RSS, etc...
L'interface de communication faisant partie des fonctions avancées disponibles pour un module, nous verrons plus tard l'implémentation de celle-ci.
Créez un fichier
mymodule_interface.class.php à la racine de votre module et placez-y le contenu suivant :
Code PHP :<?php
import('modules/module_interface');
// Classe MymoduleInterface qui hérite de la classe ModuleInterface
class MymoduleInterface extends ModuleInterface
{
function __construct() //Constructeur de la classe MymoduleInterface
{
parent::ModuleInterface('mymodule');
}
}
?>
Dans cet exemple, l'interface ne propose aucun service particulier. Il est cependant indispensable que vous le créiez, même si son implémentation n'apporte rien.
Pour implémenter des fonctionnalités telle la recherche globale, vous verrez que c'est dans cette interface qu'il faut travailler.
Exécution du module
Votre module doit être lancé par une page php. Votre module pourra contenir plusieurs pages, mais par défaut c'est la page index.php qui est appelée.
Créez un page index.php à la racine de votre module et placez y le contenu suivant :
Code PHP :<?php header('location: ./mymodule.php'); ?>
Cette ligne de code permet de rediriger les personnes accédant à votre module par l'adresse
votresite.com/mymodule vers la page principale de votre module.
La page
mymodule.php sera la page principale de votre module. C'est celle-ci qui sera chargée de l'affichage et contiendra les liens vers les autres pages accessibles du module.
Cette page n'existant pas, nous allons la créer. Créez donc une page
mymodule.php à la racine de votre module et placez-y le contenu suivant :
Code PHP :<?php
require_once('../kernel/begin.php'); //Charge les éléments essentiels de PHPBoost
require_once('mymodule_begin.php'); //Charge le début de l'environnement du module
require_once('../kernel/header.php'); //Charge le début de l'environnement graphique de PHPBoost
load_module_lang('mymodule'); //Charge le fichier langue
$tpl_mymodule = new Template('mymodule/mymodule.tpl');
$tpl_mymodule->assign_vars(array(
'L_HELLO_WORLD' => $MYMODULE_LANG['hello_world']
));
$tpl_mymodule->parse();
require_once('../kernel/footer.php'); //Charge la fin de l'environnement graphique de PHPBoost
?>
Créer également un fichier
mymodule_begin.php contenant le code suivant.
Code PHP :<?php
/* Modification de l'arborescence des catégories. */
$Bread_crumb->add('My module', url('mymodule.php'));
?>
Ce code mérite quelques explications :
- Nous avons ici chargé l'environnement de PHPBoost (begin.php), c'est ce fichier qui est responsable de charger le noyau.
- Puis nous avons chargé l'environnement graphique (header.php).
- Nous créons ici un nouvel objet Template, qui va nous permettre de manipuler notre template mymodule.tpl précédemment créé.
- Nous lui assignons, avec la méthode Template::assign_vars(), une variable L_HELLO_WORLD. Celle-ci est présente dans le template et nous lui affectons la valeur de la variable de langue que nous avions créée dans le fichier lang/french/mymodule_french.php.
- Enfin la méthode Template::parse, réalise le remplacement dans le template et affiche le résultat sur la sortie standard
- Pour finir nous avons chargé la fin de l'environnement graphique (footer.php) qui clôt la page et réalise l'affichage final.
Installation du module
Dans le cadre de l'exemple courant
Jusqu'à présent, nous avons créé la structure permettant au module de fonctionner, mais nous ne pouvons toujours pas le tester. Pour cela il faut que le module soit installé.
Créez un dossier
db à la racine de votre module
Créez ensuite un dossier
french dans le dossier
db que vous venez de créer.
Créez un fichier
mymodule.mysql.sql dans le dossier
french que vous venez de créer.
L'arborescence de votre module devrait ressembler à ceci :
/db
/db/french
/db/french/mymodule.mysql.sql
Nous laisserons ce fichier vide car notre module n'a pas besoin de base de données pour l'instant. Ce fichier SQL sera exécuté à l'installation du module et permet de créer et initialiser la base de données du module.
Cas général
D'une manière générale, il sera possible d'éditer le fichier
mymodule.mysql.sql de la manière suivante.
Code SQL :DROP TABLE IF EXISTS `phpboost_mymodule_elements`;
CREATE TABLE `phpboost_mymodule_elements` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`level` int(11) NOT NULL DEFAULT '0',
`name` varchar(100) NOT NULL DEFAULT '',
`contents` text,
`icon` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
DROP TABLE IF EXISTS `phpboost_mymodule_events`;
CREATE TABLE `phpboost_mymodule_events` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` varchar(100) NOT NULL DEFAULT '',
`id_a` int(11) NOT NULL,
`id_b` int(11) NOT NULL,
PRIMARY KEY (`id`),
) ENGINE=MyISAM;
Désinstallation du module
Dans le cadre de l'exemple courant
Il faut prévoir que votre module peut être désinstallé. Dans notre cas il n'utilise pas la base de données donc il n'y a rien de spécial à faire lors de la désinstallation.
Il suffit de créer un fichier vide appelé
uninstall_mymodule.mysql.sql dans le répertoire
db/french/ créé à l'étape précédente.
Cas général
Si le module contenait, par exemple, deux tables
phpboost_mymodule_elements et
phpboost_mymodule_events, alors il faudrait lors de la désinstallation les supprimer de la manière suivante.
Code SQL :DROP TABLE IF EXISTS `phpboost_mymodule_elements`;
DROP TABLE IF EXISTS `phpboost_mymodule_events`;
Test du module
Vous pouvez désormais vous rendre dans l'administration. Cliquez sur
Modules, puis
Ajouter un module. Votre module devrait être présent dans la liste, il suffit alors de cliquer sur installer.
Votre module est désormais installé, vous pouvez le tester en vous rendant à l'adresse suivante :
votresite/mymodule/mymodule.php.
Si tout s'est bien passé vous devriez voir s'afficher à l'écran, au centre de la page : Mon premier module PHPBoost qui affiche : Hello World !
Et après ?
Maintenant que vous avez une base qui fonctionne, vous êtes prêt à vous lancer dans le développement de votre module.
Nous vous recommandons de lire les
bonnes pratiques de développement afin d'écrire du code respectant l'esprit de PHPBoost qui soit maintenable et évolutif. Nous vous invitons également à consulter tout ce que vous pouvez trouver dans
cette catégorie de la documentation, vous découvrirez comment tirer partie de l'environnement PHPBoost, notamment grâce à son framework.