2015-08-17 17:00:26 -07:00
< ? php
/**
* @ file
* Hooks provided by the Options module .
*/
use Drupal\Core\Entity\FieldableEntityInterface ;
use Drupal\Core\Field\FieldStorageDefinitionInterface ;
/**
* Alters the list of options to be displayed for a field .
*
* This hook can notably be used to change the label of the empty option .
*
* @ param array $options
* The array of options for the field , as returned by
* \Drupal\Core\TypedData\OptionsProviderInterface :: getSettableOptions () . An
* empty option ( _none ) might have been added , depending on the field
* properties .
* @ param array $context
* An associative array containing :
2016-11-02 11:43:31 -07:00
* - fieldDefinition : The field definition
2015-08-17 17:00:26 -07:00
* ( \Drupal\Core\Field\FieldDefinitionInterface ) .
* - entity : The entity object the field is attached to
* ( \Drupal\Core\Entity\EntityInterface ) .
*
* @ ingroup hooks
* @ see hook_options_list ()
*/
function hook_options_list_alter ( array & $options , array $context ) {
// Check if this is the field we want to change.
2016-11-02 11:43:31 -07:00
if ( $context [ 'fieldDefinition' ] -> id () == 'field_option' ) {
2015-08-17 17:00:26 -07:00
// Change the label of the empty option.
$options [ '_none' ] = t ( '== Empty ==' );
}
}
/**
* Provide the allowed values for a 'list_*' field .
*
* Callback for options_allowed_values () .
*
* 'list_*' fields can specify a callback to define the set of their allowed
* values using the 'allowed_values_function' storage setting .
*
* That function will be called :
* - either in the context of a specific entity , which is then provided as the
* $entity parameter ,
* - or for the field generally without the context of any specific entity or
* entity bundle ( typically , Views needing a list of values for an exposed
* filter ), in which case the $entity parameter is NULL .
* This lets the callback restrict the set of allowed values or adjust the
* labels depending on some conditions on the containing entity .
*
* For consistency , the set of values returned when an $entity is provided
* should be a subset of the values returned when no $entity is provided .
*
* @ param \Drupal\Core\Field\FieldStorageDefinitionInterface $definition
* The field storage definition .
* @ param \Drupal\Core\Entity\FieldableEntityInterface | null $entity
* ( optional ) The entity context if known , or NULL if the allowed values are
* being collected without the context of a specific entity .
* @ param bool & $cacheable
* ( optional ) If an $entity is provided , the $cacheable parameter should be
* modified by reference and set to FALSE if the set of allowed values
* returned was specifically adjusted for that entity and cannot not be reused
* for other entities . Defaults to TRUE .
*
* @ return array
* The array of allowed values . Keys of the array are the raw stored values
* ( number or text ), values of the array are the display labels . If $entity
* is NULL , you should return the list of all the possible allowed values in
* any context so that other code ( e . g . Views filters ) can support the allowed
* values for all possible entities and bundles .
*
* @ ingroup callbacks
* @ see options_allowed_values ()
* @ see options_test_allowed_values_callback ()
* @ see options_test_dynamic_values_callback ()
*/
function callback_allowed_values_function ( FieldStorageDefinitionInterface $definition , FieldableEntityInterface $entity = NULL , & $cacheable = TRUE ) {
if ( isset ( $entity ) && ( $entity -> bundle () == 'not_a_programmer' )) {
2017-04-13 15:53:35 +01:00
$values = [
2015-08-17 17:00:26 -07:00
1 => 'One' ,
2 => 'Two' ,
2017-04-13 15:53:35 +01:00
];
2015-08-17 17:00:26 -07:00
}
else {
2017-04-13 15:53:35 +01:00
$values = [
'Group 1' => [
2015-08-17 17:00:26 -07:00
0 => 'Zero' ,
1 => 'One' ,
2017-04-13 15:53:35 +01:00
],
'Group 2' => [
2015-08-17 17:00:26 -07:00
2 => 'Two' ,
2017-04-13 15:53:35 +01:00
],
];
2015-08-17 17:00:26 -07:00
}
return $values ;
}