Commit ecf913b3 authored by webchick's avatar webchick
Browse files

#806830 by Amitaibu, yched: Add Dynamic (i.e. not cached) alter hook to instance definitions.

parent 1d2e7683
......@@ -2178,6 +2178,71 @@ function hook_field_extra_fields_display_alter(&$displays, $context) {
$displays['description']['visibility'] = FALSE;
}
}
/**
* Alters the widget properties of a field instance before it gets displayed.
*
* Note that instead of hook_field_widget_properties_alter(), which is called
* for all fields on all entity types,
* hook_field_widget_properties_ENTITY_TYPE_alter() may be used to alter widget
* properties for fields on a specific entity type only.
*
* This hook is called once per field per added or edit entity. If the result
* of the hook involves reading from the database, it is highly recommended to
* statically cache the information.
*
* @param $widget
* The instance's widget properties.
* @param $context
* An associative array containing:
* - entity_type: The entity type; e.g. 'node' or 'user'.
* - entity: The entity object.
* - field: The field that the widget belongs to.
* - instance: The instance of the field.
*
* @see hook_field_widget_properties_ENTITY_TYPE_alter()
*/
function hook_field_widget_properties_alter(&$widget, $context) {
// Change a widget's type according to the time of day.
$field = $context['field'];
if ($context['entity_type'] == 'node' && $field['field_name'] == 'field_foo') {
$time = date('H');
$widget['type'] = $time < 12 ? 'widget_am' : 'widget_pm';
}
}
/**
* Alters the widget properties of a field instance on a given entity type
* before it gets displayed.
*
* Modules can implement hook_field_widget_properties_ENTITY_TYPE_alter() to
* alter the widget properties for fields on a specific entity type, rather than
* implementing hook_field_widget_properties_alter().
*
* This hook is called once per field per displayed widget entity. If the result
* of the hook involves reading from the database, it is highly recommended to
* statically cache the information.
*
* @param $widget
* The instance's widget properties.
* @param $context
* An associative array containing:
* - entity_type: The entity type; e.g. 'node' or 'user'.
* - entity: The entity object.
- field: The field that the widget belongs to.
* - instance: The instance of the field.
*
* @see hook_field_widget_properties_alter()
*/
function hook_field_widget_properties_ENTITY_TYPE_alter(&$widget, $context) {
// Change a widget's type according to the time of day.
$field = $context['field'];
if ($field['field_name'] == 'field_foo') {
$time = date('H');
$widget['type'] = $time < 12 ? 'widget_am' : 'widget_pm';
}
}
/**
* @} End of "ingroup field_storage"
*/
......
......@@ -25,6 +25,15 @@ function field_default_form($entity_type, $entity, $field, $instance, $langcode,
$items = field_get_default_value($entity_type, $entity, $field, $instance, $langcode);
}
// Let modules alter the widget properties.
$context = array(
'entity_type' => $entity_type,
'entity' => $entity,
'field' => $field,
'instance' => $instance,
);
drupal_alter(array('field_widget_properties', 'field_widget_properties_' . $entity_type), $instance['widget'], $context);
// Collect widget elements.
$elements = array();
if (field_access('edit', $field, $entity_type, $entity)) {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment