Difference between revisions of "Système de Hooks"

From Dolibarr ERP CRM Wiki
Jump to navigation Jump to search
Line 4: Line 4:
 
Les Hooks permettent aux développeurs  d'ajouter du code personnalisé aux pages standard de Dolibarr sans avoir à modifier les fichiers du coeur de Dolibarr. Contrairement aux [[triggers]] (autre manière d'interagir avec le code de Dolibarr) qui sont liés aux événements de Dolibarr, les Hooks peuvent s'exécuter n'importe ou et à n'importe quel moment. Ce sont des points d'insertion dans le programme.
 
Les Hooks permettent aux développeurs  d'ajouter du code personnalisé aux pages standard de Dolibarr sans avoir à modifier les fichiers du coeur de Dolibarr. Contrairement aux [[triggers]] (autre manière d'interagir avec le code de Dolibarr) qui sont liés aux événements de Dolibarr, les Hooks peuvent s'exécuter n'importe ou et à n'importe quel moment. Ce sont des points d'insertion dans le programme.
 
* Les Hooks agissent selon le contexte (càd le module : par exemple "productcard" pour les produits, "invoicecard" pour les factures...). Pour trouver les Hooks existants faites une recherche pour "'''callHooks('''"
 
* Les Hooks agissent selon le contexte (càd le module : par exemple "productcard" pour les produits, "invoicecard" pour les factures...). Pour trouver les Hooks existants faites une recherche pour "'''callHooks('''"
* Les Hooks sont des foncitons qui peuvent être surchargées. Vous décidez si votre code s'ajoute à celui de dolibarr ou s'il le remplace. Pour rechercehr le code qu'il est possible de surcharger faites une recherche pour "'''executeHooks('''"
+
* Les Hooks sont des fonctions qui peuvent être surchargées. Vous décidez si votre code s'ajoute à celui de dolibarr ou s'il le remplace. Pour rechercehr le code qu'il est possible de surcharger faites une recherche pour "'''executeHooks('''"
  
  

Revision as of 19:47, 12 December 2011

En verysmall.png Page waiting for translation. To translate, create an account, go back and clic on "Modify".
Fr verysmall.png Page en attente de traduction. Pour traduire, créez un compte, revenez et cliquez sur "Modifier".
Es verysmall.png Página a traducir. Para traducirla, cree una cuenta, vuelva a la página y haga clic en "editar".
It verysmall.png Pagina da tradurre. Per tradurla, crea un utente, torna indietro e clicca su "modifica".
Pt verysmall.png Página a aguardar por tradução. Para traduzir, crie uma conta, volte atrás e clique em "Modificar".
De verysmall.png Seite wartet auf Übersetzung. Um Übersetzung zu erstellen, richte einen Account ein, geh zurück und klicke auf "bearbeiten".
Zh verysmall.png 页面等待翻译。若要翻译本页,先创建一个帐户、登录并返回本页后单击“编辑”。

Les Hooks permettent aux développeurs d'ajouter du code personnalisé aux pages standard de Dolibarr sans avoir à modifier les fichiers du coeur de Dolibarr. Contrairement aux triggers (autre manière d'interagir avec le code de Dolibarr) qui sont liés aux événements de Dolibarr, les Hooks peuvent s'exécuter n'importe ou et à n'importe quel moment. Ce sont des points d'insertion dans le programme.

  • Les Hooks agissent selon le contexte (càd le module : par exemple "productcard" pour les produits, "invoicecard" pour les factures...). Pour trouver les Hooks existants faites une recherche pour "callHooks("
  • Les Hooks sont des fonctions qui peuvent être surchargées. Vous décidez si votre code s'ajoute à celui de dolibarr ou s'il le remplace. Pour rechercehr le code qu'il est possible de surcharger faites une recherche pour "executeHooks("


Implementation

Pour utiliser un Hook (donc surcharger une fonction), vous devez d'abord avoir défini un module (voir le wiki sur la création d'un module). Ensuite vous devez suivre les étapes suivantes :

1. Pour ajouter votre module au contexte où me hook doit d'éxécuter Ce qui veut dire que lorsqu'on se trouve dans le contexte donné (module dolibarr), votre module sera appelé. Pour cela, éditer le descripteur de votre module (/htdocs/includes/modYourModuleName.class.php) et renseignez la variable $this->const comme par exemple (modifiez le code en gras selon votre module)

$this->const = array(
0=>array(''''MAIN_MODULE_YOURMODULENAME_HOOKS'''', 'chaine', ''''productcard:invoicecard:propalcard'''',
''''Hooks list for managing printing functions of the CustomFields module'''', 0, 'current', 1)
);

Rappel Note: format d'une déclaration de constante :

$key=>array($const_name,$type,$value,$description,$visible_on_admin_panel=0,$entity='current',$deleteonunactive=0),
$key2=>...

où $key being est un entier positif.

IMPORTANT: n'oubliez pas de désactiver puis de réactiver votre module pour que la modification soit prise en compte. Attention le dernier paramètre doit être 1 et no 0 (valeur par défaut) pour écraser une éventuelle valeur précédente.

2. Pour remplacer une fonction existante par la votre (surcharge)

Créez /htdocs/yourmodulename/class/actions_yourmodulename.class.php dans votre module avec un code comme celui-ci

class ActionsYourModuleName // extends CommonObject 
{ 
 
    /** Overloading the doActions function : replacing the parent's function with the one below 
     *  @param      parameters  meta datas of the hook (context, etc...) 
     *  @param      object             the object you want to process (an invoice if you are in invoice module, a propale in propale's module, etc...) 
     *  @param      action             current action (if set). Generally create or edit or null 
     *  @return       void 
     */ 
    function doActions($parameters, $object, $action) 
    { 
        print_r($parameters); 
        echo "action: ".$action; 
        print_r($object); 
 
        if ($parameters->context == 'somecontext') 
        { 
          // do something only for the context 'somecontext'
        }
    }
}

  • $parametersest un tableau (array) de meta-data regroupant les données du hook (son contexte accessible par $parameters->context)
  • $object est l'objet sur lequel vous désuirez travailler (par exemple : product pour le contexte productcard)
  • $action désigne l'action à exécuter (par exemple "create", "edit" or "view").

Liste des Hooks disponibles

En verysmall.png Page waiting to complete. To complete, create an account, go back and clic on "Modify".
Fr verysmall.png Page en attente d'être complété. Pour compléter, créez un compte, revenez et cliquez sur "Modifier".
Es verysmall.png Página a completar. Para completarla, cree una cuenta, vuelva a la página y haga clic en "editar"
De verysmall.png Seite wartet auf Vervollständigung. Um zu helfen, erstelle ein Konto, gehe zurück und klicke auf "Bearbeiten".
Cn verysmall.png 待完成,欲帮助完成,注册帐号,点击“编辑"
Jp verysmall.png ページは未完成の状態です。完成させるにはアカウントを作成し、ページに戻って「編集」をクリックして下さい。

  • formObjectOptions: appelé chaque fois qu'un champ associé à l'objet principal est affiché ou modifié (formulaires de création, modification, affichage...)

Trouver les hooks disponibles ? Faites une recherche sur "executeHooks(" et vous trouverez facilement les fonctions déjà implémentées

Voir aussi