You are not logged in.
Il s'agit d'un modification à apporter au fichier inc/plugin.function.php. Le but est de pouvoir utiliser des méthodes en tant que crochet. Pour cela, il faudrait utiliser les callbacks definis en php. L'avantage de cette version serait d'éviter de définir une fonction par méthode que l'on souhaite appeler en tant que crochet.
Voila ce que donnerait l'équivalent de la fonction doHook qui permettrait d'effectuer cette modification sans toucher aux appels existants:
function do_hook_callback($name){
global $PLUGIN_HOOKS;
$data = func_get_args();
if (isset($PLUGIN_HOOKS[$name])
&& is_array($PLUGIN_HOOKS[$name])) {
foreach ($PLUGIN_HOOKS[$name] as $callback) {
if (is_callable($callback)) {
call_user_func($callback,$data);
}
}
}
return $data;
}
Voici un petit exemple pour l'utilisation de cette fonction
function Mafonction($arg){
echo "Affichage ".__FUNCTION__."<br>";
}
class MaClasse{
static function MethodeStatique($arg){
echo "Affichage ".__METHOD__."<br>";
}
function Methode($arg){
echo "Affichage ".__METHOD__."<br>";
}
}
$maclasse = new MaClasse();
$PLUGIN_HOOKS["test"]["fonction"] = 'mafonction';
$PLUGIN_HOOKS["test"]["statique"] = array('MaClasse','MethodeStatique');
$PLUGIN_HOOKS["test"]["methode"] = array($maclasse,'Methode');
echo "TEST DO_HOOK_CALLBACK<br>";
do_hook_callback('test');
Est-ce que cette modification est susceptible de voir le jour?
Last edited by Julio (2007-08-24 14:11:40)
Offline
Bonjour,
Je vais faire le naïf, mais je ne saisi pas l'avantage réel apporté par votre proposition.
Est-ce que vous pourriez être plus explicite dans vote argumentation sur les avantages procurées par votre proposition ?
Un exemple précis serait apprécié. Un cas d'utilisation.
Bonne soirée.
JMD / Jean-Mathieu Doléans - Glpi-project.org - Association Indepnet
Apportez votre pierre au projet GLPI : Soutenir
Offline
La modification que je propose représente avant tout une simplification de l'écriture de certains appels de crochet. Dans mon cas, elle me permet de factoriser la pose des crochets dans une classe mère. Il me faut poser des crochets pour une méthode héritée d'une des fonctions de ma classe mère. Avec le système actuel, il me faudrait, pour chaque classe fille, créer une fonction qui appelle cette méthode puis poser le crochet qui correspond a cette fonction. Avec la version que je propose, je peux créer la pose de crochet dans ma classe mère ce qui me permet de la factoriser.
Au niveau des possibilités offertes par ce mécanisme, on peut éventuellement paramètrer le comportement du crochet. Je ne vois pas encore d'exemples concrets où cela pourrait servir mais il s'agirait d'utiliser l'instance pour lequel le crochet est défini dans le traitement lui-même. Par exemple, il pourrait s'agir de définir un crochet sur une classe de log et de modifier le fichier où sont loguer les crochets à l'execution.
En tant qu'exemple concret , je pense qu'il serait possible de refaire le système de nettoyage de table de la classe CommonDBTM de manière plus souple (je fais réference à la méthode cleanRelationData). Le but serait de laisser le controle à la classe fille des actions à effectuer pour le nettoyage. Il faudrait ainsi créer une méthode (par exemple cleanDB )qui récupére les arguments de l'appel du crochet item_delete, et effectue le nettoyage. La pose du crochet s'effectuerait dans le constructeur sous la forme :
$PLUGIN_HOOKS["item_delete"]["ma_table"] = array($this,"cleanDB");
Pou conclure, à mon avis, ma proposition pourrait apporter plus de souplesse dans la création des crochets en favorisant l'utilisation des possibilités de la programmation orienté objet.
Le but de ma demande était plus de savoir si je pouvais brancher mes crochets sur des actions de GLPI. Si cette proposition n'est pas retenue, je trouverai toujours un moyen de cantoner les appels sur le plugin sur lequel je travaille (je pense qu'en posant ma fonction de crochetage en tant que crochet de celle existante, ca doit pouvoir fonctionner)
Last edited by Julio (2007-09-03 09:59:05)
Offline
Sur quel plugin travailles-tu ? sans indicretion ?
Xavier Caillaud
Blog GLPI Infotel
Offline
Je travaille sur le plugin compte.
La description du projet se trouve ici:
http://glpi-project.org/forum/viewtopic.php?id=7099
Offline