2011-12-15 2 views
0

양식 (양식)을 사용하여 노드 (내용 유형 : 노래)를 만들려고합니다. 타일 ​​/ 설명을 설정할 수 있지만 파일을 업로드 할 때이 오류가 발생합니다.양식을 사용하여 노드에 파일 추가

PDOException: SQLSTATE[23000]: Integrity constraint violation: 1048 
Column 'field_file1_display' cannot be null: INSERT INTO 
{field_data_field_file1} (entity_type, entity_id, revision_id, bundle, 
delta, language, field_file1_fid, field_file1_display, 
field_file1_description) VALUES (:db_insert_placeholder_0, 
:db_insert_placeholder_1, :db_insert_placeholder_2, 
:db_insert_placeholder_3, :db_insert_placeholder_4, 
:db_insert_placeholder_5, :db_insert_placeholder_6, 
:db_insert_placeholder_7, :db_insert_placeholder_8); Array (
[:db_insert_placeholder_0] => node [:db_insert_placeholder_1] => 67 
[:db_insert_placeholder_2] => 67 [:db_insert_placeholder_3] => song 
[:db_insert_placeholder_4] => 0 [:db_insert_placeholder_5] => und 
[:db_insert_placeholder_6] => 55 [:db_insert_placeholder_7] => 
[:db_insert_placeholder_8] =>) in 
field_sql_storage_field_storage_write() (line 448 of 
/Users/blabla/_server/drupal/modules/field/modules/field_sql_storage/field_sql_storage.module). 

이것은 내가 작성한 코드입니다. 일반적 드루팔 7에서이 작업을 수행

function insertnode_form_submit($form, &$form_state) { 
    $node = new StdClass(); 
    $node->type = 'song'; 
    $node->status = 1; 
    $node->language = LANGUAGE_NONE; 
    $node->title = $form['name']['#value']; 
    $node->field_song_description[$node->language][0]['value'] = $form['description']['#value']; 

    $file_path = drupal_realpath($form['file1']['#file']->uri); 

    $file = (object) array(
     'uid' => 1, 
     'uri' => $file_path, 
     'filemime' => file_get_mimetype($file_path), 
     'status' => 1, 
    ); 
    $file = file_copy($file, 'public://'); 
    $node->field_file1[$node->language][0] = (array)$file; 

    //$node->field_file1[$node->language][0] = (array)$form['file1']['#file'];//also tried this but nothing 

    node_save($node); 
} 

답변

0

방법은 당신을 위해 이동/모든 파일 복사를 처리하고 파일 테이블에 파일을 추가하는 managed_file 위젯 형식을 사용하는 것입니다. 양식 함수에서

: 당신의 $form_state 배열에서는 새로 생성 된 파일에서 fid을 통과 얻을 당신은에 추가 할 필요가

// Load the file via file.fid. 
$file = file_load($form_state['values']['my_file_field']); 
// Change status to permanent. 
$file->status = FILE_STATUS_PERMANENT; 
// Save. 
file_save($file); 

$node->field_file1[$node->language] = array(
    0 => array('fid' => $file->fid, 'display' => 1, 'description' => 'The description') 
); 
6

:

$form['my_file_field'] = array(
    '#type' => 'managed_file', 
    '#title' => 'File', 
    '#upload_location' => 'public://my-files/' 
); 

는 그런 다음 형태로 기능을 제출 node 개체의 두 값 : fiddispla y

시도

$node->field_file1[$node->language][0]['fid'] = $file->fid; 
$node->field_file1[$node->language][0]['display'] = 1; 
관련 문제