FriendsOfREDAXO / tricks

Tipps und Tricks rund um REDAXO 5
https://friendsofredaxo.github.io/tricks/
MIT License
105 stars 33 forks source link

YForm Trick - Formular mit mehreren Schritten #248

Closed alxndr-w closed 1 year ago

alxndr-w commented 3 years ago

Die Frage kommt auch immer wieder in Slack auf.

Hier ein serverseitiger Ansatz:

https://github.com/yakamara/redaxo_yform_docs/issues/125

Umsetzungsbeispiel, das via get-Parameter einzelne Schritte abfängt: Noch aufzuhübschen...

Zur Dokumentation des archivierten Repos:

<?php

    // Vars
    $fortschritt = rex_get('fortschritt','int',0);
    $data_id = session_id();
    $url = rex_getUrl($this->getArticleId());

    if (!isset($_SESSION)){
        session_start();
    } else {
        $query = Projektfragebogen::query();
        $query->where('session_id', session_id());
        $fragebogenwerte = $query->findOne();
    }

    //  dump($fragebogenwerte);
    // dump($data_id);
    // dump($fortschritt);

    $table      = 'rex_projektfragebogen';
    $data_id    = session_id();

    $yform = new rex_yform();
    // $yform->setDebug(TRUE);

    $yform->setObjectparams('form_name', 'projektfragebogen');
    $yform->setObjectparams('form_ytemplate', 'bootstrap');
    $yform->setObjectparams('form_showformafterupdate', 1);
    $yform->setObjectparams('real_field_names', true);

    if($fragebogenwerte) {
        $yform->setActionField('db', [$table, 'session_id="'.$data_id.'"']);
        $yform->setObjectparams('getdata', TRUE);
        $yform->setObjectparams('main_where', 'session_id="'.$data_id.'"');
        $yform->setObjectparams('main_table', $table);
    } else {
        $yform->setActionField('db', array($table));
        $yform->setObjectparams('getdata', false);
    }

    $yform->setValueField('hidden', array("session_id", session_id()));

    /*
     *
     *  Schritt 0
     *
     */
if ($fortschritt == '0' ) {

    $yform->setValueField('text', array('firmierung','Firmierung','','','{"placeholder":"Mein Placeholder"}'));
    $yform->setValidateField('empty', array("firmierung","Bitte geben Sie Ihren Firmenanamen und die Gesellschaftsform an."));

    $yform->setObjectparams('submit_btn_label','weiter');

    $yform->setObjectparams("form_action", $url.'?fortschritt=0');
    $yform->setActionField('redirect', array($url.'?fortschritt=1'));

    /*
     *
     *  Schritt 1
     *
     */
} else if ($fortschritt == '1' ) {

    $yform->setValueField('text', array('plz','PLZ'));
    $yform->setValidateField('empty', array("plz","PLZ"));

    $yform->setObjectparams('submit_btn_label','weiter');

    $yform->setObjectparams("form_action", $url.'?fortschritt=1');
    $yform->setActionField('redirect', array($url.'?fortschritt=2'));

    /*
     *
     *  Schritt 1
     *
     */
} else if ($fortschritt == '2' ) {

    $yform->setValueField('text', array('ort','Ort'));

    /* weiterleiten auf DANKE Seite */
//    $yform->setActionField('redirect', array("3"));
    $yform->setObjectparams("form_action", $url.'?fortschritt=2');
    $yform->setActionField('redirect', array(3));
    $yform->setObjectparams('submit_btn_label','Senden');
}

    echo $yform->getForm();