diff options
author | Angie Byron <webchick@24967.no-reply.drupal.org> | 2009-06-30 03:12:03 +0000 |
---|---|---|
committer | Angie Byron <webchick@24967.no-reply.drupal.org> | 2009-06-30 03:12:03 +0000 |
commit | 5b17c1eb04fd09adcc9dc2b5d0fbd6aabe027252 (patch) | |
tree | 50fd8a9e0577be020af9e3a682858fc8233093ad | |
parent | 6d5d8dccc4fabd7f995d2e866e9029407ed62c8a (diff) | |
download | brdo-5b17c1eb04fd09adcc9dc2b5d0fbd6aabe027252.tar.gz brdo-5b17c1eb04fd09adcc9dc2b5d0fbd6aabe027252.tar.bz2 |
#502522 by yched: Allow drupal_alter() on various Field API meta-hooks.
-rw-r--r-- | modules/field/field.api.php | 62 | ||||
-rw-r--r-- | modules/field/field.info.inc | 4 |
2 files changed, 66 insertions, 0 deletions
diff --git a/modules/field/field.api.php b/modules/field/field.api.php index 27ae70543..48eb5005e 100644 --- a/modules/field/field.api.php +++ b/modules/field/field.api.php @@ -54,6 +54,19 @@ function hook_fieldable_info() { } /** + * Perform alterations on fieldable types. + * + * @param $info + * Array of informations on fieldable types exposed by hook_fieldable_info() + * implementations. + */ +function hook_fieldable_info_alter(&$info) { + // A contributed module handling node-level caching would want to disable + // field cache for nodes. + $info['node']['cacheable'] = FALSE; +} + +/** * @} End of "ingroup field_fieldable_type" */ @@ -115,6 +128,25 @@ function hook_field_info() { } /** + * Perform alterations on Field API field types. + * + * @param $info + * Array of informations on widget types exposed by hook_field_info() + * implementations. + */ +function hook_field_info_alter(&$info) { + // Add a setting to all field types. + foreach ($info as $field_type => $field_type_info) { + $info[$field_type]['settings'][] = array('mymodule_additional_setting' => 'default value'); + } + + // Change the default widget for fields of type 'foo'. + if (isset($info['foo'])) { + $info['foo']['default widget'] = 'mymodule_widget'; + } +} + +/** * Define the Field API schema for a field structure. * * @param $field @@ -186,6 +218,21 @@ function hook_field_schema($field) { function hook_field_widget_info() { } +/** + * Perform alterations on Field API widget types. + * + * @param $info + * Array of informations on widget types exposed by hook_field_widget_info() + * implementations. + */ +function hook_field_widget_info_alter(&$info) { + // Add a setting to a widget type. + $info['text_textfield']['settings'][] = array('mymodule_additional_setting' => 'default value'); + + // Let a new field type re-use an existing widget. + $info['options_select']['field types'][] = 'my_field_type'; +} + /* * Define Field API formatter types. * @@ -201,6 +248,21 @@ function hook_field_formatter_info() { } /** + * Perform alterations on Field API formatter types. + * + * @param $info + * Array of informations on widget types exposed by + * hook_field_field_formatter_info() implementations. + */ +function hook_field_formatter_info_alter(&$info) { + // Add a setting to a formatter type. + $info['text_default']['settings'][] = array('mymodule_additional_setting' => 'default value'); + + // Let a new field type re-use an existing formatter. + $info['text_default']['field types'][] = 'my_field_type'; +} + +/** * Define custom load behavior for this module's field types. * * Unlike other field hooks, this hook operates on multiple objects. The diff --git a/modules/field/field.info.inc b/modules/field/field.info.inc index 97e18fd61..3eb1d2e33 100644 --- a/modules/field/field.info.inc +++ b/modules/field/field.info.inc @@ -98,6 +98,7 @@ function _field_info_collate_types($reset = FALSE) { $info['field types'][$name]['module'] = $module; } } + drupal_alter('field_info', $info['field types']); // Populate widget types. foreach (module_implements('field_widget_info') as $module) { @@ -107,6 +108,7 @@ function _field_info_collate_types($reset = FALSE) { $info['widget types'][$name]['module'] = $module; } } + drupal_alter('field_widget_info', $info['widget types']); // Populate formatters. foreach (module_implements('field_formatter_info') as $module) { @@ -116,6 +118,7 @@ function _field_info_collate_types($reset = FALSE) { $info['formatter types'][$name]['module'] = $module; } } + drupal_alter('field_formatter_info', $info['formatter types']); // Populate information about 'fieldable' entities. foreach (module_implements('fieldable_info') as $module) { @@ -138,6 +141,7 @@ function _field_info_collate_types($reset = FALSE) { $info['fieldable types'][$name]['module'] = $module; } } + drupal_alter('fieldable_info', $info['fieldable types']); cache_set('field_info_types', $info, 'cache_field'); } |