将Drupal Field Collection元素添加到自定义表单

时间:2013-08-26 14:53:26

标签: drupal drupal-7 drupal-forms drupal-field-collection

我想在我的自定义表单中添加一个Field Collection Item。我的表单是自定义事件注册(将数据保存到事件注册节点),并且字段集合在事件注册内容类型中可用。 我尝试了许多代码并尝试但没有一个能够工作。

module_load_include('inc', 'field_collection', 'field_collection.pages');
$field_collection_item = entity_create('field_collection_item', array('field_name' => 'field_participant'));
$entity_form = field_collection_item_form($form, $form_state, $field_collection_item);
$form['participant'] = $entity_form;

这会将字段集项加载到我的表单中,但我无法添加另一个字段集合项,并且表单中的其他元素(公司,电话等)也是重复的。 我找到了另一条可能应该添加的行:

$field_collection_item->setHostEntity('node', $node);

但是那一刻我没有$ node,我不确定它是不是。

1 个答案:

答案 0 :(得分:1)

我看到你遇到的问题。您正在构建字段集合表单,然后您尝试构建其他字段集合表单,但内容未附加。

我认为相反,您想要使用以下

module_load_include('inc', 'field_collection', 'field_collection.pages');
$field_collection_item = entity_create('field_collection_item', array('field_name' => 'field_collection_name'));
field_attach_form('field_collection_item', $field_collection_item, $form['participant'], $form_state);

这将允许您通过更改field_attach_form

中的位置来附加大量字段集合项
module_load_include('inc', 'field_collection', 'field_collection.pages');
for ($i=0;$i<5;$i++) {
  $field_collection_item = entity_create('field_collection_item', array('field_name' => 'field_collection_name'));
  $form['category'][$i] = array();
  field_attach_form('field_collection_item', $field_collection_item, $form['category'][$i], $form_state);
}

确保在原始$表单上设置#parent属性,否则您的数据将在提交时连接在一起