【问题标题】:Create node programatically with nested fieldcollection item Drupal 7使用嵌套字段集合项 Drupal 7 以编程方式创建节点
【发布时间】:2015-01-08 18:35:30
【问题描述】:

我需要以编程方式创建一个节点。在我的内容类型中有一个字段集合,其中还有另一个字段集合。现在如何在内部字段集合中保存字段的值因此,由于这种嵌套的字段集合结构,我无法在此节点中保存字段集合项。

下面是我的代码:

global $user;
$node = entity_create('node', array('type' => 'key_sentence')); // replace entity_type and entity_bundle with your info
// Specify the author
$node->uid = $user->uid;
// Create a Entity Wrapper of that new Entity
$entity = entity_metadata_wrapper('node', $node);

// Specify the title
$entity->title = 'Test node';
// Add field data... SO MUCH BETTER!
$entity->field_key_sentence_text = 'Field value text';

$entity->save(); // necessary in order to attach field collections

//Outer field collection
$field_collection_1 = entity_create('field_collection_item', array('field_name' => 'field_ks_sent_to'));
// Set default values as necessary
$field_collection_1->setHostEntity('field_collection_item', $entity); // again, replace entity_type as appropriate
$field_collection_1->save(TRUE);

//Inner field collection
$field_collection_2 = entity_create('field_collection_item', array('field_name' => 'field_ks_in_voice'));
// Set default values as necessary
$field_collection_2->setHostEntity('field_collection_item', $field_collection_1);

//Field in inner field collection
$field_collection_2->field_message_url[LANGUAGE_NONE][0]['value'] = 'http://www.google.com';
$field_collection_2->save(TRUE);

$entity->save();

但我收到以下错误:

Notice: Undefined index: value in field_collection_field_update() (line 933 of /home/postcinn/public_html/dev/sites/all/modules/field_collection/field_collection.module).
EntityMalformedException: Missing bundle property on entity of type field_collection_item. in entity_extract_ids() (line 7766 of /home/postcinn/public_html/dev/includes/common.inc).

【问题讨论】:

    标签: drupal-7


    【解决方案1】:
    //Outer field collection
    $field_collection_1 = entity_create('field_collection_item', array('field_name' => 'field_ks_sent_to'));
    // Set default values as necessary
    $field_collection_1->setHostEntity('field_collection_item', $entity); // again, replace entity_type as appropriate
    $field_collection_1->save(TRUE);
    

    我认为对于初学者来说,您需要确保您的第一级字段集合的主机实体是 node 类型而不是 field_collection_item

    【讨论】:

    • 我听不懂戴夫你在说什么,请让我理解。出了什么问题,我该怎么办?
    • 从原始问题重复代码,并添加一个句子似乎是一种糟糕的回答方式。为什么不显示代码应该是什么样子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-19
    • 2012-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-17
    • 2021-10-05
    相关资源
    最近更新 更多