2009-08-10 64 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