Startseite
  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche
Startseite › Forum › Drupalcenter.de › Module ›

Upload Feld einbinden mittels Form API

Eingetragen von paese (9)
am 08.04.2010 - 13:27 Uhr in
  • Module
  • Drupal 6.x

Hallo, ich steh grad völlig auf dem Schlauch. Ich möchte ein vereinfachtes Formular eines content types erstellen. Und eines der Felder sollte files uploaden können.
Wie kann ich den upload Mechanismus (attachments) in ein eigenes Formular integrieren?

Ich hab auch probiert das mit imagefield und filefield Felder zu realisieren. Aber da ist das selbe Problem. Es gibt fast keine Dokumentation zu dem #type 'imagefield_widget' oder 'filefield_widget'.

Weiss jemand mehr darüber?
paese

‹ ckeditor / installation / aktivierung des moduls wie kann man HTML formatierten Text mit Lightbox2 anzeigen? ›
  • Anmelden oder Registrieren um Kommentare zu schreiben

Was genau willst du denn

Eingetragen von stebeg (463)
am 08.04.2010 - 13:40 Uhr

Was genau willst du denn machen bzw. wozu brauchst du die Upload-Funktion. Eventuell gibts ja ne einfachere Lösung als es selbst zu coden.

ansonsten müsste es so gehen:

<?php
function MY_MODULE_forms()
{
 
$form['#attributes'] = array('enctype' => "multipart/form-data");
 
$form['my_upload'] = array(
   
'#type' => 'file',
   
'#title' => 'Datei Hochladen',
   
'#description' => 'Eine Beschreibung',
    );
 
$form['my_upload_submit'] = array(
   
'#title'  => 'Hochladen',
   
'#value'  => 'Hochladen',
   
'#type'   => 'submit',
    );
  return
$form;
}

function
MY_MODULE_forms_submit($form, &$form_state)
{
 
$validators = array( 'file_validate_extensions' => array('pdf txt exe')); //Erlaubte Datei-Endungen
  //Pfad des Ordners, wo die Uploads gespeichert werden
 
$upload_path = 'sites/default/files/downloads/';
  if(
$file = file_save_upload('my_upload', $validators, $upload_path,
    
$replace = FILE_EXISTS_RENAME))
  {
   
file_set_status($file, FILE_STATUS_PERMANENT);
   
drupal_set_message("Upload erfolgreich");
  }
  else {
   
drupal_set_message('Fehler beim Upload', 'error');
  }
}
?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Das Problem ist, dass mehrere

Eingetragen von paese (9)
am 08.04.2010 - 13:45 Uhr

Das Problem ist, dass mehrere Uploads möglich sein müssen. Inklusive löschen und Vorschaubild anzeigen...
Ich möchte es eben nicht selber coden, den Upload Mechanismus find ich schon recht cool.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Also willst du ja nur Bilder

Eingetragen von stebeg (463)
am 08.04.2010 - 13:58 Uhr

Also willst du ja nur Bilder hochladen? Da würd ich zu CCK + Filefield + ImageField raten. Da kannst du beliebig viele Bilder nacheinander hochladen, ohne die Seite neu laden zu müssen und mit Vorschau-Bild. In diesem Zusammenhang kannst dir auch noch ImageCache anschauen, das bietet dafür noch ein paar zusätzliche Funktionen, wie z.B. das Bild verkleinern / vergrößern und solche sachen.

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ja eben, hab ich ja probiert.

Eingetragen von paese (9)
am 08.04.2010 - 14:07 Uhr

Ja eben, hab ich ja probiert. Wie bind ich jetzt korrekt das imagefield Feld in mein Formular ein?

Ich hab aus dem hook_elements herausgefunden, dass der #type imagefield_widget heissen muss. Das hat aber nicht funktioniert. (Fehlermeldung müsst ich nochmals reproduzieren) Dokumentation dazu hab ich keine gefunden...

  • Anmelden oder Registrieren um Kommentare zu schreiben

Und warum genau fügst du

Eingetragen von Exterior (2903)
am 08.04.2010 - 23:28 Uhr

Und warum genau fügst du nicht einfach einem Inhaltytyp via CCK ein Imagefield hinzu und erweiterst das ganze mit Image FUpload? Das wäre doch ganz einfach, oder?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ja das ist ganz einfach, ist

Eingetragen von paese (9)
am 09.04.2010 - 09:34 Uhr

Ja das ist ganz einfach, ist aber nicht das was ich erreichen möchte.

Ich probiere mein Problem ein bisschen zu umschreiben, vielleicht wirds dann klarer.

Ich habe einen Contenttype der aus ungefähr 30 Feldern besteht. Textareas, Textfields und weitere, alles kunterbunt gemischt. Ich möchte jetzt ein eigenes (kürzeres) Formular machen, das die Daten aus dem CCK bezieht und diese auch dort wieder speichert. Das Formular besteht aus zwei Textfelder und soll eben auch Dateien (mehrere) hochladen können. Das geht mit der Form API ganz gut bis auf den Upload.

Und jetzt die Quizfrage: Wie binde ich den upload Mechanismus (das kann drupal upload, cck imagefield oder cck filefield sein, ist mir egal) in mein Formular ein ohne alles neu zu programmieren?

  • Anmelden oder Registrieren um Kommentare zu schreiben

Falls es jemanden

Eingetragen von paese (9)
am 14.04.2010 - 12:59 Uhr

Falls es jemanden interessiert hab ich hier eine Lösung für das Problem. Es gibt ein paar Stolpersteine, aber so funktioniert das bei mir.

