Hallo zusammen,
ich beschäftige mich seit gestern mal wieder mit der Entwicklung von Modulen in Contao.
Im Frontend sollen über ein Formular erstmal Daten übergeben werden können.
Das funktioniert soweit auch schon, ich nutze dafür die Haste Erweiterung, erstmal vielen Dank, super Modul!
Allerdings habe ich ein paar Fragen, ob es so überhaupt richtig und im Sinne des Erfinders ist.
Und wenn ich nach dem Absenden des Formulares die Seite aktualisiere, wird der selbe Inhalt nochmal in die Datenbank eingetragen, das ist sicherlich eine Kleinigkeit, aber ich sehe gerade den Wald vor lauter Bäumen nicht, vielleicht kann mir ja jemand einen Denkanstoss geben?
Hier mal mein Code:
PHP-Code:
<?php
class ModuleKundenmeinungenEntry extends Module
{
/**
* Template
* @var string
*/
protected $strTemplate = 'mod_kundenmeinungen_entry';
/**
* Compile the current element
*/
protected function compile()
{
$objForm = new \Haste\Form\Form('kundenmeinung_data', 'POST', function($objHaste) {
$kundenmeinungModel = new kundenmeinungen\KundenmeinungenModel();
$kundenmeinungModel->setRow(array
(
'vorname' => $_POST['vorname'],
'nachname' => $_POST['nachname'],
'email' => $_POST['email'],
'bewertung' => $_POST['bewertung'],
));
$kundenmeinungModel->save();
echo "<pre>";
print_r($_POST);
echo "</pre>";
return \Input::post('FORM_SUBMIT') === $objHaste->getFormId();
});
$objForm->addFieldsFromDca('tl_kundenmeinungen', function(&$strField, &$arrDca) {
// make sure to skip elements without inputType or you will get an exception
if($arrDca['inputType'] == 'fileTree' || !isset($arrDca['inputType'])) {
return false;
}
// add anything you like
if ($strField == 'myField') {
$arrDca['eval']['mandatory'] = true;
}
// you must return true otherwise the field will be skipped
return true;
});
$objForm->addFormField('file_upload', array(
'label' => 'Datei-Upload',
'inputType' => 'upload',
'eval' => array('extensions'=>'jpg,jpeg,gif,png,pdf', 'storeFile'=>true, 'uploadFolder'=>"62685902-a38f-11e7-a280-1c1b0d42aeef", 'doNotOverwrite' => true, 'maxlength' => 2048000)
));
$objForm->addFormField('submit', array(
'label' => 'Submit form',
'inputType' => 'submit'
));
$objForm->addContaoHiddenFields();
$objForm->addSubmitFormField('submit', 'Submit form');
$objForm->addCaptchaFormField('captcha');
if ($objForm->validate()) {
$arrData = $objForm->fetchAll();
}
$this->Template->form = $objForm->generate();
}
}
Ist das setRow() so richtig, oder sollte man das irgendwie anders verwenden?
An der Stelle mit dem "uploadFolder" weiß ich selbst, dass ich die ID noch auslesen muss, habe mich aber noch nicht weiter mit beschäftigt, wird sicherlich in der Doku irgendwo zu finden sein.
EDIT: Das mit dem Refresh habe ich nun über $this->reload(); gelöst.
EDIT2: Hm, wenn ich das $this->reload(); nutze, dann wir der FileUpload anscheinend unterbrochen, kann mir dazu jemand etwas sagen?
Grüße,
Kai