Ergebnis 1 bis 8 von 8

Thema: haste: Kalender-Eintrag und Datei-Upload im FE - möglich?

  1. #1
    Contao-Fan Avatar von marcos
    Registriert seit
    09.02.2011.
    Ort
    Schweiz
    Beiträge
    575
    User beschenken
    Wunschliste

    Frage haste: Kalender-Eintrag und Datei-Upload im FE - möglich?

    Hallo zusammen

    Ich muss ein FE-Formular erstellen, bei dem der User einen Event eintragen und dabei auch einen Anhang hinzufügen kann. Ich würde hierfür gerne auf haste zurückgreifen, bin mir aber nicht sicher, ob folgendes funktioniert:

    1. Kalender-Eintrag
    Der User soll das Formular mit Datum, Zeit, Teaser und Dateiltext ausfüllen und wenn er auf "Speichern" klickt, soll ein neuer Event-Termin erstellt werden. Neu ab Contao 3.x werden die Detail-Texte ja in der Tabelle tl_content gespeichert und die restlichen Informationen zum Event in der Tabelle tl_calendar_events. Kann ich mit haste die Eingabe splitten und einen Eintrag in tl_calendar_events und tl_content machen und verknüpfen?
    Wie muss ich da vorgehen?

    2. Dateiupload
    Kann man mit haste einen Dateiupload erstellen und das die hochgeladene Datei dann im Benutzerverzeichnis des Users gespeichert wird? Übernimmt haste dann die Datei-Upload-Rechte von Contao oder kann man auch einstellen was hochgeladen werden darf, wie gross, Dateitypen usw.?
    Falls ja, wie macht man sowas?


    Vielen Dank für eure Hilfe!

    Gruss
    Marco

  2. #2
    Contao-Nutzer
    Registriert seit
    27.08.2013.
    Beiträge
    38

    Standard

    Hallo Marco,

    Beschäftige mich auch gerade ein bisschen mit Haste.

    Die Antwort auf die 1.) Frage ist ja, du übernimmst bei Haste den gesamten Workflow nach dem Submit.
    Das heist zum einen das es das Einfügen in die Datenbank nicht automatisch selbst übernimmt (geht aber offensichtlich über die Models), und auf der anderen Seite, das du dies in deinem Modul selbst übernehmen kannst.

    Was die Dateiuploads angeht bin ich mir nicht ganz sicher, ich denke aber das funktionieren müsste, wenn du in deinem Modul den Upload programmatisch entgegen nimmst und verarbeitest.

    Genaueres kann ich eventuell nach dem Wochenende sagen ....

    VG,

    Jan

    P.S. Hier findest du die Doku zu den Formularen in Haste: https://github.com/codefog/contao-ha...s/Form/Form.md
    Geändert von barteljan (05.12.2014 um 08:08 Uhr)

  3. #3
    Contao-Fan Avatar von marcos
    Registriert seit
    09.02.2011.
    Ort
    Schweiz
    Beiträge
    575
    User beschenken
    Wunschliste

    Standard

    Hallo Jan

    Vielen Dank für deine Antwort.

    Ich hab' mal begonnen. Ich würde 1.) so lösen:

    PHP-Code:
    protected function compile() 


        
    $this->loadLanguageFile('tl_calendar_events');

        
    /* Generate form */
        
    $objForm = new \Haste\Form\Form('createEventRecord','POST',function ($objHaste)
        {
               return \
    Input::post('FORM_SUBMIT') === $objHaste->getFormId();
        });

        
    /*
        // so könnte man die DCA Felder auch irgendwie auslesen?!
        $objForm->addFieldsFromDca('tl_calendar_events', function(&$strField, &$arrDca) {

           return true;

        });*/

        /* Felder für tl_calendar_events  */
        
    $objForm->addFormField('title',array(
             
    'label'         => $GLOBALS['TL_LANG']['tl_calendar_events']['title'][0],
             
    'inputType'     => 'text',
             
    'eval'          => array('maxlength'=>255)
        ));
        
    $objForm->addFormField('startDate',array(
             
    'label'         => $GLOBALS['TL_LANG']['tl_calendar_events']['startDate'][0],
             
    'inputType'     => 'text',
             
    'eval'          => array('maxlength'=>10)
        ));
        
    $objForm->addFormField('endDate',array(
             
    'label'         => $GLOBALS['TL_LANG']['tl_calendar_events']['endDate'][0],
             
    'inputType'     => 'text',
             
    'eval'          => array('maxlength'=>10)
        ));

        
    /* Zusätzliches Feld für den Eintrag in tl_content */
        
    $objForm->addFormField('descriptionDetail',array(
             
    'label'         => $GLOBALS['TL_LANG']['tl_calendar_events']['descriptionDetail'][0],
             
    'inputType'     => 'text',
             
    'eval'          => array('maxlength'=>255)
        ));

        
    // Absendefeld 
        
    $objForm->addSubmitFormField('submit','Termin erstellen'); 

        
    // Formular auswerten nachdem es abgeschickt wurde
        
    if ($objForm->validate()){
            
            
    $arrData $objForm->fetchAll();

            foreach(
    $arrData as $key => $value)
            {
                if(
    $key!='descriptionDetail'){
                    
    $arrCalendarEvents[$key] = $value;
                }
                if(
    $key=='descriptionDetail'){
                    
    $arrContent[$key] = $value;
                }
            }

            
    /* Eintrag in die Datenbank:
             * $arrCalendarEvents --> tl_calendar_events
             * $arrContent --> tl_content
             ********************************************* */
        
    }       

        
    /* Template */
        
    $this->Template->form $objForm->generate();  


    Unten splitte ich die Werte einfach in zwei Arrays, welche ich dann bequem in die jeweilige Tabelle eintragen kann. Bzw. ich muss zuerst den Eintrag in "tl_calendar_events" machen und dann die ID des Eintrags herausfinden und diesen dann mit dem Eintrag in "tl_content" verknüpfen. Würdest du auch so vorgehen?


    Bzgl. Upload wäre es doch theoretisch möglich, im Backend mit dem Formulargenerator ein Formular mit einem Datei-Upload-Feld zu erstellen, welches dann in haste via $objForm->addFieldsFromFormGenerator eingebunden werden könnte?!
    Wie das mit dem Auslesen bestehender Felder genau funktioniert, habe ich irgendwie noch nicht ganz begriffen. Wollte das oben bei "tl_calendar_events" auch versuchen...
    Kannst du mir erklären, wie das geht?


    Danke und Gruss
    Marco

  4. #4
    Contao-Fan Avatar von marcos
    Registriert seit
    09.02.2011.
    Ort
    Schweiz
    Beiträge
    575
    User beschenken
    Wunschliste

    Frage Upload

    Den Upload habe ich nun wie folgt gelöst:

    1. Ein Formular "Datei-Upload" mit dem Formulargenerator erstellt.

    2. Dieses Formular dann mit Haste eingebunden:
    PHP-Code:
    $objForm->addFieldsFromFormGenerator(1, function(&$strField, &$arrDca) {
         return 
    true;
    }); 
    Wenn ich mein Formular absenden, wird die Datei korrekt hochgeladen.
    Das Problem ist aber, dass mir der Wert (Dateiname o.ä.) nicht übergeben wird.
    Code:
    [title] => Test [teaser] => Test 12345 [details] => Lorem Ipsum [Datei-Upload] => )
    Ich habe es auch schon mit dem postUpload HOOK versucht aber der scheint auch nicht zu greifen

    Weiss jemand, wie man dies abfragen kann? Ohne Dateiname oder UUID bringt einem der Upload ja nicht viel...


    Danke und Gruss
    Marco


    EDIT:
    Man muss den Datei-Upload nicht zwingend über ein extra Formular via Formulargenerator machen.
    Man kann auch direkt via haste ein Feld vom Typ "upload" erstellen und dann die entsprechenden Werte angeben.
    Funktioniert wunderbar
    PHP-Code:
    $objForm->addFormField('file_upload', array(
         
    'label'         => 'Datei-Upload',
         
    'inputType'     => 'upload',
         
    'eval'          => array('extensions'=>'jpg,jpeg,gif,png,pdf''storeFile'=>true'uploadFolder'=>$this->User->homeDir'doNotOverwrite' => true'maxlength' => 2048000)
    )); 
    Der Dateiname/die ID wird aber immer noch nicht übergeben:
    Code:
    [teaser] => Test [details] => Test 12345 [file_upload] => )
    Geändert von marcos (23.12.2014 um 14:22 Uhr)

  5. #5
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Frage

    Ich versuche gerade mich in die Form-Klasse von Haste einzuarbeiten. Dieser Thread war bzgl. Datei-Upload eine wichtige Quelle, denn in der FORM.md auf Github und in der Form.php selbst habe ich keine Hinweise gefunden. Insofern bin ich erstaunt, das Du ziemlich viel herausgefunden hast. Das mit dem homeDir funktioniert aber nicht.

    Außerdem ist mir nicht klar wozu ich die validate-Funktion brauche. Die liefert nach dem Absenden bei mir kein Ergebnis:
    PHP-Code:
    if ($objForm->validate()){
        
    $arrData $objForm->fetchAll();
        
    print_r($arrData);

    $arrData ist bei mir immer nicht vorhanden.

    Aber hier
    PHP-Code:
    /* Generate form */
    $objForm = new \Haste\Form\Form('createEventRecord','POST',function ($objHaste)
    {
      return \
    Input::post('FORM_SUBMIT') === $objHaste->getFormId();
    }); 
    komme ich an alle Werte des abgesendeten Formulars dafür heran. Um an die hochgeladene Datei heranzukommen, frage ich $_FILES ab.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  6. #6
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Mit der älteren Formular-Klasse von 4ward.media klappt der Upload. Die Klasse fand später Eingang in Haste.
    Allerdings bekomme ich keine Info, ob eine Datei und wenn ja wo hochgeladen und mit welchem Namen gespeichert wurde. Und $_FILES ist auch leer nach dem erfolgreichen Upload.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  7. #7
    Contao-Nutzer
    Registriert seit
    22.01.2013.
    Ort
    Hamburg
    Beiträge
    6

    Standard

    Die Uploads sind in der Session zu finden:
    $_SESSION['FILES']

  8. #8
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.794

    Standard

    Danke, muß ich mal ausprobieren. Inzwischen hatte ich einen externen Ajax-Upload eingesetzt.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

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
  •