[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
yForm Callback in PHP - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
goldfoot
Beiträge: 6
Registriert: 16. Jun 2016, 17:31

yForm Callback in PHP

28. Mai 2019, 02:06

Hallo,
Eine Suche im Forum hat leider keine Antwort auf mein (vielleicht spezielles) Problem ergeben.
Ich baue gerade mit yForm ein Anmeldeformular für Veranstaltungen, die ein begrenztes Ticket-Kontingent haben. Der E-Mail-Versand und die Eintragung in eine Teilnehmer-Datenbank funktionieren prima, nun muss nur noch die Anzahl der verfügbaren Plätze bei Anmeldung reduziert werden.

Die Rahmenbedingungen sind wie folgt: Es gibt zwei Tabellen in denen die Veranstaltungen und die Anmeldungen gespeichert werden. Bei Anmeldung soll nun (idealerweise) vor dem Absenden der Bestätigungsemail und Speichern der Anmeldung die Anzahl der noch verfügbaren Plätze geprüft und ggf. reduziert werden. Dazu scheint die Callback-Action geeignet zu sein, jedoch finde ich keine Dokumentation, wie die Action in PHP genutzt werden kann. Ich muss PHP nutzen, da ich im Formular dynamische Inhalte ausgebe (das war mit der Pipe-Variante nicht zu bewerkstelligen).

Ich habe folgende Klasse (beispielhaft), und eine Funktion, die prüfen soll ob noch genug Plätze verfügbar sind:

Code: Alles auswählen

<?php
class my_class {
    public function check_availability($form)  {
        // Ausgewählte Veranstaltung identifizieren
        $event_id = $form->getParam("value_pool")['sql']['event_id'];
        
        // Prüfe ob noch genug Plätze verfügbar sind. Wenn ja, send E-Mail. Wenn nein, zeige entsprechende Meldung an.
        // [...]
    }
}

Ich habe in meinem Modul (Ausgabe) folgendermaßen probiert, den Callback auszulösen:

Code: Alles auswählen

$yform->setActionField('callback', project_class::check_availability());
// Error: Too few arguments to function project_class::form_callback()

$yform->setActionField('callback', project_class::check_availability($yform);
// Error: Call to undefined method rex_yform::getParam()
Wie kann also in PHP das Formular als Argument für den Callback so mitgegeben werden, dass ich die eingegebenen Daten des Users weiter verarbeiten kann?
Danke im Voraus für hilfreiche Hinweise.. :wink:

Gruß,
Julian

Benutzeravatar
runstop64
Beiträge: 369
Registriert: 23. Okt 2012, 21:34
Wohnort: Hamburg
Kontaktdaten: Website Facebook Twitter

Re: yForm Callback in PHP

28. Mai 2019, 10:34

Hi,

hast du schon versucht, den Namen der Callable als String zu übergeben? Im Moment rufst du sie ja direkt auf, sie soll aber erst vom Callback aufgerufen werden.

Code: Alles auswählen

$yform->setActionField('callback', 'project_class::check_availability');
Du solltest die Methode als static definieren, wenn du sie so aufrufst, um Fehlermeldungen zu vermeiden.

Code: Alles auswählen

public static function check_availability($form)  {
Viele Grüße,
Daniel


studio-ahoi.de | Referenzen | Friends Of REDAXO

goldfoot
Beiträge: 6
Registriert: 16. Jun 2016, 17:31

Re: yForm Callback in PHP

28. Mai 2019, 13:56

HI Daniel,
du hast mich auf die richtige Spur gebracht. So scheint es zu gehen:

Code: Alles auswählen

$yform->setActionField('callback', array('my_class::check_availability'));

Ausgaben, die per PHP (echo, var_dump) erzeugt werden, werden nach dem Absenden des Formulars angezeigt und auch die Daten aus dem Formular sind im Callback verfügbar.

Jetzt stellt sich nur noch die Frage ob man das Speichern der Daten in der Tabelle noch verhindern kann wenn es nicht genug Plätze gibt. Hast du dazu noch eine Idee? Danke für deinen hilfreichen Tipp!

Gruß,
Julian

Zurück zu „AddOns / Packages [R5]“