diff --git a/modules/field/field.module b/modules/field/field.module
index 2861841a460..c87cb036330 100644
--- a/modules/field/field.module
+++ b/modules/field/field.module
@@ -147,20 +147,27 @@ function field_help($path, $arg) {
$output .= '
' . t('Uses') . '
';
$output .= '';
$output .= '- ' . t('Enabling field types') . '
';
- $output .= '- ' . t('The Field module provides the infrastructure for fields and field attachment, but the field types themselves are provided by additional modules. Some of the modules are required; the optional modules can be enabled from the Modules administration page. Drupal core includes the following field type modules:', array('@modules' => url('admin/config/modules')));
- $output .= '
';
- $output .= '- ' . t('Number (required)') . '
';
- $output .= '- ' . t('Fields for storing numbers, in integer, decimal or floating point form. You may define a set of allowed inputs, or specify an allowable range of values. Several common formats for displaying numeric data are available.') . '
';
- $output .= '- ' . t('Text (required)') . '
';
- $output .= '- ' . t( "Fields for storing text. A text field may contain plain text only, or optionally, may use Drupal's input format filters to securely manage HTML output. Text input fields may be either a single line (text field), multiple lines (text area), or for greater input control, a select box, checkbox, or radio buttons. If desired, the field can be validated, so that it is limited to a set of allowed values.") . '
';
- $output .= '- ' . t('List (required)') . '
';
- $output .= '- ' . t('Fields for storing a list of items. Usually these items are inputted through a select list, checkboxes, or radio buttons.') . '
';
- $output .= '- ' . t('Image') . '
';
- $output .= '- ' . t('Fields for storing images.') . '
';
- $output .= '- ' . t('File') . '
';
- $output .= '- ' . t('Fields for attaching files to content.') . '
';
- $output .= '
';
- $output .= '- ' . t('Additional fields may be provided by contributed modules, which you can find in the contributed module section of drupal.org.', array('@contrib' => 'http://drupal.org/project/modules')) . '
';
+ $output .= '- ' . t('The Field module provides the infrastructure for fields and field attachment; the field types and input widgets themselves are provided by additional modules. Some of the modules are required; the optional modules can be enabled from the Modules administration page. Drupal core includes the following field type modules: Number (required), Text (required), List (required), Taxonomy (optional), Image (optional), and File (optional); the required Options module provides input widgets for other field modules. Additional fields and widgets may be provided by contributed modules, which you can find in the contributed module section of Drupal.org. Currently enabled field and input widget modules:', array('@modules' => url('admin/config/modules'), '@contrib' => 'http://drupal.org/project/modules', '@options' => url('admin/help/options')));
+
+ // Make a list of all widget and field modules currently enabled, in
+ // order by displayed module name (module names are not translated).
+ $items = array();
+ $info = system_get_info('module');
+ $modules = array_merge(module_implements('field_info'), module_implements('field_widget_info'));
+ $modules = array_unique($modules);
+ sort($modules);
+ foreach ($modules as $module) {
+ $display = $info[$module]['name'];
+ if (module_hook($module, 'help')) {
+ $items['items'][] = l($display, 'admin/help/' . $module);
+ }
+ else {
+ $items['items'][] = $display;
+ }
+ }
+ $output .= theme('item_list', $items) . '
';
+ $output .= '- ' . t('Managing field data storage') . '
';
+ $output .= '- ' . t('Developers of field modules can either use the default Field SQL storage module to store data for their fields, or a contributed or custom module developed using the field storage API.', array('@storage-api' => 'http://api.drupal.org/api/group/field_storage/7', '@sql-store' => url('admin/help/field_sql_storage'))) . '
';
$output .= '
';
return $output;
}
diff --git a/modules/field/modules/field_sql_storage/field_sql_storage.module b/modules/field/modules/field_sql_storage/field_sql_storage.module
index c7c7d7b104a..a7bbd663778 100644
--- a/modules/field/modules/field_sql_storage/field_sql_storage.module
+++ b/modules/field/modules/field_sql_storage/field_sql_storage.module
@@ -12,7 +12,9 @@
function field_sql_storage_help($path, $arg) {
switch ($path) {
case 'admin/help#field_sql_storage':
- $output = '' . t('The Field SQL Storage module stores Field API data in the database. It is the default field storage module, but other field storage modules may be available in the contributions repository.') . '
';
+ $output = '';
+ $output .= '' . t('About') . '
';
+ $output .= '' . t('The Field SQL storage module stores field data in the database. It is the default field storage module; other field storage mechanisms may be available as contributed modules. See the Field module help page for more information about fields.', array('@field-help' => url('admin/help/field'))) . '
';
return $output;
}
}
diff --git a/modules/field/modules/list/list.module b/modules/field/modules/list/list.module
index 0b8496f44e6..9838f0a7247 100644
--- a/modules/field/modules/list/list.module
+++ b/modules/field/modules/list/list.module
@@ -6,6 +6,19 @@
* Defines list field types that can be used with the Options module.
*/
+/**
+ * Implements hook_help().
+ */
+function list_help($path, $arg) {
+ switch ($path) {
+ case 'admin/help#list':
+ $output = '';
+ $output .= '' . t('About') . '
';
+ $output .= '' . t('The List module defines various fields for storing a list of items, for use with the Field module. Usually these items are entered through a select list, checkboxes, or radio buttons. See the Field module help page for more information about fields.', array('@field-help' => url('admin/help/field'))) . '
';
+ return $output;
+ }
+}
+
/**
* Implements hook_field_info().
*/
diff --git a/modules/field/modules/options/options.module b/modules/field/modules/options/options.module
index 74573b4fdd1..f3d9450146c 100644
--- a/modules/field/modules/options/options.module
+++ b/modules/field/modules/options/options.module
@@ -6,6 +6,19 @@
* Defines selection, check box and radio button widgets for text and numeric fields.
*/
+/**
+ * Implements hook_help().
+ */
+function options_help($path, $arg) {
+ switch ($path) {
+ case 'admin/help#options':
+ $output = '';
+ $output .= '' . t('About') . '
';
+ $output .= '' . t('The Options module defines checkbox, selection, and other input widgets for the Field module. See the Field module help page for more information about fields.', array('@field-help' => url('admin/help/field'))) . '
';
+ return $output;
+ }
+}
+
/**
* Implements hook_theme().
*/
diff --git a/modules/field/modules/text/text.module b/modules/field/modules/text/text.module
index 06609fcd96b..6f6112c18a0 100644
--- a/modules/field/modules/text/text.module
+++ b/modules/field/modules/text/text.module
@@ -6,6 +6,19 @@
* Defines simple text field types.
*/
+/**
+ * Implements hook_help().
+ */
+function text_help($path, $arg) {
+ switch ($path) {
+ case 'admin/help#text':
+ $output = '';
+ $output .= '' . t('About') . '
';
+ $output .= '' . t("The Text module defines various text field types for the Field module. A text field may contain plain text only, or optionally, may use Drupal's text filters to securely manage HTML output. Text input fields may be either a single line (text field), multiple lines (text area), or for greater input control, a select box, checkbox, or radio buttons. If desired, the field can be validated, so that it is limited to a set of allowed values. See the Field module help page for more information about fields.", array('@field-help' => url('admin/help/field'), '@filter-help' => url('admin/help/filter'))) . '
';
+ return $output;
+ }
+}
+
/**
* Implements hook_field_info().
*