it-swarm.com.de

Wie funktioniert onContentAfterSave im Frontend?

Ich habe ein Plugin erstellt, das mit onContentAfterSave eine andere Verarbeitung auslöst, sobald ein Datensatz gespeichert wurde. Dies funktioniert im Backend wie erwartet, aber es wird nichts ausgelöst, wenn ich einen Datensatz im Frontend speichere.

Der Datensatz, den ich speichere, ist Teil eines benutzerdefinierten Komponentencodes, dessen Original vor einiger Zeit vom Komponentenersteller stammt, wenn dies möglicherweise etwas damit zu tun hat.

Ich kann mein Plugin beim Speichern eines Artikels durch Kernerweiterungen wie com_content auslösen, wobei der $ -Kontext com_content.form lautet, sodass ich bestätigt habe, dass onContentAfterSave im Frontend verfügbar ist.

Wenn ich mir den Site-Code ansehe, sehe ich, dass verschiedene Komponenten Trigger für onContentAfterSave oder event_after_save haben. Dies scheint eine neue Methode zu sein, aber beide kehren zu diesem Code in AdminModel.php zurück

if (isset($config['event_after_save']))
            {
                $this->event_after_save = $config['event_after_save'];
            }
            elseif (empty($this->event_after_save))
            {
                $this->event_after_save = 'onContentAfterSave';
            }

Ich kann jedoch keine Trigger finden, die in Front-End-Bibliotheken festgelegt sind, und ich kann auch keinen anderen Verweis auf Code finden, der dem oben beschriebenen in Front-End-Klassen ähnelt. Daher gehe ich davon aus, dass jemand, wie AdminModel.php irgendwann vom FrontEnd verwendet wird oder vorhanden ist anderer Ansatz zum Auslösen wird im frontEnd verwendet.

Nach com_content lande ich in der Klassentabelle ../libraries/src/Table/Table.php, die einige Funktionen hat, die sich mit Beobachtern befassen, von denen ich denke, dass sie verwandt sind, aber nicht sicher, und dann diese Zeile in der Speicherfunktion

$this->_observers->update('onAfterStore', array(&$result));

Alles ein bisschen verloren, jetzt zu versuchen zu verstehen, ob es ein neuer oder anderer Weg ist und mit J4, was der beste Ansatz ist, um dies für die Zukunft zu handhaben.

Ich könnte einfach irgendwo in meinem Code einen Auslöser einfügen und weitermachen, aber ich habe mir diese Problemstunden angesehen, bin einem Tag nahe gekommen und habe versucht herauszufinden, wie es für com_content funktioniert, aber nicht für meine Komponente.

Hinweise oder Erklärungen sind willkommen.

Terry

4
Irata

com_content Frontend-Formularmodell erweitert das Backend-Modell, das wiederum Joomla\CMS\MVC\Model\AdminModel Erweitert. Das Backend-Modell verfügt über eine benutzerdefinierte Methode save(), mit der das Ereignis ausgelöst wird.

In der Zwischenzeit erweitert Ihr Frontend-Formularmodell Joomla\CMS\MVC\Model\FormModel, Das kein solches Ereignis und keine save() -Methode enthält. Die einfachste Lösung wäre, das Ereignis selbst in der Methode save() Ihres Modells auszulösen.

3
Sharky