8
edits
Gschratzer (talk | contribs) No edit summary Tag: 2017 source edit |
Sven.plohmer (talk | contribs) m (corrected auto translation issue) |
||
| 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 25: | Line 29: | ||
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 33: | Line 37: | ||
$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: | ||
- '''' 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). . | - '<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). . | ||
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 47: | Line 51: | ||
</source> | </source> | ||
''''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/>'''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): | ||
- ''''Hookname'''' ist der Name der Methode, die aufgerufen wird. Zum Beispiel: 'formObjectOptions'. | - '<nowiki/>'''Hookname'''' ist der Name der Methode, die aufgerufen wird. Zum Beispiel: 'formObjectOptions'. | ||
- ''''$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: | - '<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: | ||
<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 71: | Line 75: | ||
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 79: | Line 83: | ||
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 89: | Line 93: | ||
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 127: | Line 131: | ||
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 134: | Line 140: | ||
;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. | ||
edits