2009-08-10 14 views
8

Mam trudności z ustaleniem, jak napisać moduł z formularzem, który przesyła pliki, w Drupal 6. Czy ktoś może to wyjaśnić, lub wskazać mi dobry przykład/dokumentację omawiającą to?Howto: Formularz przesyłania plików Drupala

EDIT:

Oto zupełnie co próbuję zrobić:

  1. Użytkownik przesyła .csv
  2. Moduł odczytuje pierwszy wiersz pliku, aby uzyskać pola
  3. Użytkownik dopasowuje pola csv z polami db
  4. Każda linia csv jest zapisywana jako węzeł (najpierw podgląd)

Do tej pory mogę wykonać 1, 2 i 4 pomyślnie. Ale nie jest jasne, w jaki sposób poszczególne kroki powinny wchodzić ze sobą w interakcje ($ form_state ['przekierowanie']? W jaki sposób powinno to być używane?) I jakie są najlepsze praktyki. A dla 3, czy powinienem zapisać to jako dane sesji?

Jak przekazać dane pliku między różnymi krokami?

Wiem, że węzeł_import istnieje, ale nigdy nie działał dla mnie, a moje żądania błędów są ignorowane.

2-ty EDIT: Kiedyś to na początku i na końcu każdej strony, że potrzebne do czynienia z plikiem:

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

nie jestem pewien, że to jest najlepsze praktyki, ale to pracuje.

Odpowiedz

12

To nie jest trudne, możesz zobaczyć niektóre informacje here. Przykład formularza z tylko przesłaniem pliku.

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:

teraz, aby zapisać plik użyć file_save_upload funkcję:

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

2-ty EDIT:

Jest wiele pytań i sposobów na rzeczy, które opisałeś. Nie będę się zbytnio przejmował faktycznym kodem obsługi pliku csv. Sugerowałbym, żebyś używał identyfikatora pliku do śledzenia pliku. Umożliwiłoby to tworzenie adresów URL, które wykorzystują fid, i użycie ich do załadowania pliku, nad którym chcesz pracować. Aby przejść z formularza do następnego kroku, można użyć właściwości formularza #redirect, aby zachęcić użytkowników do następnego kroku. Od tego naprawdę zależy, jak będziesz robić rzeczy, co musisz zrobić.

+0

Tak, mam z tym bez trudności. Jednak po przesłaniu pliku, jak go zapisać i używać go w przyszłych funkcjach? –

+0

po edycji: ok, a teraz jeśli chcę, powiedzmy, wyświetlić wartości pliku na stronie? –

+1

Czy możesz być nieco bardziej precyzyjny. Renderowanie obrazu, wideo lub pliku txt wymaga bardzo różnych podejść. Co próbujesz zrobić, czego nie da się zrobić za pomocą pola pliku CCK? W każdym razie plik $ będzie obiektem pliku, więc powinieneś być w stanie zrobić, co chcesz. – googletorp

Powiązane problemy