2012-01-25 3 views
1

사용자 정의 모듈에서 노드 필드 값을 삽입하려고합니다. 값은 해당 모듈에서만 삽입되고 해당 노드에 대한 조작은 수행되지 않으므로 후크는 고려하지 않습니다. field_data _... 및 field_revision _... 테이블에 직접 값을 삽입하려고했습니다. 하지만 drupal 또한 field_config 및 field_config_instance 테이블에 값 (직렬화 된)을 blob로 저장한다는 것을 알았습니다. 왜냐하면 두 테이블의 값만 삽입하기 때문에 drupal은 노드에 삽입 한 값을 읽지 않습니다. 나는 DB에 저장된 직렬화를 이해할 수 없었다. 그래서 API 나 기타 깔끔한 방법으로 값을 삽입하는 데 도움이되는 메소드를 찾고 있습니다.drupal에서 노드 필드 값을 프로그래밍 방식으로 삽입 7

제가 성취하고자하는 일에 도움이된다면 도움이 될 것입니다. 감사합니다.

편집 : field_config 테이블의 직렬화 된 내용을 살펴본 후 직렬화 된 데이터가 필드 구성이고 처음 저장시 테이블에 삽입된다는 것을 알았습니다. 내 문제는 admin/content를 통해 첫 번째 값을 저장함으로써 해결되었으며 현재 직접 DB에 삽입 된 데이터는 노드에서 사용할 수 있습니다. 이것은 내가 가지고있는 직렬화 된 데이터입니다 :

a:7: 
    {s:12:"translatable"; 
    s:1:"0"; 
    s:12:"entity_types"; 
    a:0:{} 
    s:8:"settings"; 
    a:3: 
     {s:9:"precision"; 
     s:2:"10";s:5:"scale"; 
     s:1:"2"; 
     s:17:"decimal_separator"; 
     s:1:","; 
     } 
    s:7:"storage"; 
    a:5: 
     {s:4:"type"; 
     s:17:"field_sql_storage"; 
     s:8:"settings"; 
     a:0:{} 
     s:6:"module"; 
     s:17:"field_sql_storage"; 
     s:6:"active"; 
     s:1:"1"; 
     s:7:"details"; 
     a:1: 
      {s:3:"sql"; 
      a:2: 
       {s:18:"FIELD_LOAD_CURRENT"; 
       a:1: 
        {s:22:"field_data_field_total"; 
        a:1: 
         {s:5:"value"; 
         s:17:"field_total_value"; 
         } 
        } 
       s:19:"FIELD_LOAD_REVISION"; 
       a:1: 
        {s:26:"field_revision_field_total"; 
        a:1: 
         {s:5:"value"; 
         s:17:"field_total_value"; 
         } 
        } 
       } 
      } 
    } 
    s:12:"foreign keys"; 
    a:0:{} 
    s:7:"indexes"; 
    a:0:{} 
    s:2:"id"; 
    s:2:"34"; 
    } 
+0

게시물에 언급 된대로 DB 삽입을 직접 입력하면됩니다. – vatzcar

+0

우리가 볼 수있는 코드가 있습니까? – SpaceBeers

+1

실제로 문제가 해결되었습니다. 게시물을 수정하고 세부 사항을 제공했습니다. SpaceBeers에 감사드립니다. – vatzcar

답변

3

희망이 도움이 될 것입니다.

$node = new stdClass(); 
$node->uid = 1; 
$node->name = 'admin'; 
$node->type = 'page'; 
$node->language = 'und'; 
$node->title = 'Your title'; 
$node->status = 1; 
$node->promote = 0; 
$node->sticky = 0; 
$node->created = timestamp; 
$node->field_description = array(
    'und' => array(
     array(
      'value' => 'asdasd' 
     ) 
    ) 
); 
$node->nid = 1; // define nid if you wish to update existing node 
// if you wouldn't define $node->nid then new node would be created, 
// otherwise node would be updated with you data provided for all 
// fields which you'll list here. 

... 
// other node's fields 

node_save_action($node); 
+0

언어 문자열''und '' 대신'LANGUAGE_NONE' 상수를 사용하는 것이 좋습니다. – ovi

+0

네, 그럴 것 같습니다. 그러나 그것은 단지 예입니다 ... 다국어 사이트를 운영한다면''en '',''fr'' 등을 사용하십시오. –

관련 문제