Catalog-Einträge via EFG erstellen und im Backend und ggfs. Frontend verwalten

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • Tim G
    Contao-Urgestein
    • 13.02.2010
    • 2212

    #16
    @tom

    @Tim: im EFG-Beispiel befindet sich der Eintrag allerdings in der dcaconfig.php, welche u.U. mehrfach geladen wird ...
    Dann natürlich mit festem Schlüssel. Hast recht. Ich geh meistens davon aus immer gleich eine eigene config.php zu erstellen. Sorry.
    Danke fürs Richtigstellen

    @wsa
    gut wenn's jetzt klappt.
    http://www.tim-gatzky.de ˙ auch schon wieder 2 Jahre alt - wie die Zeit vergeht... muss mal umbauen.

    Kommentar

    • wsa
      Contao-Nutzer
      • 27.10.2009
      • 131

      #17
      Hi zusammen!
      Hab noch ein kleines Problemchen hinzubekommen. Mein Code funktioniert hervorragend für das betroffene Formular. Erscheitert jedoch in allen Formularen, denen die Felder "repertoire" und "medien" fehlen. Es braucht also noch eine Abfrage nach der Formular-ID oder einer anderen Formular-Kennung. Kann mir da jemand bei der Codierung behilflich sein? Nachfolgend mein momentaner "Versuch", der so aber voll in die Hosen geht. *planlos*
      PHP-Code:
      <?php
      class FormData_deserializer extends Backend
      {
      
      // deserialze Arrays from Form-/POST-Format to Catalog-Format (i.e. 'repertoire' and 'medien' in cat_Musikanten)
      // for example
      // input:  a:3:{i:0;s:1:"1";i:1;s:1:"3";i:2;s:1:"6";}
      // output: 1,3,6
      
              public function storeFormData_mdb($arrData, $objForm)
              {
              // Einschraenkung auf das Formular
              if ($objData['FORM_SUBMIT'] == 'auto_form_2')
      
                  {
                              $arrData['repertoire'] = implode(',', deserialize($arrData['repertoire'], true));
                              $arrData['medien'] = implode(',', deserialize($arrData['medien'], true));
      
                      return $arrData;
                  }
              }
      
      }
      ?>
      Ich hab das Gefühl, ich steh soooo dicht vor dem Ziel!
      Vielen Dank im Voraus und GLG wsa
      Zuletzt geändert von wsa; 24.01.2013, 16:21.

      Kommentar

      • tom
        Contao-Fan
        • 16.06.2009
        • 385

        #18
        Hallo wsa,

        da hat sich wohl ein Tipp / CopyPaste-Fehler eingeschlichen,
        Deine Prüfung auf Formular
        PHP-Code:
        if ($objData['FORM_SUBMIT'] == ... 
        
        müsste heißen
        PHP-Code:
        if ($arrData['FORM_SUBMIT'] == ... 
        
        Schöne Grüße
        Tom

        Kommentar

        • wsa
          Contao-Nutzer
          • 27.10.2009
          • 131

          #19
          Servus tom,

          danke für die Korrektur. :-)
          Danach lief mein Hook zwar auf keinen Fehler mehr (ohne Formularprüfung hatte er sich in anderen Formularen zu Recht "beschwert", dass es die Felder 'repertoire' und 'medien' nicht gibt; mit der falschen Formularprüfung blieb er einfach hängen.), allerdings war jetzt mein Datenbankeintrag jeweils leer (alle Felder sind leer, NULL oder '0').
          Seitdem ich die return-Anweisung außerhalb der if-clause gesetzt habe, wird der Datenbank-Eintrag wieder geschrieben, aber:

          Die Abfrage
          PHP-Code:
          if ($arrData['FORM_SUBMIT'] == 'auto_mdb_neu') 
          
          ergibt kein 'wahr', obwohl das Formular die ID '3' hat und im Quelltext
          HTML-Code:
          <input type="hidden" name="FORM_SUBMIT" value="auto_form_3">
          steht, weshalb auch keine Deserialisation der Daten mehr stattfindet. *Haarerauf*

          Mein Code im Moment:
          PHP-Code:
          <?php
          class FormData_deserializer extends Backend
          {
          
          // deserialze Arrays from Form-/POST-Format to Catalog-Format (i.e. 'repertoire' and 'medien' in cat_Musikanten)
          // for example
          // input:  a:3:{i:0;s:1:"1";i:1;s:1:"3";i:2;s:1:"6";}
          // output: 1,3,6
          
                  public function storeFormData_mdb($arrData, $objForm)
                  {
                  // Einschraenkung auf das Formular 'Musikgruppen' (Neuer Eintrag in 'cat_Musikanten')
                  if ($arrData['FORM_SUBMIT'] == 'auto_form_3')
                      {
                            $arrData['repertoire'] = implode(',', deserialize($arrData['repertoire'], true));
                            $arrData['medien'] = implode(',', deserialize($arrData['medien'], true));
          
                      }
                          return $arrData;
                  }
          
          }
          ?>
          Hiiilfeee! Ich bin kurz vor dem Verzweifeln!
          Zuletzt geändert von wsa; 25.01.2013, 11:56.

          Kommentar

          • tom
            Contao-Fan
            • 16.06.2009
            • 385

            #20
            Hallo wsa,

            da hab' ich nicht aufgepasst (den Hook 'storeFormData' noch nie benötigt). $arrData enthält ausschließlich die zu speichernden Daten, und somit gibt es keinen Eintrag $arrData['FORM_SUBMIT'] ...
            Also nochmal ändern, statt:
            PHP-Code:
            if ($arrData['FORM_SUBMIT'] == 'auto_form_3') 
            
            korrekt:
            PHP-Code:
            if ($objForm->id == '3') 
            
            Nu sollte's aber klappen

            Schöne Grüße
            Tom

            Kommentar

            • wsa
              Contao-Nutzer
              • 27.10.2009
              • 131

              #21
              Daaaankeee!

              Das war's! :-)

              Kommentar

              Lädt...