function _apachesolr_reference_fetch_field_items in Apachesolr Reference 7
Fetch SOLR objects for a field from a list of SOLR ids.
Parameters
array $items: the items stored for a field
array $settings: field setting array
Return value
array An array of solr objects keyed on item delta.
2 calls to _apachesolr_reference_fetch_field_items()
- apachesolr_reference_field_formatter_view in ./
apachesolr_reference.module - Implements hook_formatter_view().
- apachesolr_reference_field_widget_form in ./
apachesolr_reference.module - Implements hook_field_widget_form().
File
- ./
apachesolr_reference.module, line 663 - functionality for creating reference fields to apache solr objects.
Code
function _apachesolr_reference_fetch_field_items($items, $settings) {
$solr_env = _apachesolr_reference_default_solr_environment($settings);
$field_query = array(
$settings['field_query'],
);
$fields = array();
foreach ($settings['search_fields'] as $field) {
$fields[$field] = $field;
}
// If additional SOLR values to retrieve, add them to array.
if (strlen($settings['field_list']) > 0) {
$add_fields = explode(',', $settings['field_list']);
foreach ($add_fields as $field) {
$fields[$field] = $field;
}
}
// Build an array of specific id's to retrieve.
$ids = array();
foreach ($items as $delta => $item) {
$ids[$delta] = '"' . $item['target_id'] . '"';
}
if (count($ids) > 0) {
$field_query[] = $settings['search_fields']['id'] . ': (' . implode(' OR ', $ids) . ')';
// If the language is set add it as a query param.
if (isset($settings['language'])) {
$field_query[] = 'ss_language: ' . $settings['language'];
}
$solr_items = array();
if ($results = _apachesolr_reference_solr_query($solr_env, $field_query, $fields)) {
foreach ($results as $result) {
$test_id = '"' . $result->{$settings}['search_fields']['id'] . '"';
if (in_array($test_id, $ids)) {
$delta = array_search($test_id, $ids);
$solr_items[$delta] = $result;
}
}
}
$items = $solr_items;
}
// Call ksort here to restore delta order specified by Drupal.
ksort($items);
return $items;
}