Ich schreibe ein benutzerdefiniertes Modul und benötige es, um ein Bild hochzuladen. Ich habe Probleme, eine gute Dokumentation dazu zu finden, aber ich denke, ich bin nah dran.
Was vermisse ich? $ file gibt in der Formularübermittlung false zurück.
function mymodule_custom_content_block_form($form_state){
$form = array();
$form['custom_content_block_text'] = array(
'#type' => 'textarea',
'#title' => t('Block text'),
'#default_value' => variable_get('mymodule_custom_content_block_text'),
'#required' => true,
);
$form['custom_content_block_image'] = array(
'#type' => 'file',
'#name' => 'custom_content_block_image',
'#title' => t('Block image'),
'#size' => 40,
'#description' => t("Image should be less than 400 pixels wide and in JPG format."),
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Update'),
);
return $form;
}
function mymodule_custom_content_block_form_submit($form, &$form_state){
if(isset($form_state['values']['custom_content_block_image'])){
$validators = array('file_validate_extensions' => array('jpg jpeg'));
$file = file_save_upload('custom_content_block_image', $validators, 'public://');
if($file == false){
drupal_set_message(t("Error saving image."), $type = "error", $repeat = false);
}
else{
$file->status = FILE_STATUS_PERMANENT;
$file = file_save($file);
}
}
variable_set('mymodule_custom_content_block_text', $form_state['values']['custom_content_block_text']);
drupal_set_message(t('Custom Content Block has been updated.'));
}
Mit Clive Antwort wurde mein Bild nach 6 Stunden gelöscht. Also, wenn jemand das gleiche Problem hatte, das ich hatte. Hier ist die Lösung (aus Clives Antwort mit einer kleinen Ergänzung).
Die Lösung besteht darin, hinzuzufügen
file_usage_add
. Aus der API-Dokumentation:Siehe: https://api.drupal.org/api/drupal/developer%21topics%21forms_api_reference.html/7.x#managed_file
quelle
Dieses Attribut sollte Ihrem Formular hinzugefügt werden, damit es mit Datei-Uploads funktioniert.
quelle