Um eine bessere Möglichkeit zu erhalten, erweiterte Funktionen in das VtigerCRM zu implementieren, haben wir ein kostenloses Event Handling Modul entwickelt, mit dem Sie einen sicheren Weg zur Erweiterung von VtigerCRM erhalten können.
Sie werden wegen des Installation dieses Moduls keine Probleme bekommen, da es selbst absolut nichts tut.
Die Aufgabe dieses Moduls ist durch folgenden Funktionen eine schnelle Schnittstelle bereitzustellen.

EventHandler_Module_Model::do_filter(..)

ünd

EventHandler_Module_Model::do_action(..)

Wir fügen diese Funktionen im Quellcode hinzu, wo wir benutzerdefinierten Code einfügen wollen, um große Änderungen im Kerncode zu verhindern und eine Schicht zwischen dem benutzerdefinierten Code und dem Kerncode zu haben. Dies wird die Fähigkeit, Ihren benutzerdefinierten Code auf spätere Versionen zu migrieren, erheblich verbessern.

Wenn Sie andere Plugin-Systeme wie WordPress CMS kennen, wissen Sie auch, was diese Funktionen bewirken.

Wie man einen Event Handler registriert

Wenn Sie an ein Event anhängen möchten, geschieht dies mit dem internen EventHandler.

So geht es:

[prism field=eventhandler language=php]

Die Funktion registerHandler hat diese Parameter:

ParameterDefinition
$forEventName des Hooks, den Sie anbringen möchten
$pathPfad zur EventHandler-Datei
$classNameKlassenname Ihres EventHandlers

Die Funktion hat mehr Parameter, aber sie sind nicht hilfreich.
Diese Registrierung darf nur einmalig erfolgen, z.B. bei der Einrichtung des Moduls.

Nun müssen Sie Ihre EventHandler-Klasse erstellen. Benennen Sie die Klasse, wie Sie es bei der Registrierung festgelegt haben. (Im nächsten Beispiel ColorizerEventHandler)
Es müssen 2 Funktionen vorhanden sein, die sich auf das beziehen, was Sie bearbeiten wollen.

Eine handleEvent($hook, $data) Funktion oder/und eine handleFilter($hook, $parameter, …) Funktion. Siehe folgendes Beispiel:

[prism field=eventhandlerexample language=php]

Wenn Sie mit der handleFilter-Funktion mehrere verschiedene Filter behandeln wollen, definieren Sie nur den $parameter Parameter, da dieser in jedem Fall verfügbar ist.

Um auf benutzerdefinierte Parameter zuzugreifen, verwenden Sie so etwas wie dieses:

$additionalParameter = func_get_arg(2);
// The first additional parameter is the index 2

Die Variable $hook enthält den Namen des aktuell ausgeführten Hook.

Erweiterte Möglichkeit, einen Handler zu registrieren

Wenn Sie Erfahrung mit Ihrer Datenbank haben, müssen Sie die Funktion registerHandler nicht aufrufen, sondern können Ihr Event auch direkt in die Datenbank einfügen.

Fügen Sie eine neue Zeile in der Tabelle vtiger_eventhandlers mit korrektem event_name, handler_path, handler_class und 1 als Spalte “is_active” ein.
Vergessen Sie aber nicht, die Reihenfolge in vtiger_eventhandlers_seq zu erhöhen, da Sie sonst beim nächsten Modul-Setup Probleme bekommen, die auch ein Ereignis anhängen.

Wie man Trigger benutzt?

EventHandler_Module_Model::do_action("$actionName", [$parameter])

$actionName ist der Name des Hook, den Sie definieren und mit diesem Aktionsnamen können sich andere Plugins selbst anhängen.
Diese Funktion wird intern vom Core EventHandler verwaltet.

Sie können bis zu 1 Parameter einstellen, der auch in Plugins verfügbar ist. Diese Funktion gibt nichts zurück. Diese Funktion kann z.B. verwendet werden, um das Laden der Einstiegsseite zu markieren.

EventHandler_Module_Model::do_filter("$actionName", $parameter1, [$parameter2, [$parameter3, ...]])

EventHandler_Module_Model::do_filter(array($actionName1, $actionNameN,...), $parameter1, [$parameter2, [$parameter3, ...]])

Diese Funktion bietet eine Filterschnittstelle, in der Sie einen $parameter1 setzen, der durch Plugins modifiziert werden kann.
Wie in der do_action-Funktion haben Sie einen $actionName, der den Namen dieses Hooks definiert. Diese Funktion ist aber im Gegensatz zu do_action auch in der Lage, mehrere Hook-Namen in einem Array zu behandeln, die nacheinander von 1 bis N ausgeführt werden.
Sie müssen einen $parameter1 angeben, der von Plugins gefiltert wird. Ansonsten können Sie eine unbegrenzte Anzahl von Parametern einstellen, die auch an Plugins übergeben werden.

Sie können diese Funktion beispielsweise verwenden, um eine SQL-Query zu ändern, bevor vTiger sie ausführt.

Beispiel, wo wir die Mehrfachhaken (hooks) verwenden, ist es, einen allgemeinen Hook zusammen mit einem modulspezifischen Hook bereitzustellen.
Dann können Sie nur noch das Modul einhängen, das Sie benötigen. Hier haben wir ein Beispiel, wo wir den QueryGenerator in der allgemeinen ListView-Datei modifizieren, bevor der QueryGenerator in das ListView-Modell gesetzt wird. Einmal mit einem allgemeinen Hook und einmal mit einem modulspezifischen Hook-Namen.

[prism field=examplehook1 language=php]

Sie können an alle Module anhängen, wenn Sie an Hook vtiger.filter.listview.querygenerator.before anhängen. Sie können das Modul ListView of Accounts aber auch nur ändern, wenn Sie an vtiger.filter.listview.accounts.querygenerator.before anhängen. In diesem Beispiel ist der Query-Generator der Parameter, der geändert werden kann. Das Paging-Modell wird als zusätzlicher Parameter eingestellt.

Modul herunterladen

Das Modul wird auf GitHub, wo Sie auch den Quellcode sehen können.

Download für Vtiger 6

Download für Vtiger 7