2013-01-10 114 views
1

我有一个内容类型,可以包含无限制的嵌入式字段集合field_foo,每个集合包含两个字段:field_foo_barfield_foo_baz如何预先填充Drupal 7中的字段集合字段?

我想修改此内容类型的节点创建表单,以使用来自现有节点上相同字段的值预填充field_foo

默认情况下,节点创建形式有:

FIELD FOO 

FOO BAR [   ] 
FOO BAZ [   ] 

...我想设置,e.g:

FIELD FOO 

FOO BAR [Bar value #1] 
FOO BAZ [Baz value #1] 

FOO BAR [Bar value #2] 
FOO BAZ [Baz value #2] 

我怎样才能做到这一点?我觉得我错过了一件简单的事情。

我试图简单地克隆空字段集合中hook_form_alter()和改变field_foo_barfield_foo_baz值,以适应,但它会导致问题,添加/删除行和调整多三角洲,重量等,使它看起来像我咆哮错误的树。

回答

0

由于字段集合实际上是实体,您是否可以使用hook_entity_insert()来检查被插入的实体是否是字段集合的实例,并且如果是这样设置值。

0

hook_form_alter是正确的方法。如果发生其他问题,这是因为您没有正确填充字段,或者因为另一个模块也在编辑后面的字段。在前一种情况下,请查看hook_node_insert中的字段格式。在模块的后面的例子change the weight中,它最后触发并确保您的更改覆盖任何其他模块。

+0

主要的绊脚石是Field Collections实际上是嵌入式实体。 'hook_node_insert()'只列出提交时创建的field_collection_item实体ID数组;没有直接访问其子女的价值观,也没有实体或实体实例可以用新形式表示。 – scronide

+0

该字段的信息必须在某些点的形式。您可能只需增加模块重量即可查看它。从我在代码中可以看到的field_collection是一个可怕的模块。试试field_group。它使用更好的理念来将字段分组在一起。 – danielson317

+0

它在'hook_form_alter()'中确实存在,但是它是一组实体,它们是字段数组,它是一个不透明的值,权重和增量变量。没有什么基本的方式说“使用这个字段集合的值作为这个其他字段集合的#default_value”,这正是我所希望的。我也使用了字段组,但它是添加或删除我需要的可重复的多组/字段集合/字段集合的能力,字段组明确地没有提供。 – scronide

相关问题