function field_collection_entity_preload in Field collection 7
1 call to field_collection_entity_preload()
- field_collection_field_formatter_prepare_view in ./field_collection.module
File
- ./field_collection.module, line 967
- Module implementing field collection field type.
Code
function field_collection_entity_preload($entities, $langcode, &$items, $fields) {
static $local_entity_cache = array();
$fc_ids = array();
$new_items = array();
foreach ($entities as $id => $entity) {
foreach ($items[$id] as $delta => $item) {
if (isset($item['entity'])) {
continue;
}
if (isset($local_entity_cache[$item['value']])) {
$items[$id][$delta]['field_collection'] = $local_entity_cache[$item['value']];
continue;
}
$fc_ids[$item['value']] = $item['value'];
}
}
if ($fc_ids) {
$new_entities = array();
$terms = field_collection_item_load_multiple($fc_ids);
$new_items = $items;
foreach ($entities as $id => $entity) {
$rekey = FALSE;
foreach ($items[$id] as $delta => $item) {
if (isset($terms[$item['value']])) {
$e = $terms[$item['value']];
$local_entity_cache[$item['value']] = $e;
$items[$id][$delta]['field_collection'] = $e;
foreach ($fields as $field_name => $field) {
if (isset($e->{$field_name})) {
$field_data = $e->{$field_name};
if (isset($field_data[$langcode])) {
$new_entities[$e->item_id] = $e->item_id;
$new_items[$e->item_id] = $field_data[$langcode];
}
}
}
}
elseif (!isset($items[$id][$delta]['field_collection'])) {
unset($new_items[$id][$delta]);
$rekey = TRUE;
}
}
if ($rekey && $new_items) {
$new_items[$id] = array_values($new_items[$id]);
}
}
field_collection_entity_preload($new_entities, $langcode, $new_items, $fields);
}
}