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.

Garrett
quelle

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),
  ),
);
Bart
quelle
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 .

NAHE DUNKELHEIT
quelle
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