Ergebnis 1 bis 23 von 23

Thema: inputType upload im eigenen Bundle

  1. #1
    Contao-Nutzer Avatar von ttcdummy
    Registriert seit
    02.03.2014.
    Beiträge
    213
    User beschenken
    Wunschliste

    Standard inputType upload im eigenen Bundle

    Hallo zusammen,

    ich habe im eigenen Bundle ein Formular, dessen Felder ich so erstelle:
    PHP-Code:
    $arrFields = array
    (
    [...]
        
    'title' => array
            (
            
    'name'      => 'title',
            
    'label'     => $GLOBALS['TL_LANG']['MSC']['title'],
            
    'inputType' => 'text',
            
    'eval'      => array('mandatory'=>true'maxlength'=>255)
        ),
        [...]
        
    'image' => array
        (
            
    'name'      => 'image',
            
    'label'     => $GLOBALS['TL_LANG']['MSC']['image'],
            
    'inputType' => 'upload',
            
    'eval'      => array('extensions' => 'jpg,jpeg,gif,png''storeFile' => true'uploadFolder' => 'files/website_data''doNotOverwrite' => true'maxlength' => 2048000)
        ),
    [...]
    ); 
    Das Ganze wird dann validiert und gespeichert:
    PHP-Code:
    if (!$doNotSubmit && \Input::post('FORM_SUBMIT') == $strFormId)
    {
    [...]

        
    $arrSet = array
        (
            [...]
            
    'title'           => $arrWidgets['title']->value,
            [...]
        );

    [...]

        
    $objForm = new FormEntriesModel();
        
    $objForm->setRow($arrSet)->save();
    [...]

    Funktioniert mit den Textfeldern auch.

    Meine Frage:

    Wie speichere ich am elegantesten das Bild ('inputType' => 'upload') so, dass es im angegeben Verzeichnis (files/website_data) liegt und in der Datenbank, sodass ich es per DCA auch wieder mit dem FileTree aufrufen kann?

    Derzeit wird das Input-Feld für den Dateiupload im FE nur angezeigt, aber keine Datei gespeichert.

    Viele Grüße
    Geändert von ttcdummy (08.01.2019 um 06:06 Uhr)

  2. #2
    Contao-Nutzer Avatar von ttcdummy
    Registriert seit
    02.03.2014.
    Beiträge
    213
    User beschenken
    Wunschliste

    Frage

    Niemand eine Idee?
    Vielleicht gehe ich da ja auch ganz falsch dran?
    Geändert von ttcdummy (08.01.2019 um 08:09 Uhr)

  3. #3
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.109
    Partner-ID
    10107

    Standard

    Dazu müsste man den ganzen Code sehen.

    Ich würde jedoch empfehlen solche Formulare mit Contao Haste zu generieren.

  4. #4
    Contao-Nutzer Avatar von ttcdummy
    Registriert seit
    02.03.2014.
    Beiträge
    213
    User beschenken
    Wunschliste

    Standard

    Danke. Das versuche ich gerne erst einmal.
    Ich gehe mal davon aus, dass das hier ein guter Startpunkt ist: https://github.com/codefog/contao-ha...s/Form/Form.md ?

    Ansonsten bin ich für Links zu lehrreichen Beispielen gerne offen.

  5. #5
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.109
    Partner-ID
    10107

    Standard

    Genau, ja

  6. #6
    Contao-Nutzer Avatar von ttcdummy
    Registriert seit
    02.03.2014.
    Beiträge
    213
    User beschenken
    Wunschliste

    Standard

    Das ist ja "amazing" Formularfelder aus dem DCA direkt erstellen. Sehr schön, danke für den Tipp!

    Ich habe folgendes "nachgebaut":
    https://community.contao.org/de/show...ular-auswerten

    Allerdings bin ich mir nicht ganz sicher wie ich einen speziellen Ordner z. B. "/files/website_data/mitglieder_upload/" der Variablen $uploadFolder gebe.

    Gemacht habe ich:
    PHP-Code:
    $uploadFolder "files/website_data/mitglieder-uploads"
    Ich erhalte bei der Validierung:
    Code:
    Invalid upload folder ID files/website_data/mitglieder-uploads
    Kann mir jemand sagen, wie man das Verzeichnis korrekt angibt? Ich würde es gerne manuell festlegen direkt im Code.

  7. #7
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.109
    Partner-ID
    10107

    Standard

    Du musst da eine UUID angeben. Am einfachsten bekommst du die mit \Dbafs::addResource

  8. #8
    Contao-Nutzer Avatar von ttcdummy
    Registriert seit
    02.03.2014.
    Beiträge
    213
    User beschenken
    Wunschliste

    Computer

    Danke für den Hinweis! Funktioniert mit dem Upload nun.

    Ich weiß ich bin lästig

    Wie gebe ich dem DCA-Feld, dass ich ja hier entfernt habe:
    PHP-Code:
        $objForm->addFieldsFromDca('tl_feedback', function(&$strField, &$arrDca) {
        if (
    $arrDca['inputType'] == 'fileTree' || !isset($arrDca['inputType'])) {
            return 
    false;
        }
        return 
    true;
    }); 
    zu verstehen, dass er das gerade hoch geladene Bild auch wählen soll?

  9. #9
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.109
    Partner-ID
    10107

    Standard

    Was meinst du mit wählen?

  10. #10
    Contao-Nutzer Avatar von ttcdummy
    Registriert seit
    02.03.2014.
    Beiträge
    213
    User beschenken
    Wunschliste

    Standard

    Nun, ich habe derzeit innerhalb des Backends an dem DCA-Feld:
    PHP-Code:
    'file_upload' => array
    (
        
    'label'                   => &$GLOBALS['TL_LANG']['tl_feedback']['feedback_image'],
        
    'exclude'                 => true,
        
    'inputType'               => 'fileTree',
        
    'eval'                    => array('files'=>true'filesOnly'=>true,'extensions'=>'jpg,jpeg,png,gif','fieldType'=>'radio'),
        
    'sql'                     => "varchar(255) NOT NULL default ''"
    ), 
    kein gewähltes Bild. Hier soll ja auch das hoch geladene Bild erscheinen.

  11. #11
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.109
    Partner-ID
    10107

    Standard

    Du hast dort eine falsche DCA Konfiguration. Sieh dir bspw. tl_content.singleSRC an für die richtige DCA Konfiguration.

  12. #12
    Contao-Nutzer Avatar von ttcdummy
    Registriert seit
    02.03.2014.
    Beiträge
    213
    User beschenken
    Wunschliste

    Standard

    Danke für den Hinweis. Habe das angeglichen.

    Mhm ... vielleicht sehe ich inzwischen den Wald vor lauter Bäumen nicht mehr.

    Mit Haste gehe ich hin und entferne alle Felder mit inputType 'fileTree':
    PHP-Code:
    $objForm->addFieldsFromDca('tl_feedback', function(&$strField, &$arrDca) {
        if (
    $arrDca['inputType'] == 'fileTree' || !isset($arrDca['inputType'])) {
            return 
    false;
        }
        return 
    true;
    }); 
    und füge dann manuell ein Feld hinzu:
    PHP-Code:
    $objForm->addFormField('upload_file', array(
      
    'label'         => 'Datei-Upload',
      
    'inputType'     => 'upload',
      
    'eval'          => array('extensions'=>'jpg,jpeg,gif,png''storeFile'=>true'uploadFolder'=> $uploadFolder->uuid'doNotOverwrite' => true'maxlength' => 2048000)
    )); 
    Das entfernte Feld im DCA ist in der tl_feedback.php:
    PHP-Code:
    'upload_file' => array
    (
      
    'label'                   => &$GLOBALS['TL_LANG']['tl_feedback']['upload_file'],
      
    'exclude'                 => true,
      
    'inputType'               => 'fileTree',
      
    'eval'                    => array('filesOnly'=>true'fieldType'=>'radio''mandatory'=>true'tl_class'=>'clr'),
      
    'load_callback' => array
      (
        array(
    'Feedback''setSingleSrcFlags')
      ),
      
    'sql'                     => "binary(16) NULL"
    ), 
    Fülle ich das Formular aus und lade ein Bild hoch. Landet das wie gewünscht im richtigen Ordner, allerdings bleibt es dabei dass in der Datenbank bei upload_file "NULL" seht.

  13. #13
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.109
    Partner-ID
    10107

    Standard

    Hm, da bin ich jetzt auch überfragt, ohne näheres self-debugging

  14. #14
    Contao-Nutzer Avatar von ttcdummy
    Registriert seit
    02.03.2014.
    Beiträge
    213
    User beschenken
    Wunschliste

    Standard

    Also anscheinend bekommt das Model ja gar kein "upload_file" mitgeteilt.
    Wenn ich die Seite ohne reload() absende und $_FILES oder $_POST ausgebe erhalte ich kein Bild, da ist kein "upload_file" im Array

    Vor dem Speichern könnte man das ja ändern:
    PHP-Code:
    $feedbackModel->upload_file $IRGENDWIE_DAS_BILD
    Dazu müsste man aber wissen was hier rein gegangen ist:
    PHP-Code:
    $objForm->addFormField('upload_file', array(
      
    'label'         => 'Datei-Upload',
      
    'inputType'     => 'upload',
      
    'eval'          => array('extensions'=>'jpg,jpeg,gif,png''storeFile'=>true'uploadFolder'=> $uploadFolder->uuid'doNotOverwrite' => true'maxlength' => 2048000)
    )); 
    Kann ich mir das irgendwie vielleicht zu Nutze machen?

  15. #15
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.109
    Partner-ID
    10107

    Standard

    Zeige mal den gesamten Code.

  16. #16
    Contao-Nutzer Avatar von ttcdummy
    Registriert seit
    02.03.2014.
    Beiträge
    213
    User beschenken
    Wunschliste

    Standard

    Is ja viel Kram

    tl_feedback.php

    PHP-Code:
    <?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
    $GLOBALS['TL_DCA']['tl_feedback'] = array
    (

      
    // Config
      
    'config' => array
      (
        
    'dataContainer'               => 'Table',
        
    'switchToEdit'                => true,
        
    'enableVersioning'            => true,
        
    'markAsCopy'                  => 'title',
        
    'sql' => array
        (
          
    'keys' => array 
          (
            
    'id' => 'primary'
          
    )
        ),
      ),

      
    // List
      
    'list' => array
      (
        
    'sorting' => array
        (
          
    'mode'                    => 1,
          
    'flag'                    => 8,
          
    'fields'                  => array('created_time'),
          
    'headerFields'            => array('title''tstamp' ,'created_time'),
          
    'panelLayout'             => 'sort,search,limit',
        ),
        
    'label' => array
        (
          
    'fields'                  => array('tstamp''created_time'),
          
    'format'                  => '%s',
          
    'label_callback'          => array('Feedback''listFeedbacks')
        ),
        
    'global_operations' => array
        (
          
    'all' => array
          (
            
    'label'               => &$GLOBALS['TL_LANG']['MSC']['all'],
            
    'href'                => 'act=select',
            
    'class'               => 'header_edit_all',
            
    'attributes'          => 'onclick="Backend.getScrollOffset();" accesskey="e"'
          
    )
        ),
        
    'operations' => array
        (
          
    'editheader' => array
          (
            
    'label'               => &$GLOBALS['TL_LANG']['tl_feedback']['editheader'],
            
    'href'                => 'act=edit',
            
    'icon'                => 'header.gif'
          
    ),
          
    'copy' => array
          (
            
    'label'               => &$GLOBALS['TL_LANG']['tl_feedback']['copy'],
            
    'href'                => 'act=copy',
            
    'icon'                => 'copy.gif'
          
    ),
          
    'delete' => array
          (
            
    'label'               => &$GLOBALS['TL_LANG']['tl_feedback']['delete'],
            
    'href'                => 'act=delete',
            
    'icon'                => 'delete.gif',
            
    'attributes'          => 'onclick="if (!confirm(\'' $GLOBALS['TL_LANG']['MSC']['deleteConfirm'] . '\')) return false; Backend.getScrollOffset();"'
          
    ),
          
    'toggle' => array
          (
            
    'label'               => &$GLOBALS['TL_LANG']['tl_feedback']['toggle'],
            
    'icon'                => 'visible.svg',
            
    'attributes'          => 'onclick="Backend.getScrollOffset();return AjaxRequest.toggleVisibility(this,%s)"',
            
    'button_callback'     => array('Feedback''toggleIcon')
          ),
          
    'show' => array
          (
            
    'label'               => &$GLOBALS['TL_LANG']['tl_feedback']['show'],
            
    'href'                => 'act=show',
            
    'icon'                => 'show.gif'
          
    )
        )
      ),

      
    // Palettes
      
    'palettes' => array
      (
        
    '__selector__'                => array(''),
        
    'default'                     => '
          {feedback_legend},title,created_time;
          {feedback_contact_legend},vorname,nachname,email,ip,feedback_text,upload_file;
          {element_extra_legend:hide},invisible
        '
      
    ),

      
    // Fields
      
    'fields' => array
      (
        
    'id' => array
        (
          
    'sql'                     => "int(10) unsigned NOT NULL auto_increment",
        ),
        
    'tstamp' => array
        (
          
    'label'                   => &$GLOBALS['TL_LANG']['tl_feedback']['tstamp'],
          
    'sql'                     => "int(10) unsigned NOT NULL default '0'",
        ),
        
    'title' => array
        (
          
    'label'                   => &$GLOBALS['TL_LANG']['tl_feedback']['title'],
          
    'exclude'                 => true,
          
    'inputType'               => 'text',
          
    'search'                  => true,
          
    'sorting'                 => true,
          
    'eval'                    => array('mandatory'=>true'minlength'=>1'maxlength'=>255'tl_class'=>'w50 clr'),
          
    'sql'                     => "varchar(255) NOT NULL default ''"
        
    ),
        
    'created_time' => array
        (
          
    'label'                   => &$GLOBALS['TL_LANG']['tl_feedback']['created_time'],
          
    'default'                 => time(),
          
    'inputType'               => 'text',
          
    'eval'                    => array('rgxp'=>'datim''mandatory'=>true'doNotCopy'=>true'datepicker'=>true'tl_class'=>'w50 wizard'),
          
    'sql'                     => "int(10) unsigned NULL"
        
    ),
        
    'vorname' => array
        (
          
    'label'                   => &$GLOBALS['TL_LANG']['tl_feedback']['vorname'],
          
    'exclude'                 => true,
          
    'search'                  => true,
          
    'inputType'               => 'text',
          
    'eval'                    => array('mandatory'=>true'doNotCopy'=>true'tl_class'=>'w50 clr'),
          
    'sql'                     => "varchar(255) NOT NULL default ''"
        
    ),
        
    'nachname' => array
        (
          
    'label'                   => &$GLOBALS['TL_LANG']['tl_feedback']['nachname'],
          
    'exclude'                 => true,
          
    'search'                  => true,
          
    'inputType'               => 'text',
          
    'eval'                    => array('mandatory'=>true'doNotCopy'=>true'tl_class'=>'w50'),
          
    'sql'                     => "varchar(255) NOT NULL default ''"
        
    ),
        
    'email' => array
        (
          
    'label'                   => &$GLOBALS['TL_LANG']['tl_feedback']['email'],
          
    'exclude'                 => true,
          
    'search'                  => true,
          
    'inputType'               => 'text',
          
    'eval'                    => array('rgxp'=>'email''doNotCopy'=>true'tl_class'=>'w50 clr'),
          
    'sql'                     => "varchar(255) NOT NULL default ''"
        
    ),
        
    'ip' => array
        (
          
    'label'                   => &$GLOBALS['TL_LANG']['tl_feedback']['ip'],
          
    'exclude'                 => true,
          
    'search'                  => true,
          
    'inputType'               => 'text',
          
    'eval'                    => array('doNotCopy'=>true'readonly'=> true'tl_class'=>'w50'),
          
    'sql'                     => "varchar(255) NOT NULL default ''"
        
    ),
        
    'feedback_text' => array
        (
          
    'label'                   => &$GLOBALS['TL_LANG']['tl_feedback']['feedback_text'],
          
    'exclude'                 => false,
          
    'inputType'               => 'textarea',
          
    'sorting'                 => true,
          
    'eval'                    => array('mandatory'=>true'rte'=>'tinyMCE''helpwizard'=>true'tl_class'=>'clr w100'),
          
    'sql'                     => "mediumtext NULL"
        
    ),
        
    'upload_file' => array
        (
          
    'label'                   => &$GLOBALS['TL_LANG']['tl_feedback']['upload_file'],
          
    'exclude'                 => true,
          
    'inputType'               => 'fileTree',
          
    'eval'                    => array('filesOnly'=>true'fieldType'=>'radio''mandatory'=>false'tl_class'=>'clr'),
          
    'load_callback' => array
          (
            array(
    'Feedback''setSingleSrcFlags')
          ),
          
    'sql'                     => "binary(16) NULL"
        
    ),
        
    'invisible' => array
        (
          
    'label'                   => &$GLOBALS['TL_LANG']['tl_feedback']['invisible'],
          
    'exclude'                 => true,
          
    'filter'                  => true,
          
    'inputType'               => 'checkbox',
          
    'default'                 => '0',
          
    'sql'                     => "char(1) NOT NULL default ''"
        
    )
      )
    );

    class 
    Feedback extends \Backend
    {

    [...]
    der ganze Kram der da sonst für toogleView uswreingehört[...]

      public function 
    setSingleSrcFlags($varValueContao\DataContainer $dc)
      {
        if (
    $dc->activeRecord)
        {
          switch (
    $dc->activeRecord->type)
          {
            case 
    'text':
            case 
    'hyperlink':
            case 
    'image':
            case 
    'accordionSingle':
              
    $GLOBALS['TL_DCA'][$dc->table]['fields'][$dc->field]['eval']['extensions'] = Contao\Config::get('validContao\ImageTypes');
              break;
            case 
    'download':
              
    $GLOBALS['TL_DCA'][$dc->table]['fields'][$dc->field]['eval']['extensions'] = Contao\Config::get('allowedDownload');
              break;
          }
        }
        return 
    $varValue;
      }

    }
    FeedbackFormModule.php:

    PHP-Code:
    <?php
    namespace XYZ\FeedbackBundle\FrontendModule;

    use 
    XYZ\FeedbackBundle\Model\FeedbackEntriesModel;
    use 
    Contao\BackendTemplate;
    use 
    Contao\Controller;
    use 
    Contao\Database;
    use 
    Contao\FrontendTemplate;
    use 
    Contao\Model\Collection;
    use 
    Contao\PageModel;
    use 
    Contao\StringUtil;
    use 
    Contao\System;
    use 
    Patchwork\Utf8;


    class 
    FeedbackFormModule extends \Contao\Module
    {

        
    /**
         * Display a wildcard in the back end
         *
         * @return string
         */
        
    public function generate()
        {
            if (
    TL_MODE === 'BE') {
                
    $template = new BackendTemplate('be_wildcard');
                
    $template->wildcard '### '.Utf8::strtoupper($GLOBALS['TL_LANG']['FMD']['feedback']).' ###';
                
    $template->title $this->title;
                
    $template->id $this->id;
                
    $template->href 'contao/main.php?do=themes&amp;table=tl_module&amp;act=edit&amp;id='.$this->id;
                return 
    $template->parse();
            }

            return 
    parent::generate();

        }

        
    /**
         * Template
         * @var string
         */
        
    protected $strTemplate 'mod_feedback_form';

        
    /**
         * Compile the module
         */
        
    protected function compile()
        {

          if (
    $this->feedbackFormTpl != "") :
              
    $this->Template = new \FrontendTemplate($this->feedbackFormTpl);
          endif;

          
    $uploadFolder = \Dbafs::addResource("files/website_data/mitglieder-uploads");

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

          
    $objForm->addFieldsFromDca('tl_feedback', function(&$strField, &$arrDca) {
              if (
    $arrDca['inputType'] == 'fileTree' || !isset($arrDca['inputType'])) {
                  return 
    false;
              }
              return 
    true;
          });

          
    $objForm->removeFormField('created_time');
          
    $objForm->removeFormField('ip');
          
    $objForm->removeFormField('invisible');

          
    $objForm->addFormField('upload_file', array(
            
    'label'         => 'Datei-Upload',
            
    'inputType'     => 'upload',
            
    'eval'          => array('extensions'=>'jpg,jpeg,gif,png''storeFile'=>true'uploadFolder'=> $uploadFolder->uuid'doNotOverwrite' => true'maxlength' => 2048000)
          )); 

          
    $objForm->addCaptchaFormField('captcha');
          
    $objForm->addSubmitFormField('submit''Submit form');

          
    $feedbackModel = new FeedbackEntriesModel();
          
    $time time();
          
    $feedbackModel->tstamp $time;
          
    $feedbackModel->created_time $time;
          
    $feedbackModel->ip = \Environment::get('ip');
          
    $feedbackModel->invisible "1"// new feedback must be moderated to be published
          // Das Model an das Formular binden
          
    $objForm->bindModel($feedbackModel);

          
    // Hier prüft haste ob das Formular abgeschickt wurde und alle Felder valide sind.
          
    if ($objForm->validate()) {
              
    // Das Model enthält jetzt die Daten vom Formular und kann gespeichert werden.
              
    $feedbackModel->save();
              
    $this->reload();
          }

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

        }

    }

    ?>
    FeedbackEntriesModel.php

    PHP-Code:
    <?php
    namespace XYZ\FeedbackBundle\Model;

    use 
    Contao\Model\Collection;
    use 
    Contao\Database;
    use 
    Contao\PageModel;
    use 
    Contao\System;

    class 
    FeedbackEntriesModel extends \Contao\Model
    {

      
    /**
       * Table name
       * @var string
       */
      
    protected static $strTable 'tl_feedback';

    }

  17. #17
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.109
    Partner-ID
    10107

    Standard

    Sollte passen.

    Das einzige was mir auffällt ist, dass du
    PHP-Code:
    'load_callback' => array
          (
            array(
    'Feedback''setSingleSrcFlags')
          ), 
    nicht wirklich brauchst. Die entsprechenden DCA Optionen kannst du ja auch direkt setzen. Das wird nur in tl_content.singleSRC benötigt, weil es abhängig vom Typ des Inhaltselements ist.

  18. #18
    Contao-Nutzer Avatar von ttcdummy
    Registriert seit
    02.03.2014.
    Beiträge
    213
    User beschenken
    Wunschliste

    Standard

    Die Ausgabe des Formulars im Template erfolgt einfach mit:
    PHP-Code:
    <?= $this->form?>
    Was mir ein:
    HTML-Code:
    <div class="hasteform_feedback_data block">
      <form action="app_dev.php/de/feedback" method="post" enctype="multipart/form-data">
      [...]
        <div class="widget widget-upload">
          <label for="ctrl_upload_file">Datei-Upload</label>
          <input type="file" name="upload_file" id="ctrl_upload_file" class="upload">
        </div>
      [...]
      </form>
    </div>
    bringt, richtig?
    Geändert von ttcdummy (08.01.2019 um 13:46 Uhr)

  19. #19
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.109
    Partner-ID
    10107

  20. #20
    Contao-Nutzer Avatar von ttcdummy
    Registriert seit
    02.03.2014.
    Beiträge
    213
    User beschenken
    Wunschliste

    Standard

    Hm, ich find's und versteh's nicht.

    HTML-Code:
    <form action="de/feedback" method="post" enctype="multipart/form-data">
      <div class="formbody">
        <div class="widget widget-upload">
          <label for="ctrl_upload_file">Datei-Upload</label>
          <input type="file" name="upload_file" id="ctrl_upload_file" class="upload" size="15728640">
         </div>
        <div class="widget widget-submit">
          <button type="submit" id="ctrl_submit" class="submit" name="submit">Submit form</button>
        </div>
      </div>
    </form>
    Und dennoch erhalte bei der Ausgabe im Template:
    PHP-Code:
    <?php var_dump($_FILES); ?>
    einfach nur ein leeres Array:
    Code:
    array(0) { }

  21. #21
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.109
    Partner-ID
    10107

    Standard

    Das ist normal, denn beim prozessieren des POST Requests für das Formular löscht Contao dieses Array: https://github.com/contao/contao/blo...pload.php#L295

  22. #22
    Contao-Nutzer Avatar von ttcdummy
    Registriert seit
    02.03.2014.
    Beiträge
    213
    User beschenken
    Wunschliste

    Standard

    OK.

    Besteht denn irgendwie die Möglichkeit das gerade genutzte Bild unter upload_file der Tabelle tl_feedback

    durch z. B.:
    PHP-Code:
    $feedbackModel->upload_file $IRGENDWIE_DAS_BILD
    direkt mitzuteilen?

  23. #23
    Contao-Nutzer Avatar von ttcdummy
    Registriert seit
    02.03.2014.
    Beiträge
    213
    User beschenken
    Wunschliste

    Standard

    Also ich weiß mir nicht weiter zu helfen und habe jetzt folgendes gemacht im Validierungsteil:

    PHP-Code:
    // Hier prüft haste ob das Formular abgeschickt wurde und alle Felder valide sind.
    if ($objForm->validate()) {

        
    // Die UUID des Bildes erstellen und an das Model übergeben.
        
    if ($_SESSION['FILES']['upload_file']['name']) :
            
    $feedbackModel->upload_file = \Dbafs::addResource($strUploadFolder."/".$_SESSION['FILES']['upload_file']['name'])->uuid;
        endif;
        
    // Das Model enthält jetzt die Daten vom Formular und kann gespeichert werden.
        
    $feedbackModel->save();
        
    // SESSION-Daten löschen um zu verhindern das beim nächsten Aufruf und nicht gesetztem Bild das zuletzt verwendete übernommen wird.
        
    unset($_SESSION['FILES']);

        
    // Weiterleitung auf Bestätigungsseite, ansonsten aktuelle Seite neu laden.
        
    if ($this->jumpTo) :
            
    $objPage = \PageModel::findByPk($this->jumpTo);
            
    $this->redirect($objPage->alias);
        else :
            
    $this->reload();
        endif;


    Jetzt wird das passende Bild hochgeladen und auch angezeigt in den Backend-Masken (DCA) unter upload_file.
    Vielleicht nicht schön und es geht bestimmt eleganter, jetzt funktioniert es aber.
    Geändert von ttcdummy (09.01.2019 um 08:12 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
  •