Neu Datenaustausch zwischen Hooks

traumwerk

Aktives Mitglied
15. Dezember 2020
4
1
Hallo zusammen,

wie genau ist der Datenaustausch zwischen mehreren Hooks gedacht? Ich schildere kurz was ich vorhabe:

Ich habe ein Plugin geschrieben was in boot() sich in zwei Hooks einhängt:
HOOK_BESTELLABSCHLUSS_INC_BESTELLUNGINDB_ENDE sowie HOOK_SMARTY_OUTPUTFILTER.

Ich möchte die Daten, die ich gesammelt/verabeitet habe in HOOK_BESTELLABSCHLUSS... in HOOK_SMARTY... ausgeben (sprich ins HTML schreiben). Wie geht man hier am besten vor? Muss ich den Umweg gehen über die Datenbank? Muss ich die Daten zuvor in den Cache schreiben? Was ist hier der empfohlene Weg dieser Applikation?

Ich habe noch nicht so viel Erfahrung, daher bitte ich um etwas Nachsicht.
Vielen Dank
 

FPrüfer

Moderator
Mitarbeiter
19. Februar 2016
1.878
519
Halle
Hallo,
diese Kommunikation läuft genauso ab, wie in jeder anderen PHP-Applikation auch. Innerhalb ein und desselben Aufrufs kann man Eigenschaften der Handler-Klasse verwenden. Für Werte die zwischen verschiedenen Aufrufen innerhalb einer Session übergeben werden müssen lässt sich die Session verwenden und bei Session-übergreifender Weitergabe müssen die Daten in der DB persistiert werden.
Der einfachste Handler ist hierbei die Bootstrap-Klasse selbst.
PHP:
class Bootstrap extends Bootstrapper
{
    protected $myProperty;

    public function boot(Dispatcher $dispatcher): void
    {
        parent::boot($dispatcher);

        $dispatcher->listen('shop.hook.' . \HOOK_BESTELLABSCHLUSS_INC_BESTELLUNGINDB_ENDE, [$this, 'inDB']);
        $dispatcher->listen('shop.hook.' . \HOOK_SMARTY_OUTPUTFILTER, [$this, 'smartyOutput']);
    }

    public function inDB(array $args): void
    {
        #... do something ...
        $this->myProperty = 'done';
    }

    public function smartyOutput(array $args): void
    {
        if ($this->myProperty === 'done') [
             #... do something ...
        }
    }
}
Zum Schreiben und Lesen in der Session lassen sich z.B. die statischen Methoden Frontend::set($key, $value) und Frontend::get($key) verwenden.
 

Ähnliche Themen