Fájl feltöltés folyamata?

Anonymous képe

Sziasztok!

Nekiálltam írni egy saját node modult (elektronikai termékeknek műszaki leírása). Az adatok mellé kéne egy kép is a termékről, ennek a feltöltését a következő képpen próbáltam:

Drupal-CVS

function dinrelay_form(&$node) {
  $output = '';
 
  if (function_exists('taxonomy_node_form')) {
    $output .= implode('', taxonomy_node_form('dinrelay', $node));
  }
 
  $output .= form_textfield(t('Type'), 'typeString', $node->typeString, 5,  5);
 
  $output .= form_file(t('Image'), 'image', $node->image, 40,  40);
 
  $output .= form_textfield(t('Manual URL'), 'manualUrl', $node->manualUrl, 10,  15);
 
/* ... */
 
  return $output;
}
 
 
function dinrelay_validate(&$node) {
  $field_name = 'image';
  if ($file = file_check_upload($node->image)) {
    $file = file_save_upload($field_name, 'files/' . $node->image, TRUE);
  }
}

A validate függvényben lévő részt az upload és image modulokól lestem, de ott pl a validate fv-nek van még egy paramétere, ami nincs benne a doksiban: image_validate(&$node, $field_name)

Elvileg ugyebár a file_save_upload-nak a $field_name értéke alapján meg kéne találni az image nevű form_file-t, de hibát kapok eredményül.
Kell még ezen kívül mást is csinálni (mondjuk elindítani a feltöltést) vagy ezt a böngésző/form_file megcsinálja? Ha igen keletkezik valami ideiglenes fájl, ahova bepakolja? Nekem eddig úgy tűnik, hogy a szerverre nem töltődik föl a fájl.

Előre is köszi a segítséget!

pentike

Fórum: 
pentike képe

Megoldás:

A <form> tag paraméterei között szerepelni kell, hogy enctype = 'multipart/form-data' mert egyébként nem tölti föl a böngésző a fájlokat a szerverre.

Ezt úgy lehet elérni, hogy csinálunk egy saját sjátmodulneve_nodeapi() kampót valahogy így:
(a példa az upload.modul-ból van)

function upload_nodeapi(&$node, $op, $arg) {
  switch ($op) {
/*...*/
    case 'form param':
      if (variable_get("upload_$node->type", 1) && user_access('upload files')) {
        $output['options'] = array('enctype' => 'multipart/form-data');
      }
      break;
/*...*/
      return $output;
}
0
0