Puhh, es wird wirklich Zeit das das neue Dokuwiki an den Start kommt...
Anleitung für die Nutzung von Events
Event anlegenEin Event kann ganz leicht mit fire_event('eventname', array('dem Event übergebene Argumente') ) an einer beliebigen Stelle des Codes eingefügt werden. Der Event wird nun abgefeuert. Was noch fehlt ist eine Funktionalität, die auf den Events reagiert und eigenen Code ausführt
Auf Events reagierenUm auf Events zu reagieren, wird einfach ein spezieller SQL in der Datenbank hinterlegt. Events werden in der Tabelle "cms_values" abgespeichert.
Beispiel 1:Ich definiere einen Event an einer beliebigen Stelle in meinem Code.
QUELLTEXT
$eventname = 'mein_erster_event';
$args = array('wert1'=> 'Hallo', 'wert2'=> 'Event')
fire_event($eventname, $args);
Nun muss der SQL erstellt werden, welcher auf den gefeuerten Event reagiert. Das folgende SQL generiert einen Eventlistener, der beim Feuern des Events auf dem Bildschirm "Hallo Event" ausgibt.
QUELLTEXT
INSERT INTO `cms_values` (
`idclient`,
`idlang`,
`group_name`,
`key1`,
`key2`,
`key3`,
`key4`,
`value`,
`conf_sortindex`,
`conf_desc_langstring`,
`conf_head_langstring`,
`conf_input_type`,
`conf_input_type_val`,
`conf_input_type_langstring`,
`conf_visible`)
VALUES (
0,
0,
'events',
'mein_erster_event',
'actions',
'custom_events',
NULL,
' echo $args["wert1"] . ' ' . $args['wert2'];',
0,
NULL,
NULL,
'',
NULL,
NULL,
0);
Beschreibung des SQLs:idclient = Id des Clients (Projektes) in dem der Event ausgeführt werden soll. Wird eine 0 eingetragen, dann ist der Event in jedem Projekt gültig.
idlang = Id der Sprache in dem der Event ausgeführt werden soll. Wird eine 0 eingetragen, dann ist der Event in jeder Sprache gültig.
group_name = Hier ist immer das Schlüsselwort 'event' einzutragen. Dadurch weiß Sefrengo, dass es sich um einen Datensatz der Event Gruppe handelt.
key1 = Name des Events, in diesem Fall 'mein_erster_event'
key2 = Hier muß immer das Schlüsselwort 'actions' eingetragen werden. Es bezeichnet den Type des Events. Zur Zeit unterstützt Sefrengo nur Events vom Type 'actions'
key3 = Beliebiger String, soll kurz beschreiben zu welcher Gruppe der Event gehört. Ich habe da mal einfach 'custom_events' eingetragen. Hat keine Funktion, die sich auf den Programmablauf auswirkt.
value = PHP Code, der ausgeführt werden soll. Im Beispiel werden beim feuern des Events die übergebenen Argumente ausgegeben. Aus echo $args["wert1"] . ' ' . $args['wert2']; wird dann bei Programmausführung 'Hallo Event'.
conf_sortindex = '0' eintragen, keine Weitere Funktion
conf_desc_langstring = 'NULL' eintragen, keine Weitere Funktion.
conf_head_langstring = 'NULL' eintragen, keine Weitere Funktion.
conf_input_type = '' eintragen, keine Weitere Funktion .
conf_input_type_val = 'NULL' eintragen, keine Weitere Funktion .
conf_input_type_langstring = 'NULL' eintragen, keine Weitere Funktion .
conf_visible = '0' eintragen, keine Weitere Funktion .
Beispiel 2Der PHPCODE des SQLs wird um einen Rückgabewert erweitert.
QUELLTEXT
echo $args["wert1"] . ' ' . $args['wert2'];
$this->addReturnval('ein Rückgabewert');
Es ist egal, ob als Rückgabewert ein String, Array, Objekt, etc. übergeben wird. Alle Returnwerte werden in einem numerischen Array gespeichert. So ist es möglich, dass mehrere Rückgabewerte (z.B. wenn in einem Event mehrere Eventlistener ausgeführt werden )
QUELLTEXT
$rueckgabe = fire_event($eventname, $args);
print_r($rueckgabe);
In $rueckgabe['0'] steht jetzt der String "Ein Rückgabewert.".
Hoffe, Du kommst damit klar.