Exemplo n.º 1
0
 public function getViewsFieldData(FieldStorageConfigInterface $field_storage)
 {
     // Make sure views.views.inc is loaded.
     module_load_include('inc', 'views', 'views.views');
     // Get the default data from the views module.
     $data = views_field_default_views_data($field_storage);
     // Loop through all of the results and set our overrides.
     foreach ($data as $table_name => $table_data) {
         foreach ($table_data as $field_name => $field_data) {
             // only modify fields.
             if ($field_name != 'delta') {
                 if (isset($field_data['field'])) {
                     // Use our own field handler.
                     $data[$table_name][$field_name]['field']['id'] = 'geolocation_field';
                     $data[$table_name][$field_name]['field']['click sortable'] = FALSE;
                 }
                 if (isset($field_data['filter'])) {
                     // The default filters aren't useful at all so remove them.
                     unset($data[$table_name][$field_name]['filter']);
                 }
                 if (isset($field_data['argument'])) {
                     // The default arguments aren't useful at all so remove them.
                     unset($data[$table_name][$field_name]['argument']);
                 }
                 if (isset($field_data['sort'])) {
                     // The default arguments aren't useful at all so remove them.
                     unset($data[$table_name][$field_name]['sort']);
                 }
             }
         }
         $args = ['@field_name' => $field_storage->getName()];
         $target_entity_type = \Drupal::entityManager()->getDefinition($field_storage->getTargetEntityTypeId());
         $field_coordinates_table_data = $data[$target_entity_type->getBaseTable() . '__' . $field_storage->getName()][$field_storage->getName()];
         // Add proximity handlers.
         $data[$table_name][$args['@field_name'] . '_proximity'] = ['group' => 'Content', 'title' => $this->t('Proximity (@field_name)', $args), 'title short' => $field_coordinates_table_data['title short'] . t(":proximity"), 'help' => $field_coordinates_table_data['help'], 'argument' => ['id' => 'geolocation_argument_proximity', 'table' => $table_name, 'entity_type' => $field_storage->get('entity_type'), 'field_name' => $args['@field_name'] . '_proximity', 'real field' => $args['@field_name'], 'label' => $this->t('Distance to !field_name', $args), 'empty field name' => '- No value -', 'additional fields' => [$args['@field_name'] . '_lat', $args['@field_name'] . '_lng', $args['@field_name'] . '_lat_sin', $args['@field_name'] . '_lat_cos', $args['@field_name'] . '_lng_rad']], 'filter' => ['id' => 'geolocation_filter_proximity', 'table' => $table_name, 'entity_type' => $field_storage->get('entity_type'), 'field_name' => $args['@field_name'] . '_proximity', 'real field' => $args['@field_name'], 'label' => $this->t('Distance to !field_name', $args), 'allow empty' => TRUE, 'additional fields' => [$args['@field_name'] . '_lat', $args['@field_name'] . '_lng', $args['@field_name'] . '_lat_sin', $args['@field_name'] . '_lat_cos', $args['@field_name'] . '_lng_rad']], 'field' => ['table' => $table_name, 'id' => 'geolocation_field_proximity', 'field_name' => $args['@field_name'] . '_proximity', 'entity_type' => $field_storage->get('entity_type'), 'real field' => $args['@field_name'], 'additional fields' => [$args['@field_name'] . '_lat', $args['@field_name'] . '_lng', $args['@field_name'] . '_lat_sin', $args['@field_name'] . '_lat_cos', $args['@field_name'] . '_lng_rad'], 'element type' => 'div', 'is revision' => isset($table_data[$args['@field_name']]['field']['is revision']) && $table_data[$args['@field_name']]['field']['is revision'], 'click sortable' => TRUE], 'sort' => ['table' => $table_name, 'id' => 'geolocation_sort_proximity', 'field_name' => $args['@field_name'] . '_proximity', 'entity_type' => $field_storage->get('entity_type'), 'real field' => $args['@field_name']]];
     }
     return $data;
 }
Exemplo n.º 2
0
/**
 * Override the default Views data for a Field API field.
 *
 * The field module's implementation of hook_views_data() invokes this for each
 * field storage, in the module that defines the field type. It is not invoked
 * in other modules.
 *
 * If no hook implementation exists, hook_views_data() falls back to
 * views_field_default_views_data().
 *
 * @param \Drupal\field\FieldStorageConfigInterface $field_storage
 *   The field storage config entity.
 *
 * @return array
 *   An array of views data, in the same format as the return value of
 *   hook_views_data().
 *
 * @see views_views_data()
 * @see hook_field_views_data_alter()
 * @see hook_field_views_data_views_data_alter()
 */
function hook_field_views_data(\Drupal\field\FieldStorageConfigInterface $field_storage)
{
    $data = views_field_default_views_data($field_storage);
    foreach ($data as $table_name => $table_data) {
        // Add the relationship only on the target_id field.
        $data[$table_name][$field_storage->getName() . '_target_id']['relationship'] = array('id' => 'standard', 'base' => 'file_managed', 'base field' => 'target_id', 'label' => t('image from !field_name', array('!field_name' => $field_storage->getName())));
    }
    return $data;
}