2012-01-17 4 views
0

나는 ajax를 통해 CCK 분류 체계 체크 박스의 데이터를 직접 업데이트하는 모듈을 만들고있다.Drupal 데이터베이스 api 델타

데이터베이스에 저장하는 것을 제외하면 모든 것이 작동합니다. 다음 코드를 사용하십시오 :

$data = array(
    'vid' => $nid, 
    'nid' => $nid, 
    'field_grouping_value' => $tid 
); 
drupal_write_record('content_field_grouping', $data); 

'델타'필드의 값을 공개하지 않는 오류 메시지가 나타납니다. 내 문제는 코드가 내 새 데이터를 쓰려고하지만 델타 필드는 자동 증가가 아닌 조인트 키입니다. screen shot of database table with delta field

http://i.stack.imgur.com/yTwoN : 일반적으로

, 그래서 동적으로 내가 좋은보다는 해를 더 할 것입니다 걱정 난 그냥 델타 필드를 증가 것이지만, 드루팔 그것을 처리 .gif ">

위의 이미지에서 nid 3에 다른 필드가 있다면 델타 필드의 값은 2가됩니다. 그런 다음 nid가 3이고 델타가 0 인 필드를 삭제합니다. 델타 필드 값 1과 2는 모두 0과 1로 재설정됩니다.

그냥 내 사이트를 손상시키지 않으므로 아무도이 문제를 해결하고 델타 필드를 동적으로 처리하기 위해 드루팔 (Drupal)을 얻는 방법에 대한 조언을 구할 수 있는지 궁금하다.

답변

0

다음 사용 가능한 델타를 사용하면 완벽하게 안전 할 것입니다. CCK는 필드가있는 노드가 편집되어 저장 될 때마다이를 다시 수행합니다 (필드를 제거 할 때 조정이 표시되는 이유). 이 같은 것이 작동해야합니다.

$next_delta = db_result(db_query('SELECT MAX(delta) + 1 AS del FROM {content_field_grouping} WHERE vid = %d AND nid = %d', $nid, $nid)); 

$data = array(
    'vid' => $nid, 
    'nid' => $nid, 
    'field_grouping_value' => $tid, 
    'delta' => $next_delta 
); 
drupal_write_record('content_field_grouping', $data);