System von Hooks: Difference between revisions

Jump to navigation Jump to search
Undo revision 61846 by Sven.plohmer (talk)
m (corrected auto translation issue)
(Undo revision 61846 by Sven.plohmer (talk))
Tag: Undo
Line 13: Line 13:
==Einführung==
==Einführung==
Hooks sind eine Funktion für Entwickler, die es ihnen ermöglicht, benutzerdefinierten Code zu Standard-Dolibarr-Seiten hinzuzufügen, ohne Dolibarr-Kerndateien ändern zu müssen. Im Gegensatz zum System of Triggers (eine andere Möglichkeit, mit Dolibarr-Code zu interagieren), die mit Dolibarr-Ereignissen verknüpft sind, können Hooks überall und jederzeit ausgeführt werden, solange sie im Dolibarr-Kern geplant wurden. Dies sind Einfügepunkte im Programm.
Hooks sind eine Funktion für Entwickler, die es ihnen ermöglicht, benutzerdefinierten Code zu Standard-Dolibarr-Seiten hinzuzufügen, ohne Dolibarr-Kerndateien ändern zu müssen. Im Gegensatz zum System of Triggers (eine andere Möglichkeit, mit Dolibarr-Code zu interagieren), die mit Dolibarr-Ereignissen verknüpft sind, können Hooks überall und jederzeit ausgeführt werden, solange sie im Dolibarr-Kern geplant wurden. Dies sind Einfügepunkte im Programm.
 
*Hooks sind abhängig von einem Kontext aktiv oder nicht (häufig ein Kontext pro Modul: zum Beispiel „productcard“ für Produkte, „invoicecard“ für Rechnungen...). Um vorhandene Hooks zu finden,  
*Hooks sind abhängig von einem Kontext aktiv oder nicht (häufig ein Kontext pro Modul: zum Beispiel „productcard“ für Produkte, „invoicecard“ für Rechnungen...). Um vorhandene Hooks zu finden,
 
suchen Sie nach '''" initHooks( "'''
suchen Sie nach '''" initHooks( "'''
 
*Hooks sind Funktionen, die Standardcode einfügen oder ersetzen. Um Code zu finden, der überschrieben werden kann,  
*Hooks sind Funktionen, die Standardcode einfügen oder ersetzen. Um Code zu finden, der überschrieben werden kann,
 
suchen Sie nach '''" executeHooks( "'''.
suchen Sie nach '''" executeHooks( "'''.


Line 29: Line 25:


1- Initialisieren Sie das HookManager-Objekt (platzieren Sie dieses Codestück am Anfang Ihres PHP-Skripts, direkt nach oder vor den Includes):
1- Initialisieren Sie das HookManager-Objekt (platzieren Sie dieses Codestück am Anfang Ihres PHP-Skripts, direkt nach oder vor den Includes):
<source lang="php">
<source lang=php>
// Technisches Objekt initialisieren, um Hooks von Drittanbietern zu verwalten. Beachten Sie, dass '''conf->hooks_modules''' das Array array  
// Technisches Objekt initialisieren, um Hooks von Drittanbietern zu verwalten. Beachten Sie, dass '''conf->hooks_modules''' das Array array  
include_once ( DOL_DOCUMENT_ROOT . '/core/class/hookmanager.class.php' );  
include_once ( DOL_DOCUMENT_ROOT . '/core/class/hookmanager.class.php' );  
Line 37: Line 33:


