Je note que ce terme apparu avec l'apparition des langages fonctionnels ( ML, OCaml, Lisp , Common Lisp, Scheme ), désignait un mécanisme précis dans lequel la fonction exécutée retournait un résultat. Maintenant avec l'implantation de ce type de mécanisme dans de nombreux logiciels écrits en langage procédural ou objet, cela ne semble plus être une obligation.

Dans Dotclear 1x

Ce mécanisme n'est pas pour l'instant implanté dans Dotclear (branche 1.x). Une information sur le sujet a été publiée sur le wiki du projet initialement en Avril 2004, la version actuelle de cette note décrit en partie l'implantation prévue. L'implantation était prévue pour ce soir, mais dans les fait seul des prémices d'implantation sont visibles dans la branche de développement rocki-dev.

Dans Dotclear2 (Aoraki)

Le système de callback est opérationnel ! Mais seul les événements déclencheurs utilisés par les développeurs de la dcTeam sont actuellement pris en compte.

Le système repose sur l'utilisation de deux fonctions de l'objet $core : addBehavior() et callBehavior().

Les fonctions pouvant être appelées doivent être encapsulées dans une classe conteneur. Par convention cette classe est nommée par l'identifiant du plugin suffixé ' Behaviors' ( exemple : dummyBehaviors pour le plugin dummy) et les fonctions avec l'identifiant de l'évènement (exemple : BeforeCommentCreate )

Les fonctions ainsi définies doivent accepter les paramètres adéquats et éventuellement produire un affichage (ça dépend des cas d'utilisation, il n'y a pas de règle générale). Pour savoir exactement comment écrire ces fonctions, en l'absence de documentation précise le mieux est de consulter le code (en espérant qu'il n'y aura pas trop de changement).

Exemples d'utilisation :

Exemple 1 : enregistrer une fonction devant être appelée juste avant l'enregistrement d'un commentaire :

$core->addBehavior('publicBeforeCommentCreate',array('dummyBehaviors','BeforeCommentCreate'));

avec la classe 

# BEHAVIORS
class dummyBehaviors
{
	public static function BeforeCommentCreate(&$cur)
	{
		// --ici le traitement de l'évènement --
		// le paramètre $cur contient les données du commentaire devant être enregistré.
	}
}

Exemple 2 : Définir dans un plugin, un événement déclencheur.

$core->callBehavior('id_de_l_evenement',$param1,$param2);
Remarques
  • Aucun contrôle permet de détecter les conflits pouvant survenir (identifiant erroné, boucle infinie, ...).
  • Le nombre d'événements déclencheurs actifs dans cette version béta est limitée. La liste prévisionnelle des événements pris en compte dans les versions futures n'est pas connue.
  • L'ordre d'exécution des fonctions appelées n'est pas prédéfini. Ainsi si l'on veut développer de façon isolée des fonctions agissant toutes en réponse au même événement déclencheur il est impossible de connaître l'ordre d'exécution. ( Une ruse peut-être ? )

Annexe

Liste des callback définis dans la version béta Dotclear2 (Aoraki)

Administration des billets
adminPageHTMLHead
Localisation de l'appel : inc/admin/lib.dc.pages.php
Paramètres : (aucun)
Affichage possible
adminPageHTMLHead
Localisation de l'appel : inc/admin/lib.dc.pages.php
Paramètres : (aucun)
Affichage possible
loginPageHTMLHead
Localisation de l'appel : admin/auth.php
Paramètres : (aucun)
Affichage possible
adminBeforePostUpdate
Localisation de l'appel : admin/post.php
Paramètres : $cur : cursor (post),$post_id
adminAfterPostUpdate
Localisation de l'appel : admin/post.php
Paramètres : $cur : cursor (post),$post_id
adminBeforePostCreate
Localisation de l'appel : admin/post.php
Paramètres : $cur : cursor (post)
adminAfterPostCreate
Localisation de l'appel : admin/post.php
Paramètres : $cur : cursor (post),$post_id
adminPostHeaders
Localisation de l'appel : admin/post.php
Paramètres : (aucun)
Affichage possible
adminPostFormSidebar
Localisation de l'appel : admin/post.php
Paramètres : $post
Affichage possible
adminPostForm
Localisation de l'appel : admin/post.php
Paramètres : $post
Affichage possible
adminBeforeUserUpdate
Localisation de l'appel : admin/preference.php
Paramètres : $cur : cursor (user), userID
adminAfterUserUpdate
Localisation de l'appel : admin/preference.php
Paramètres : $cur : cursor (user), userID
adminPreferencesHeaders
Localisation de l'appel : admin/preference.php
Paramètres : (aucun)
Affichage possible
adminPreferencesForm
Localisation de l'appel : admin/preference.php
Paramètres : $core
Affichage possible
adminBeforeUserUpdate
Localisation de l'appel : admin/user.php
Paramètres : $cur : cursor (user) ,$user_id
adminAfterUserUpdate
Localisation de l'appel : admin/user.php
Paramètres : $cur : cursor (user) ,$user_id
adminBeforeUserCreate
Localisation de l'appel : admin/user.php
Paramètres : (aucun)
adminAfterUserCreate
Localisation de l'appel : admin/user.php
Paramètres : $cur : cursor (user) ,$user_id
adminUserHeaders
Localisation de l'appel : admin/user.php
Paramètres : (aucun)
Affichage possible
adminUserForm
Localisation de l'appel : admin/user.php
Paramètres : $rs : recordset (user)
Affichage possible
Plugins par défaut
adminInitWidgets
Localisation de l'appel : plugins/widgets/index.php
Paramètres : $widget
Partie publique
coreBlogConstruct
Localisation de l'appel : inc/core/class.dc.blog.php
Paramètres : $blog
coreBlogGetPosts
Localisation de l'appel : inc/core/class.dc.blog.php
Paramètres : $rs : recordset (blog)
coreBlogGetComments
Localisation de l'appel : inc/core/class.dc.blog.php
Paramètres : $rs : recordset (comment)
coreInitWikiPost
Localisation de l'appel : inc/core/class.dc.core.php
Paramètres : $wiki2xhtml
coreInitWikiSimpleComment
Localisation de l'appel : inc/core/class.dc.core.php
Paramètres : $wiki2xhtml
coreInitWikiComment
Localisation de l'appel : inc/core/class.dc.core.php
Paramètres : $wiki2xhtml
publicBeforeTrackbackCreate
Localisation de l'appel : inc/core/class.dc.trackback.php
Paramètres : $cur : cursor (comment)
publicAfterTrackbackCreate
Localisation de l'appel : inc/core/class.dc.trackback.php
Paramètres : $cur : cursor (comment) , $comment_id
publicPrepend
Localisation de l'appel : public/prepend.php
Paramètres : $core
publicBeforeCommentCreate
Localisation de l'appel : public/lib.urlhandlers.php
Paramètres : $cur : cursor (comment)
publicAfterCommentCreate
Localisation de l'appel : public/lib.urlhandlers.php
Paramètres : $cur : cursor (comment) , $comment_id