Hallo, lieber Forumbenutzer. 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 Möglichkeiten der Kommunikation ist das Forum ein wenig eingeschlafen und weniger Nutzer benutzen das Forum aktiv (trotzdem lohnt es sich evtl. hier nach Lösungen zu suchen oder seine Frage zu stellen).

Wir empfehlen, für deine Fragen/Probleme aktuell (zusätzlich) 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: http://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: 368
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]“