$hookmanager->initHooks() akzeptiert 1 Parameter (ein Array von Kontexten) und aktiviert die Hook-Unterstützung für dieses Skript:
$hookmanager->initHooks() akzeptiert 1 Parameter (ein Array von Kontexten) und aktiviert die Hook-Unterstützung für dieses Skript:
- '<nowiki/>''' context'''' ist die Zeichenfolge, die den Ausführungskontext enthält. Dies ist ein einfaches Flag, das von Hook-Funktionen verwendet werden kann, um zu erkennen, wann sie aufgerufen werden (mehrere Seiten/Module können denselben Hook an verschiedenen Stellen aufrufen, und eine Hook-Funktion möchte möglicherweise nur für einen bestimmten Kontext ausgeführt werden und nicht für die anderen). .
- '''' context'''' ist die Zeichenfolge, die den Ausführungskontext enthält. Dies ist ein einfaches Flag, das von Hook-Funktionen verwendet werden kann, um zu erkennen, wann sie aufgerufen werden (mehrere Seiten/Module können denselben Hook an verschiedenen Stellen aufrufen, und eine Hook-Funktion möchte möglicherweise nur für einen bestimmten Kontext ausgeführt werden und nicht für die anderen). .
Hinweis: Sie können mehrere Kontexte gleichzeitig festlegen (z. B. wenn Sie einen gemeinsamen Kontext für mehrere Seiten benötigen, aber auch einen spezifischen Kontext für eine bestimmte Seite wünschen).
Hinweis: Sie können mehrere Kontexte gleichzeitig festlegen (z. B. wenn Sie einen gemeinsamen Kontext für mehrere Seiten benötigen, aber auch einen spezifischen Kontext für eine bestimmte Seite wünschen).


2- Platzieren Sie dann den Aufruf der Hooks dort, wo Code hinzugefügt werden soll:
2- Platzieren Sie dann den Aufruf der Hooks dort, wo Code hinzugefügt werden soll:
<source lang="php">
<source lang=php>
$parameters=array();
$parameters=array();
$reshook=$hookmanager->executeHooks('hookname',$parameters,$object,$action); // See description below
$reshook=$hookmanager->executeHooks('hookname',$parameters,$object,$action); // See description below
Line 51: Line 47:
</source>
</source>


'<nowiki/>'''hookmanager->executeHooks()'''' akzeptiert 4 Parameter und fügt einen Hook hinzu (das ist ein Einstiegspunkt in Ihr Skript für Funktionen, die außerhalb Ihres Skripts und Moduls liegen):
''''hookmanager->executeHooks()'''' akzeptiert 4 Parameter und fügt einen Hook hinzu (das ist ein Einstiegspunkt in Ihr Skript für Funktionen, die außerhalb Ihres Skripts und Moduls liegen):


- '<nowiki/>'''Hookname'''' ist der Name der Methode, die aufgerufen wird. Zum Beispiel: 'formObjectOptions'.
- ''''Hookname'''' ist der Name der Methode, die aufgerufen wird. Zum Beispiel: 'formObjectOptions'.


- '<nowiki/>'''$parameters'''' ist ein benutzerdefiniertes Array, um mehr benutzerdefinierte Daten an den Hook zu übermitteln (die Funktion im Hook kann diese Daten verarbeiten). Platzieren Sie hier, was Sie wollen, es kann eine Datei, ein Array mit Zeichenketten oder etwas anderes sein. Zum Beispiel:  
- ''''$parameters'''' ist ein benutzerdefiniertes Array, um mehr benutzerdefinierte Daten an den Hook zu übermitteln (die Funktion im Hook kann diese Daten verarbeiten). Platzieren Sie hier, was Sie wollen, es kann eine Datei, ein Array mit Zeichenketten oder etwas anderes sein. Zum Beispiel:  


<source lang="php">
<source lang=php>
$parameters=array('file'=>'my/path/to/a/file', 'customnames'=>array('henry','david','john'));
$parameters=array('file'=>'my/path/to/a/file', 'customnames'=>array('henry','david','john'));
</source>
</source>
Line 75: Line 71:
1. Fügen Sie Ihr Modul dem Kontext hinzu, in dem der Hook ausgeführt werden soll. Das heißt, wenn man sich in dem gegebenen Kontext befindet, wird Ihr Code aufgerufen. Bearbeiten Sie dazu den Deskriptor Ihres Moduls ('''/htdocs/yourmodulename/core/modules/modYourModuleName.class.php''') und füllen Sie die Variable '''$this->module_parts''' wie im Beispiel :  
1. Fügen Sie Ihr Modul dem Kontext hinzu, in dem der Hook ausgeführt werden soll. Das heißt, wenn man sich in dem gegebenen Kontext befindet, wird Ihr Code aufgerufen. Bearbeiten Sie dazu den Deskriptor Ihres Moduls ('''/htdocs/yourmodulename/core/modules/modYourModuleName.class.php''') und füllen Sie die Variable '''$this->module_parts''' wie im Beispiel :  


<source lang="php">
<source lang=php>
$this->module_parts = array(
$this->module_parts = array(
'hooks' => array('hookcontext1','hookcontext2')  // Set here all hooks context you want to support
'hooks' => array('hookcontext1','hookcontext2')  // Set here all hooks context you want to support
Line 83: Line 79:
Anmerkung: Sie können den Kontext eines Moduls auch finden, indem Sie Folgendes hinzufügen  
Anmerkung: Sie können den Kontext eines Moduls auch finden, indem Sie Folgendes hinzufügen  


<source lang="php">
<source lang=php>
print('Module context: '.$object->context);
print('Module context: '.$object->context);
</source>
</source>
Line 93: Line 89:
Erstellen Sie '''/htdocs/ yourmodulename /class/actions_ yourmodulename .class.php''' in Ihrem Modul mit Code, der die vom Hook aufgerufene Methode enthält (der Name dieser Methode kann beim Aufruf von executeHooks gesehen werden). Hier ist ein Beispiel:
Erstellen Sie '''/htdocs/ yourmodulename /class/actions_ yourmodulename .class.php''' in Ihrem Modul mit Code, der die vom Hook aufgerufene Methode enthält (der Name dieser Methode kann beim Aufruf von executeHooks gesehen werden). Hier ist ein Beispiel:


<source lang="php">
<source lang=php>


class  ActionsYourModuleName   
class  ActionsYourModuleName   
Line 131: Line 127:
 
 
Die Methode wird dann automatisch aufgerufen, wenn der Code aufgerufen wird, der die executeHooks enthält, die Ihren Code mit den Elementen $parameters, $object und $action versorgen.
Die Methode wird dann automatisch aufgerufen, wenn der Code aufgerufen wird, der die executeHooks enthält, die Ihren Code mit den Elementen $parameters, $object und $action versorgen.
;Mit:
;Mit:
*'''$parameters''' ist ein Array von Metadaten, die die Hook-Daten sammeln (ihr Kontext ist über $parameters['context'] zugänglich, aber andere Informationen können je nach Fall verfügbar sein)
*'''$parameters''' ist ein Array von Metadaten, die die Hook-Daten sammeln (ihr Kontext ist über $parameters['context'] zugänglich, aber andere Informationen können je nach Fall verfügbar sein)
*'''$object''' ist das Objekt, an dem Sie arbeiten möchten (z. B. Produkt für den Produktkartenkontext)
*'''$object''' ist das Objekt, an dem Sie arbeiten möchten (z. B. Produkt für den Produktkartenkontext)
Line 140: Line 134:


;Rückgaben:
;Rückgaben:
*Der Returncode eines Hooks muss im Erfolgsfall 0 oder 1 sein, im Fehlerfall negativ. Im Allgemeinen wird es 0 sein. Es kann 1 sein, was in einigen Fällen bedeutet, dass das, was Ihr Hook tut, vollständig überschreibt, was Dolibarr tun musste, direkt nachdem der Hook aufgerufen wurde. Wenn der Code negativ ist, ist es möglich, dem Benutzer eine Fehlermeldung bereitzustellen, indem $this->errors[]='Error message' gesetzt wird.
*Der Returncode eines Hooks muss im Erfolgsfall 0 oder 1 sein, im Fehlerfall negativ. Im Allgemeinen wird es 0 sein. Es kann 1 sein, was in einigen Fällen bedeutet, dass das, was Ihr Hook tut, vollständig überschreibt, was Dolibarr tun musste, direkt nachdem der Hook aufgerufen wurde. Wenn der Code negativ ist, ist es möglich, dem Benutzer eine Fehlermeldung bereitzustellen, indem $this->errors[]='Error message' gesetzt wird.
*Wenn die Methode die Eigenschaft $this->results mit einem Array setzt, dann wird das Array $hookmanager->resArray automatisch mit dem Inhalt dieses Arrays angereichert, der später wiederverwendet werden kann.
*Wenn die Methode die Eigenschaft $this->results mit einem Array setzt, dann wird das Array $hookmanager->resArray automatisch mit dem Inhalt dieses Arrays angereichert, der später wiederverwendet werden kann.

Navigation menu