Ergebnis 1 bis 3 von 3

Thema: EFG - Bug oder ein Verständnissproblem?

  1. #1
    Contao-Nutzer
    Registriert seit
    26.12.2010.
    Beiträge
    39

    Frage EFG - Bug oder ein Verständnissproblem?

    Hallo,

    Contao-Version: 2.11.11
    efg-Version: 1.16.5 stable Build 9

    ich habe mit efg ein Formular erstellt.
    Die Daten des Formulars sollen mit POST in eine eigens erstellte Datenbanktabelle (tl_member_generator) gespeichert werden.
    Vom Mitglied werden im Frontend nur 2 Felder sichtbar und auszufüllen sein.
    Die restlichen Felder (hidden) sollen via Klasse mit Callback-Funktionen durch Berechnung und Bedingungen befüllt werden.

    Ich habe dafür eine EfgCallbacks.php erstellt und diese in system/modules/efg gespeichert.
    Darin habe ich folgenden Code geschrieben:

    PHP-Code:
    <?php
    class EfgCallbacks extends Backend
    {
        public function 
    exampleCalculate($arrSubmitted$arrFiles$intOldId, &$arrForm)
        {
            
    // Einschraenkung auf das Formular
            
    if ($arrSubmitted['FORM_SUBMIT'] == 'auto_form_10') {
                function 
    xkey()
                {
                    
    $xkey   "";
                    
    $slang  15;
                    
    $string "0123456789ABCDEF0123456EFGH";
                    
    mt_srand((double) microtime() * 1000000);
                    for (
    $i 1$i <= $slang$i++) {
                        
    $xkey .= substr($stringmt_rand(0strlen($string) - 1), 1);
                    }
                    return 
    $xkey;
                }

                
    $vxname                  'Hase';
                
    $msg                      'Fuchs';
                
    $code                     '22';
                
    $upgrade                  '31968000';
                
    $vdate                    time();
                
    $vvalid                   $vdate $upgrade;
                
    $lskey                    xkey();
                
    $hosts                    $lhosts $arrSubmitted['ldomain'] . $arrSubmitted['sdomain'];
                
    $hival                    strrev($hosts) . $upgrade;
                
    $hostval                  $hosts $vvalid;

     
    // Folgenden Formularfelder sollen automatisch befüllt und mit in die Datenbank gespeichert werden
                
    $arrSubmitted['v_date']   = $vdate;
                
    $arrSubmitted['v_valid']  = $vvalid;
                
    $arrSubmitted['v_1key']   = md5($code $hival md5($lskey) . md5($vvalid) . $msg);
                
    $arrSubmitted['v_2key']   = $lskey;
            }
            return 
    $arrSubmitted;
        }
    }
    ?>
    Das Formular hat als ['FORM_SUBMIT'] = 'auto_form_10'! Das ist soweit geprüft ( mit Firebug ) und in Ordnung.
    Die vom User ausgefüllten Felder ldomain und sdomain , sowie die automatisch zu befüllenden Felder befinden sich unter gleichen Name in der Datenbank, wo die Daten gespeichert werden sollen.
    Das Formular ist nur für registrierte Mitglieder sichtbar.

    Desweiteren habe ich den Hook in der system/config/dcaconfig.php wie folgt registriert.

    PHP-Code:
    <?php /* Put your custom configuration here */
    $GLOBALS['TL_HOOKS']['processEfgFormData']['callback_01'] = array('EfgCallbacks''exampleCalculate');
    ?>
    Soweit alles wie in dieser Anleitung -> LINK.
    Auch kein versehentliches Leerzeichen nach "?>".

    So wird das Formular generiert im Browser ausgegeben.

    HTML-Code:
    <form enctype="application/x-www-form-urlencoded" method="post" id="f10" action="index.php/generator/articles/enter-serial-number.html">
      <div class="formbody">
        <input type="hidden" value="auto_form_10" name="FORM_SUBMIT">
        <input type="hidden" value="bac16394459aeffe5effcf4b73cd450f" name="REQUEST_TOKEN">
        <input type="hidden" value="2048000" name="MAX_FILE_SIZE">
        <input type="hidden" value="2" name="pid">
        <input type="hidden" value="" name="v_date">
        <input type="hidden" value="" name="v_valid">
        <input type="hidden" value="" name="v_1key">
        <input type="hidden" value="" name="v_2key">
        <input type="hidden" value="1" name="v_gCount">
        <div class="input-wrapper block">
          <label class="mandatory" for="ctrl_55"><span class="invisible">Mandatory field </span>Domain<span class="mandatory">*</span></label>
          <input type="text" placeholder="www.domain.com" maxlength="30" required="" value="" class="text mandatory" id="ctrl_55" name="ldomain">
        </div>
        <div class="input-wrapper block">
          <label for="ctrl_56">Subdomain</label>
          <input type="text" placeholder="www.m.domain.com" maxlength="35" value="" class="text" id="ctrl_56" name="sdomain">
        </div>
        <div class="submit_container">
          <input type="submit" value="Enter" class="submit" id="ctrl_43">
        </div>
      </div>
    </form>
    Nun zu meinem Problem...
    Warum werden mir nur die vom User befüllten 2 Felder ldomain und sdomain in die Dadenbank gespeichert?
    In Modul "Formular-Daten" (tl_formdata_details) werden die Daten jedoch komplett gespeichert.
    Warum funktioniert die Callback-Funktion nicht für meine Datenbanktabelle?

    Kann mir jemand bitte erklären was hier schief läuft oder evtl alternative Vorschläge machen?

    Gruß
    Steffen
    Geändert von mrx02de (23.08.2013 um 06:04 Uhr)

  2. #2
    Contao-Nutzer
    Registriert seit
    26.12.2010.
    Beiträge
    39

    Standard

    Info an diejenigen, die es interessiert.

    Ich habe es hinbekommen.
    Zwar nicht so elegant, wie ich gehofft habe, aber es funktioniert.

    Als erstes habe ich ein 2. Formular erstellt.
    Dieses Formular hat die gleichen Felder wie das erste Formular. Nur eine andere Bezeichnung (Kontrolle).
    Für die Felder habe ich dann folgendes als Standard-Wert definiert - {{form::feldnamevonformular1}}
    "feldnamevonformular1" entspricht natürlich jeden Feldnamen von Formular 1.
    Die Felder sind bei mir alle versteckte Felder. man sieht nur den Button "OK".

    Das Formular 1 wird jetzt zur Seite mit Formular 2 weitergeleitet.
    - Kein speichern in die Datenbank
    - Daten im Modul "Formular-Daten" speichern - aktiviert. Das ist "leider" wichtig, sonst geht es nicht!

    Formular 2 ist wie folgt eingestellt:
    - Speichern in Datenbank - aktiviert und meine Datenbank ausgewählt
    - Daten im Modul "Formular-Daten" speichern - deaktiviert.

    Nur auf diese Art, werden jetzt meine generierten Daten in meine Datenbank gespeichert.
    Nicht ideal, da der Kunde ein click mehr machen muss und die Daten auch manipuliert werden können.
    Aber es funktioniert.

    Gruß
    Steffen

  3. #3
    Contao-Nutzer Avatar von sunjego
    Registriert seit
    03.04.2012.
    Beiträge
    14

    Standard Hook processEfgFormData

    Hallo Zusammen,
    da dieser Ablauf genau zu meinem Vorgehen passt..möchte ich hier mal nachlegen.

    Ich beschäftige mich seit ein paar Tagen mit der Möglichkeit in Contao Formularfeldern zu rechnen.
    Die von Steffen beschriebene Lösung mit 2 Formularen und dem Hook processEfgFormData ist für mich bisher auch die einzige Variante zur Lösung.

    Wenn ich das richtig interpretiere, macht die Einstellung "Daten im Modul "Formular-Daten" speichern" das Formular erst zum EFG-Formular.
    Erst dann scheint der Hook für processEfgFormData zu greifen.

    Da für mich Formular 1 auch nur ein Zwischenschritt ist, suche ich eine Lösung dieses Speichern zu unterbinden.
    Kennt jemand eine andere Lösung das Formular zum EFG-Formular zu machen?

    Desweiteren bekomme ich die Daten auch nach Submit des 2 Formulars einfach nicht gelöscht.
    Da ich vor dem Submit ein zurück in Formular 1 anbiete, habe ich die Felder auch dort mit {{FORM::Feldname}} vorbelegt.
    Nachdem das Formular abgeschickt wurde, sollen die Daten aber aus der Session verschwinden...klappt aber leider nicht.

    Ich habe schon versucht durch einen 2 Hook für Formular 2 mit z.B. $arrSubmitted = array() die Daten zu löschen..tut aber leider nicht.
    Hat jemand eine gute Idee wie ich die Input-Daten mit dem Submit gelöscht bekomme?

    Vielen Grüße
    Jens
    Geändert von sunjego (29.03.2014 um 08:13 Uhr)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •