參考文章1:https://www.drupal.org/node/1842304
參考文章2:http://audiblecode.com/blog/programmatically-create-and-update-field-col...
主要有兩種模式:「直接賦值」 及 「entity_metadata_wrapper」
建立欄位
//讀取目標node $my_node=node_load($nid); //建立field_collection_item的entity //此欄位名稱為 field_text_files $fc = entity_create('field_collection_item', array('field_name' => 'field_fieldcollection_name')); //將此欄位與$my_node連結起來 $fc->setHostEntity('node', $my_node); //利用Entity API 把這個field collection item包裹起來,接著就能Entity API的函數來快速修改這個欄位了。 $fc_wrapper = entity_metadata_wrapper('field_collection_item', $fc); //假設這個field_collection中有兩個欄位,一個是 field_data1,一個是field_data2 //接著我們要為這兩個欄位設定資料 $fc_wrapper->field_data1->set('欄位值1'); $fc_wrapper->field_data2->set('欄位值2'); /** * 註:如果不想用entity_metadata_wrapper的方法,則直接賦值後儲存即可 * $fc->field_data1[LANGUAGE_NONE][0]['value']='欄位值1'; * $fc->field_data2[LANGUAGE_NONE][0]['value']='欄位值2'; * $fc->save(); */ //儲存這個field_collection $fc_wrapper->save(); //儲存node node_save($my_node); //若不想變更node的更新日期的話,則要用field_attach_update('node',$my_node);
更新欄位
//類似建立欄位的方式,但不需要經過entity_create() //讀取目標node $my_node=node_load($nid); $node_wrapper = entity_metadata_wrapper('node', $my_node); // 取得第一個field_collection的欄位值 $collection = $node_wrapper->field_fieldcollection_name[0]->value(); $collection_wrapper = entity_metadata_wrapper('field_collection_item', $raw_collection); $collection_wrapper->field_data1= '欄位值1'; $collection_wrapper->field_data2= '欄位值2'; //儲存 $collection_wrapper->save();
刪除欄位
$my_node = node_load($nid); $field_collection_item_value = $node->field_collection1[LANGUAGE_NONE][0]['value']; entity_delete_multiple('field_collection_item', array($field_collection_item_value));