2012-01-25 11 views
1

カスタムモジュールからノードフィールドの値を挿入しようとしています。値はそのモジュールからのみ挿入され、そのノードに対する操作は実行されないので、フックは考慮されません。私はfield_data _...とfield_revision _...テーブルに直接値を挿入しようとしました。 drupalはfield_configおよびfield_config_instanceテーブルの値をblobとして保存することも判明しました。私は2つのテーブルに値を挿入しているだけなので、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''などを使用します。 –

関連する問題