function field_extractor_handler_field::post_execute in Field Extractor 7
Load the entities for all rows that are about to be displayed.
Overrides views_handler::post_execute
File
- views/
field_extractor_handler_field.inc, line 146
Class
- field_extractor_handler_field
- Field extractor views field.
Code
function post_execute(&$values) {
if (!empty($values)) {
// Load the parent entities.
list($this->entity_type, $this->entities) = $this->query
->get_result_entities($values);
// Gather a list of referenced ids, load the entities, then store them
// in $this->referenced_entities grouped by referencing entity id.
$referenced_ids = array();
$referenced_ids_by_parent = array();
foreach ($this->entities as $entity) {
$items = field_get_items($this->entity_type, $entity, $this->definition['field_name']);
if (!empty($items)) {
list($entity_id) = entity_extract_ids($this->entity_type, $entity);
foreach ($items as $item) {
$referenced_ids[] = $item[$this->settings['column']];
$referenced_ids_by_parent[$entity_id][] = $item[$this->settings['column']];
}
}
}
$referenced_entities = entity_load($this->settings['entity_type'], $referenced_ids);
foreach ($referenced_ids_by_parent as $entity_id => $referenced_ids) {
foreach ($referenced_ids as $id) {
if (!empty($referenced_entities[$id])) {
$this->referenced_entities[$entity_id][] = $referenced_entities[$id];
}
}
}
// Build the extracted field data for each row.
foreach ($values as $row_id => &$value) {
$entity = $this->entities[$row_id];
list($entity_id) = entity_extract_ids($this->entity_type, $entity);
if (!empty($this->referenced_entities[$entity_id])) {
$element = field_extractor_build_element($this->referenced_entities[$entity_id], $this->settings['entity_type'], $this->options);
// Only take the items from the renderable array.
$items = array();
foreach (element_children($element) as $key) {
$items[$key] = $element[$key];
}
}
else {
$items = array();
}
$value->{'field_extractor_' . $this->options['id']} = $items;
}
}
}