function apachesolr_reference_field_formatter_view in Apachesolr Reference 7
Implements hook_formatter_view().
File
- ./
apachesolr_reference.module, line 304 - functionality for creating reference fields to apache solr objects.
Code
function apachesolr_reference_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
$element = array();
$settings = $display['settings'];
$field_settings = $field['settings'];
// Add entity language if set.
if ($langcode != LANGUAGE_NONE) {
$field_settings['language'] = $langcode;
}
// Check to see if output is for just ids. No need to query solr for that.
// Since ID's are stored in the db.
if ($display['type'] == 'apachesolr_reference_formatter_ids') {
foreach ($items as $delta => $item) {
$element[$delta] = array(
'#markup' => $item['target_id'],
);
}
}
else {
$items = _apachesolr_reference_fetch_field_items($items, $field_settings);
if (count($items) > 0) {
switch ($display['type']) {
// Display a custom output, replacing tokens with actual field values.
case 'apachesolr_reference_formatter_custom':
foreach ($items as $delta => $item) {
$tokens = array();
$token_values = array();
foreach ($field_settings['search_fields'] as $search_field) {
if (isset($item->{$search_field})) {
// Multi value? add deltas.
if (is_array($item->{$search_field})) {
foreach ($item->search_field as $sdelta => $value) {
$tokens[] = '[' . $search_field . ':' . $sdelta . ']';
$token_values[] = $value;
}
$value = array_shift($item->search_field);
}
else {
$value = $item->{$search_field};
}
$tokens[] = '[' . $search_field . ']';
$token_values[] = $value;
}
}
// If additional SOLR values to retrieve, add them to array.
if (strlen($field_settings['field_list']) > 0) {
$add_fields = explode(',', $field_settings['field_list']);
foreach ($add_fields as $solr_field) {
if (isset($item->{$solr_field})) {
// Multi value? add deltas.
if (is_array($item->{$solr_field})) {
foreach ($item->{$solr_field} as $sdelta => $value) {
$tokens[] = '[' . $solr_field . ':' . $sdelta . ']';
$token_values[] = $value;
}
$value = array_shift($item->{$solr_field});
}
else {
$value = $item->{$solr_field};
}
$tokens[] = '[' . $solr_field . ']';
$token_values[] = $value;
}
}
}
$element[$delta] = array(
'#markup' => str_replace($tokens, $token_values, $settings['custom_display']),
);
}
break;
// Just display the SOLR label value.
case 'apachesolr_reference_formatter_label':
foreach ($items as $delta => $item) {
$label = $item->{$settings}['label'];
$element[$delta] = array(
'#markup' => $label,
);
}
break;
// Display linked labels.
case 'apachesolr_reference_formatter_label_link':
foreach ($items as $delta => $item) {
$label = $item->{$settings}['label'];
$url = $item->{$settings}['url'];
$element[$delta] = array(
'#markup' => l($label, $url, array(
'html' => TRUE,
)),
);
}
break;
}
}
}
return $element;
}