Wie lege ich zulässige Erweiterungen für ein Formularfeld "managed_file" fest?


27

Wenn Sie kein Glück haben, finden Sie dies in der Drupal-Dokumentation oder in Entwicklerbeispielen. Ich muss ein managed_file-Formularfeld festlegen, um nur ZIP-Dateien in einem benutzerdefinierten Drupal 7-Modul zuzulassen.

Antworten:


40
$form['picture']['file'] = array(
  '#type' => 'managed_file',
  '#title' => t('picture'),
  '#description' => t('Allowed extensions: gif png jpg jpeg'),
  '#default_value' => (isset($foo->picture->fid) ? $foo->picture->fid : ''),
  '#upload_location' => variable_get('picture_upload_location'),
  '#upload_validators' => array(
    'file_validate_extensions' => array('gif png jpg jpeg'),
    // Pass the maximum file size in bytes
    'file_validate_size' => array(MAX_FILE_SIZE*1024*1024),
  ),
);

1
Ich habe versucht, file_validate_size, aber es funktioniert nicht.
ARUN

Das klappt bei mir nicht.
Mr_DeLeTeD

wehre kommen von $ foo?
Khaled_webdev

Es scheint, dass die Überprüfung nicht automatisch erfolgt, wenn Sie eine Datei manuell speichern. Ich musste es so machen:$file = file_save_upload('file', $form['picture']['file']['#upload_validators']);
Leksat

Dies funktioniert auch in Drupal 8.
sanzante

1

Ich bin nicht sicher, ob Sie Drupal 6 oder Drupal 7 verwenden, aber in Drupal 6 würden Sie wählen:

  • Admin > Inhalt > Inhaltstypen > [Ihr Inhaltstyp]> Felder verwalten > [Dateifeld bearbeiten] und suchen Sie nach der Feldeinstellung "Zulässige Upload-Dateierweiterungen".

  • In diesem Feld geben Sie zip ein

Drupal 7 ist wahrscheinlich ähnlich. Suchen Sie unter Admin > Struktur nach Inhaltstypen .


Drupal 7, entschuldigen Sie die Auslassung. Ich verwende ein managed_field-Formularelement in einem benutzerdefinierten Modul, sodass der Administrator nicht helfen kann. Ich brauche eine Programmierlösung.
Garrett

4
Ich glaube, Sie können #upload_validators verwenden: $ form ['file'] ['# upload_validators'] ['file_validate_extensions'] [0] = 'png jpg gif pdf';
NEAR DARK

NEAR DARK gewinnt es. Nach dem Einfügen in diese Zeile musste festgestellt werden, dass ich in meinem ursprünglichen Formularelement-Array einen Tippfehler hatte. Im Grunde genommen ist dies eine gut dokumentierte Funktion der Formular-API, die ich aufgrund eines Rechtschreibfehlers nicht erhalten habe. Tut mir leid, Leute.
Garrett

Hinweis: In Drupal 6 gibt es kein Formularfeld "managed_file", sondern nur eine Datei. Quelle: Drupal 6 Form API-Referenz
Bart
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.