2009-08-10 14 views
8

Ho difficoltà a capire come scrivere un modulo con un modulo che carica file, in Drupal 6. Qualcuno può spiegarlo o indicarmi un buon esempio/documentazione che lo discute?Howto: Drupal File Upload Form

EDIT:

Ecco tutto quello che sto cercando di fare: carica

  1. utente .csv
  2. modulo legge la prima riga del file per ottenere i campi
  3. L'utente corrisponde ai campi CSV con campi DB
  4. Ogni riga csv viene salvata come nodo (anteprima prima)

Finora, posso eseguire correttamente 1, 2 e 4. Ma non è chiaro esattamente come i passaggi dovrebbero interagire tra loro ($ form_state ['redirect']? Come dovrebbe essere usato?), E quali sono le migliori pratiche. E per 3, dovrei salvarlo come dati di sessione?

Come si passano i dati del file tra i vari passaggi?

So che node_import esiste, ma non ha mai funzionato per me e le mie richieste di bug vengono ignorate.

2 ° EDIT: ho usato questo all'inizio e alla fine di ogni pagina che aveva bisogno di fare con il file:

$file = unserialize($_SESSION['file']); 
//alter $file object 
$_SESSION['file'] = serialize(file); 

io non sono sicuro che si tratta di buone pratiche, ma sta lavorando.

risposta

12

Questo non è troppo difficile, è possibile vedere alcune informazioni here. Un esempio di un modulo con solo un caricamento di file.

function myform_form($form_state) { 
    $form = array('#attributes' => array('enctype' => 'multipart/form-data')); 
    $form['file'] = array(
     '#type' => 'file', 
     '#title' => t('Upload video'), 
     '#size' => 48, 
     '#description' => t('Pick a video file to upload.'), 
    ); 
    return $form; 
} 

EDIT:

Ora per salvare il file utilizzare la funzione file_save_upload:

function myform_form_submit($form, $form_state) { 
    $validators = array(); 
    $file = file_save_upload('file', $validators, 'path'); 
    file_set_status($file, FILE_STATUS_PERMANENT); 
} 

2 ° EDIT:

C'è un sacco di domande e modi di fare le cose che hai descritto Non mi dilungherò molto sul codice reale di come gestire un file csv. Quello che suggerirei è che tu usi l'ID del file per tenere traccia del file. Ciò ti consentirebbe di creare URL che prendono un fid e lo usano per caricare il file su cui vuoi lavorare. Per passare dal modulo al passaggio successivo, è possibile utilizzare la proprietà del modulo #redirect per portare gli utenti al passaggio successivo. Da lì dipende in realtà come fai le cose, cosa devi fare.

+0

sì, non ho difficoltà. Tuttavia, una volta caricato il file, come lo si salva e lo si utilizza nelle funzioni future? –

+0

dopo la modifica: ok, e ora se volessi, diciamo, visualizzare i valori del file sulla pagina? –

+1

Puoi essere un po 'più preciso. Il rendering di un file immagine, video o txt richiede approcci molto diversi. Cosa stai cercando di fare, che non può essere fatto con il campo file di CCK? In ogni caso $ file sarà l'oggetto file, quindi dovresti essere in grado di fare tutto ciò che vuoi. – googletorp