System von Hooks

From Dolibarr ERP CRM Wiki
Revision as of 08:36, 20 September 2022 by Gschratzer (talk | contribs) (Created page with " <source lang=php> $parameters=array(); $reshook=$hookmanager->executeHooks('hookname',$parameters,$object,$action); // See description below // Note that $action and $object...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
$parameters=array();
$reshook=$hookmanager->executeHooks('hookname',$parameters,$object,$action); // See description below
// Note that $action and $object may have been modified by hook
if (empty($reshook))
{
   ... // standard code that can be disabled/replaced by hook if return code > 0.
}

'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'.

- '$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=array('file'=>'my/path/to/a/file', 'customnames'=>array('henry','david','john'));

- $object ist das Objekt, das Sie der Hook-Funktion übergeben wollen, sicherlich die Daten des aktuellen Moduls (z. B. das Rechnungsobjekt, wenn Sie sich in einem Rechnungsmodul befinden, usw.). Es kann alles Mögliche sein, aber denken Sie daran, dass es die Hauptkomponente ist, die von den Hook-Funktionen verwendet wird.

- $action ist ein String, der die aktuelle Aktion angibt (kann null sein oder etwas, das wie "create" oder "edit" aussieht).

Hinweis: Sie müssen diesen Schritt mehrmals wiederholen, wenn Sie mehrere Hooks an verschiedenen Stellen Ihres Skripts einfügen wollen.

Nun sollte Ihr Modul gehookt werden können. Sie können die unten unter Hook implementieren beschriebene Vorgehensweise befolgen, um eine Hook-Funktion zu implementieren, die den Vorteil dieser Funktion nutzt (Sie können auch testen, ob es funktioniert).

Einen Hook implementieren

Um einen Hook zu verwenden (also einen Teil des Codes hinzuzufügen oder zu überschreiben), müssen Sie zunächst einen Moduldeskriptor definiert haben (siehe Modul_Entwicklung#Modul_Deskriptor_erstellen_(erforderlich) dafür). Anschließend müssen Sie die folgenden Schritte durchführen:

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 :

$this->module_parts = array(
'hooks' => array('hookcontext1','hookcontext2')  // Set here all hooks context you want to support
);

Anmerkung: Sie können den Kontext eines Moduls auch finden, indem Sie Folgendes hinzufügen

print('Module context: '.$object->context);

(Fügen Sie diesen Code in die php-Datei ein, in der die Hooks aufgerufen werden, und löschen Sie ihn wieder, sobald der Wert des Kontexts ermittelt wurde).

[File:warning.png]] Achtung: Vergessen Sie nicht, Ihr Modul in der Modulverwaltung zu deaktivieren und dann wieder zu aktivieren, damit die Änderung wirksam wird, denn die Speicherung der zu verwaltenden "Modul-Hooks"-Paare erfolgt in der Datenbank, die erst bei der Aktivierung des Moduls aktualisiert wird.