如何从节点加载字段集合?


72

我有一个节点,上面有一些字段集合。

当查看node_load()输出时,我看到:

[field_rich_text_group] => Array
        (
            [und] => Array
                (
                    [0] => Array
                        (
                            [value] => 6
                        )

                    [1] => Array
                        (
                            [value] => 7
                        )

                    [2] => Array
                        (
                            [value] => 8
                        )

                )

        )

我可以使用什么API函数来实际加载实体ID为6、7、8等的集合中包含的字段数据?

Answers:


88

h!我应该查看字段收集模块:

entity_load('field_collection_item', array($item_id))

1
我正在寻找类似的解决方案。您如何编写输出并将其放入渲染的数组中?谢谢
天鹅

我写了一堆自定义函数来构建这些项目的布局。可悲的是它们返回HTML,而不是可渲染的数组。使用可渲染数组会很好,但是我目前还不太清楚(我确定这样做有充分的理由,只是没有找到引起共鸣的解释)。
贾斯汀

谢谢。字段集合确实对简化表单和输出很有用,但是对于自定义查询,我似乎不得不深入到嵌套数组中,即使使用entity_metadata_wrapper也是如此。
天鹅

哦,是的,我写了包装程序,将密集的数组变成了我所需要的。
贾斯汀

entity_load()返回一组特定于“实体”的节点,并且与它们一起我们也获得了用户定义的字段。我们如何区分用户字段和实体字段?有什么线索吗?
Raj Pawan Gumdal

38

还有一个包装函数,可以完成相同的操作:

field_collection_item_load($id, $reset = FALSE)

或根据评论,使用:

field_collection_item_load_multiple($ids = array(), $conditions = array(), $reset = FALSE)

加载多个集合(例如,如果您有“ 添加更多”按钮)。


5
按照上述@ vasiliy-grotov的回答,您还可以使用field_collection_item_load_multiple($ids = array(), $conditions = array(), $reset = FALSE)来加载多个集合(例如,如果您有“添加更多” btn)。
mediaashley

21

应该使用field_collection_field_get_entity()来加载正确的修订版。

用法示例:

$node = node_load(1);
$items = field_get_items('node', $node, 'field_fc');
foreach ($items as $item) {
 $fc = field_collection_field_get_entity($item);
 // Do something.
}

1
如何获取在字段集合中分配的日期字段?我使用了以下内容:$ item = field_collection_field_get_entity($ itemid); print $ item-> field_course_starts_on ['und'] [0] ['safe_value']; 。但是没有值在打印。
harikris

谢谢你 我得到的是常量警告:array_flip():只能翻转STRING和INTEGER值!与... item_load(),这解决了这个问题。
Naidim

11

您可以entity_metadata_wrapperEntity API模块中使用:

$node_wrapper = entity_metadata_wrapper('node', $node);
$field_collection = $node_wrapper->field_rich_text_group[0]->value();
dpm($field_collection);

您也可以循环所有集合:

$node_wrapper = entity_metadata_wrapper('node', $node);
foreach ($node_wrapper->field_rich_text_group as $field_collection_wrapper) {
  $field_collection = $field_collection_wrapper->value();
  dpm($field_collection);
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.