- Der Name des Formulars muss mit 'node_form' aufhören, weil das Upload Module einen CCK Type erwartet.
- Der Node muss zum Formular hinzugefügt werden
- Als Type den Formularname ($form_id) ohne 'node_form' definieren.
- Die submit Funktion muss explizit nochmal definiert werden und muss nach dem upload Modul submit kommen.

Danach greift der form_alter hook vom Upload Modul und bindet die Attachments automatisch im Formular ein (falls Attachments eingeschalten sind).

<?php
function MY_MODULE_my_form_node_form($form_state, $node) { //important that your $form_id ends with 'node_form'
 
$form = array();

 
//add node values to the form
 
$form['#node'] = $node;
 
$form['type'] = array('#value'=>'MY_MODULE_my_form');

 
$form['my_textfield'] = array(
   
'#type' => 'textfield',
   
'#title' => t('textfield'),
   
'#default_value' => $node->field_my_textfield[0]['value'],
    );
 
 
$form['#submit'][] = 'upload_node_form_submit';
 
$form['#submit'][] = 'MY_MODULE_my_form_node_form_submit';

  return
$form;
}

function
MY_MODULE_my_form_node_form_submit($form, &$form_state) {
 
$nid = (int) $form_state['values']['nid'];
 
$node = node_load($nid, NULL, true);
 
 
$node->field_my_textfield[0]['value'] = $form_state['values']['my_textfield'];
 
 
//add files to the node
 
if (is_array($form_state['values']['files'])) {
    foreach(
$form_state['values']['files'] as $fid => $file) {
     
$node->files[$fid] = $file;
    }
  }
 
node_save($node);
}
?>

  • Anmelden oder Registrieren um Kommentare zu schreiben

Ohne zu programmieren geht

Eingetragen von wla (9289)
am 15.04.2010 - 08:08 Uhr

Ohne zu programmieren geht das nicht. Das ergibt sich schon aus der Aufgabenstellung den Node über ein kürzeres Formular zu speichern. Mit der Definition des Datentyps stellt Drupal das zugehörige Formular bereit. Willst Du das nicht nutzen mußt Du die Umgehung selbst programmieren. Das Upload Feld kommt dann dazu.
Warum nicht den Node Type mit Gruppen versehen, die im Normalfall zugeklappt bleiben. Damit läßt sich Dein Formular auch verkürzen und du mußt nichts selbst programmieren.

.
Werner
drupal-training.de
Moderator und Drupal Trainer
* - - - - - - - - - - - - - - - - - - - - - - - - - - - *

  • Anmelden oder Registrieren um Kommentare zu schreiben

Benutzeranmeldung

  • Registrieren
  • Neues Passwort anfordern

Aktive Forenthemen

  • Drupal 10 und Thema Bartik
  • Wie in hook_views_query_alter() einen join auf Tabelle url_alias durchführen?
  • Strukturierte Daten Fehler
  • fbsmp\plugins Hilfe
  • Migration über feeds von D6 auf D8
  • Theme Classy sei installiert, ist aber nicht bei Themes
  • Composer 1 zu Composer 2
  • Bitte um Einschätzung: Upgrade von Drupal 7 auf 9
  • Scroll zu View-Ergebnissen nachdem Filter angewendet ist
  • SQL-Injection? User hat sich Zugriff aufs Admin-Konto geholt und Änderungen vorgenommen.
  • [gelöst] Persönliches Kontaktformular, oder interne User Nachrichten
  • Webform Progress Symbol (Loading icon)?
Weiter

Neue Kommentare

  • Superfish
    vor 3 Stunden 39 Minuten
  • Auch für superfish gibt es
    vor 7 Stunden 10 Minuten
  • Versuchs mal mit
    vor 7 Stunden 5 Minuten
  • Drupal 10 läuft
    vor 8 Stunden 6 Minuten
  • Da wirst Du den Bug wohl selbst beheben müssen
    vor 2 Tagen 3 Stunden
  • Gleiches Problem: bootstrap 4
    vor 4 Tagen 4 Stunden
  • Da wirst Du den Bug wohl
    vor 4 Tagen 7 Stunden
  • Immer noch composer 1 zu 2
    vor 4 Tagen 22 Stunden
  • Beziehung Branche Adresse!
    vor 3 Tagen 8 Stunden
  • Sorry, dann gab es das bei
    vor 5 Tagen 29 Minuten

Statistik

Beiträge im Forum: 248398
Registrierte User: 19752

Neue User:

  • Aman_Musani
  • Dustinjex
  • Rickywap

» Alle User anzeigen

User nach Punkten sortiert:
wla9289
stBorchert6003
quiptime4972
Tobias Bähr4019
bv3924
ronald3845
md3717
Thoor3678
Alexander Langer3416
Exterior2903
» User nach Punkten
Zur Zeit sind 0 User und 7 Gäste online.

Hauptmenü

  • » Home
  • » Handbuch & FAQ
  • » Forum
  • » Übersetzungsserver
  • » Suche

Quicklinks I

  • Infos
  • Drupal Showcase
  • Installation
  • Update
  • Forum
  • Team
  • Verhaltensregeln

Quicklinks II

  • Drupal Jobs
  • FAQ
  • Drupal-Kochbuch
  • Best Practice - Drupal Sites - Guidelines
  • Drupal How To's

Quicklinks III

  • Tipps & Tricks
  • Drupal Theme System
  • Theme Handbuch
  • Leitfaden zur Entwicklung von Modulen

RSS & Twitter

  • Drupal Planet deutsch
  • RSS Feed News
  • RSS Feed Planet
  • Twitter Drupalcenter
Drupalcenter Team | Impressum & Datenschutz | Kontakt
Angetrieben von Drupal | Drupal is a registered trademark of Dries Buytaert.
Drupal Initiative - Drupal Association