API des fonctionnalités : Différence entre versions
(→Héritage de fonctionnalités) |
(→Proposer des fonctionnalités) |
||
| Ligne 17 : | Ligne 17 : | ||
<source lang="php"> | <source lang="php"> | ||
| − | class | + | class Func_ConvertHtml_ToPdf_OpenOffice extends bab_functionality { |
} | } | ||
| Ligne 33 : | Ligne 33 : | ||
$func = new bab_functionalities(); | $func = new bab_functionalities(); | ||
| − | $func->register(" | + | $func->register("ConvertHtml/ToPdf/OpenOffice", $GLOBALS['babAddonPhpPath'].'convert.php'); |
</source> | </source> | ||
| Ligne 59 : | Ligne 59 : | ||
<source lang="php"> | <source lang="php"> | ||
| − | class | + | class Func_convertHtml extends bab_functionality { |
function getDescription() { | function getDescription() { | ||
return 'convertir du html vers un autre format'; | return 'convertir du html vers un autre format'; | ||
| Ligne 80 : | Ligne 80 : | ||
bab_functionality::includefile('convertHtml'); | bab_functionality::includefile('convertHtml'); | ||
| − | class | + | class Func_ConvertHtml_ToPdf_OpenOffice extends Func_ConvertHtml { |
function getDescription() { | function getDescription() { | ||
return 'convertir du html en pdf'; | return 'convertir du html en pdf'; | ||
Version du 25 avril 2008 à 14:07
Attention, cette API sera disponible à partir de ovidentia 6.7.0
Sommaire
Introduction
L'API des fonctionnalités est utilisée pour partager du code entre différentes parties d'Ovidentia tel que le noyau et les modules. Dans Ovidentia, les fonctionnalités sont représentées sous forme d'un arbre visible par les administrateur dans la page "Modules" sous l'onglet "Fonctionnalités".
Proposer des fonctionnalités
Chaque fonctionnalité devra être nommée selon un "chemin" unique, par exemple "convertHtml/toPdf/openOffice", les caractères _ sont interdits dans le chemin.
Une fonction du noyau d'ovidentia permettra d'enregistrer un fichier php en tant que fonctionnalité, le fichier devra contenir une classe PHP nommée en utilisant la même chemin, par exemple :
<source lang="php"> class Func_ConvertHtml_ToPdf_OpenOffice extends bab_functionality {
}
</source>
le _ remplace le / dans le nom de la classe, l'objet devra hériter de la classe bab_functionality.
Installation
Au moment de l'installation ou du programme de reprise, il faut enregistrer la fonctionnalité dans ovidentia, exemple :
<source lang="php"> include_once $GLOBALS['babInstallPath'].'utilit/functionalityincl.php';
$func = new bab_functionalities(); $func->register("ConvertHtml/ToPdf/OpenOffice", $GLOBALS['babAddonPhpPath'].'convert.php'); </source>
Dans Ovidentia, un fichier "link.inc" sera créé dans un arbre de répertoire (sous le répertoire fonctionalities à la racine du site) avec pour contenu du code php pour inclure le fichier passé en 2ème paramètre.
De même, la méthode unregister() permet de désinstaller la fonctionnalité, le fichier de lien sera supprimé de l'arborescence.
Il existe deux événements qui peuvent être utilisés lors de l'appel à bab_functionalities::register() et bab_functionalities::unregister()
- bab_eventFunctionalityRegistered
- bab_eventFunctionalityUnregistered
Héritage de fonctionnalités
Il est possible de créer une fonctionnalité qui hérite et utilise l'interface d'une autre fonctionnalité.
exemple : le module "convert" propose une fonctionnalité pour convertir du html
<source lang="php">
class Func_convertHtml extends bab_functionality { function getDescription() { return 'convertir du html vers un autre format'; }
function process($html) { return NULL; } }
</source>
Dans un autre module "convertToPdf", on propose de convertir du html en pdf en utilisant openOffice. Pour que la fonctionnalité soit acceptée par le programme d'installation, l'objet hériter de l'objet parent.
<source lang="php">
bab_functionality::includefile('convertHtml');
class Func_ConvertHtml_ToPdf_OpenOffice extends Func_ConvertHtml { function getDescription() { return 'convertir du html en pdf'; }
function process($html) {
} }
</source>
Utiliser une fonctionnalité
La fonction du noyau bab_functionality::get('convertHtml/toPdf/openOffice'); effectuera une inclusion du fichier "convertHtml/toPdf/openOffice/link.inc" ensuite l'objet convertHtml_toPdf_openOffice sera instancié.
Les niveaux supérieurs de l'arborescence seront complétés avec une copie du fichier link.inc si aucun fichier de lien n'est présent.
Un formulaire sera disponible pour d'administrateur afin de changer les fichiers interfaces des niveaux supérieurs pour redéfinir les fonctions par défaut dans le cas de sous-répertoires multiples.
Pour simplifier l'exécution des fonctions d'interface, le contexte du module ne sera pas recréé avant que la fonction soit appelée. Par conséquent, les variables globales de l'environnement du module ne devront pas être utilisées.
Fonctions
bab_functionality::getFunctionalities($path) : obtenir les sous-répertoires d'une fonctionnalité
bab_functionality::get($path) : obtenir l'instance de l'objet
bab_functionality::includefile($path) : inclure le fichier de la fonctionnalité afin d'effectuer un héritage
Tester la présence d'un fonctionnalité
Dans le fichier addonini.php d'un module, il est possible de tester la présence d'un fonctionnalité comme un pré-requis, afin d'empêcher l'installation du module si la fonctionnalité n'est pas installée.
bab_functionality::get() retourne false si la fonctionnalité n'est pas trouvée, il est possible d'utiliser cette méthode avec un @ devant l'appel pour ne pas voir le notice déclenché et utiliser uniquement la valeur de retour.