2009-08-10 65 views
8

我很難搞清楚如何用Drupal 6上傳文件的形式編寫模塊。任何人都可以解釋這一點,或者指出我有一個很好的示例/文檔討論它?如何:Drupal文件上傳表單

編輯:

這完全是我想做的事:

  1. 用戶上傳的.csv
  2. 模塊讀取文件的第一行拿到領域
  3. 用戶用db字段匹配csv字段
  4. 將每個csv行保存爲節點(先預覽)

到目前爲止,我可以成功做1,2和4。但目前還不清楚這些步驟應該如何相互交互($ form_state ['redirect']?應該如何使用?),以及最佳實踐是什麼。對於3,我應該將它保存爲會話數據嗎?

如何在各個步驟之間傳遞文件數據?

我知道node_import存在,但它從來沒有爲我工作,我的錯誤請求被忽略。

2日編輯:我用這個在一個需要處理的文件開始和每一頁的末尾:

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

我不能確定它的最佳實踐,但它一直在努力。

回答

12

這並不難,您可以看到一些信息here。僅有文件上傳的表單示例。

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; 
} 

編輯:

現在保存該文件使用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日編輯:

有很多的問題,以及如何做你描述的東西。我不會深入瞭解如何處理csv文件的實際代碼。我會建議你使用文件ID來跟蹤文件。這將使你能夠製作一個fid並使用它來加載你想要處理的文件。 要從表單轉到下一步,可以使用#redirect表單屬性讓用戶進入下一步。實際上取決於你如何做事,你需要做什麼。

+0

是的,我沒有這個困難。但是,一旦文件上傳完成,您如何保存並在將來的功能中使用它?編輯後的 – 2009-08-10 13:44:34

+0

:好的,現在如果我想說,在頁面上顯示文件的值? – 2009-08-10 14:17:00

+1

你可以更精確一點。渲染圖像,視頻或txt文件將需要非常不同的方法。你想要做什麼,這不能用CCK的文件字段來完成? 反正$文件將是文件對象,所以你應該可以做任何你想要的。 – googletorp 2009-08-10 15:05:02