protected function EntityViewsData::mapSingleFieldViewsData in Drupal 9
Same name and namespace in other branches
- 8 core/modules/views/src/EntityViewsData.php \Drupal\views\EntityViewsData::mapSingleFieldViewsData()
- 10 core/modules/views/src/EntityViewsData.php \Drupal\views\EntityViewsData::mapSingleFieldViewsData()
Provides the views data for a given data type and schema field.
Parameters
string $table: The table of the field to handle.
string $field_name: The machine name of the field being processed.
string $field_type: The type of field being handled.
string $column_name: For fields containing multiple columns, the column name being processed.
string $column_type: Within the field, the column type being handled.
bool $first: TRUE if this is the first column within the field.
\Drupal\Core\Field\FieldDefinitionInterface $field_definition: The field definition.
Return value
array The modified views data field definition.
1 call to EntityViewsData::mapSingleFieldViewsData()
- EntityViewsData::mapFieldDefinition in core/
modules/ views/ src/ EntityViewsData.php - Puts the views data for a single field onto the views data.
File
- core/
modules/ views/ src/ EntityViewsData.php, line 441
Class
- EntityViewsData
- Provides generic views integration for entities.
Namespace
Drupal\viewsCode
protected function mapSingleFieldViewsData($table, $field_name, $field_type, $column_name, $column_type, $first, FieldDefinitionInterface $field_definition) {
$views_field = [];
// Provide a nicer, less verbose label for the first column within a field.
// @todo Introduce concept of the "main" column for a field, rather than
// assuming the first one is the main column.
if ($first) {
$views_field['title'] = $field_definition
->getLabel();
}
else {
$views_field['title'] = $field_definition
->getLabel() . " ({$column_name})";
}
if ($description = $field_definition
->getDescription()) {
$views_field['help'] = $description;
}
// Set up the field, sort, argument, and filters, based on
// the column and/or field data type.
// @todo Allow field types to customize this.
// @see https://www.drupal.org/node/2337515
switch ($field_type) {
// Special case a few field types.
case 'timestamp':
case 'created':
case 'changed':
$views_field['field']['id'] = 'field';
$views_field['argument']['id'] = 'date';
$views_field['filter']['id'] = 'date';
$views_field['sort']['id'] = 'date';
break;
case 'language':
$views_field['field']['id'] = 'field';
$views_field['argument']['id'] = 'language';
$views_field['filter']['id'] = 'language';
$views_field['sort']['id'] = 'standard';
break;
case 'boolean':
$views_field['field']['id'] = 'field';
$views_field['argument']['id'] = 'numeric';
$views_field['filter']['id'] = 'boolean';
$views_field['sort']['id'] = 'standard';
break;
case 'uri':
// Let's render URIs as URIs by default, not links.
$views_field['field']['id'] = 'field';
$views_field['field']['default_formatter'] = 'string';
$views_field['argument']['id'] = 'string';
$views_field['filter']['id'] = 'string';
$views_field['sort']['id'] = 'standard';
break;
case 'text':
case 'text_with_summary':
// Treat these three long text fields the same.
$field_type = 'text_long';
// Intentional fall-through here to the default processing!
default:
// For most fields, the field type is generic enough to just use
// the column type to determine the filters etc.
switch ($column_type) {
case 'int':
case 'integer':
case 'smallint':
case 'tinyint':
case 'mediumint':
case 'float':
case 'double':
case 'decimal':
$views_field['field']['id'] = 'field';
$views_field['argument']['id'] = 'numeric';
$views_field['filter']['id'] = 'numeric';
$views_field['sort']['id'] = 'standard';
break;
case 'char':
case 'string':
case 'varchar':
case 'varchar_ascii':
case 'tinytext':
case 'text':
case 'mediumtext':
case 'longtext':
$views_field['field']['id'] = 'field';
$views_field['argument']['id'] = 'string';
$views_field['filter']['id'] = 'string';
$views_field['sort']['id'] = 'standard';
break;
default:
$views_field['field']['id'] = 'field';
$views_field['argument']['id'] = 'standard';
$views_field['filter']['id'] = 'standard';
$views_field['sort']['id'] = 'standard';
}
}
// Do post-processing for a few field types.
$process_method = 'processViewsDataFor' . Container::camelize($field_type);
if (method_exists($this, $process_method)) {
$this
->{$process_method}($table, $field_definition, $views_field, $column_name);
}
return $views_field;
}