Projet

Général

Profil

Paste
Télécharger (5,96 ko) Statistiques
| Branche: | Révision:

root / drupal7 / modules / field_ui / field_ui.api.php @ 6eb57d7f

1
<?php
2

    
3
/**
4
 * @file
5
 * Hooks provided by the Field UI module.
6
 */
7

    
8
/**
9
 * @addtogroup field_types
10
 * @{
11
 */
12

    
13
/**
14
 * Add settings to a field settings form.
15
 *
16
 * Invoked from field_ui_field_settings_form() to allow the module defining the
17
 * field to add global settings (i.e. settings that do not depend on the bundle
18
 * or instance) to the field settings form. If the field already has data, only
19
 * include settings that are safe to change.
20
 *
21
 * @todo: Only the field type module knows which settings will affect the
22
 * field's schema, but only the field storage module knows what schema
23
 * changes are permitted once a field already has data. Probably we need an
24
 * easy way for a field type module to ask whether an update to a new schema
25
 * will be allowed without having to build up a fake $prior_field structure
26
 * for hook_field_update_forbid().
27
 *
28
 * @param $field
29
 *   The field structure being configured.
30
 * @param $instance
31
 *   The instance structure being configured.
32
 * @param $has_data
33
 *   TRUE if the field already has data, FALSE if not.
34
 *
35
 * @return
36
 *   The form definition for the field settings.
37
 */
38
function hook_field_settings_form($field, $instance, $has_data) {
39
  $settings = $field['settings'];
40
  $form['max_length'] = array(
41
    '#type' => 'textfield',
42
    '#title' => t('Maximum length'),
43
    '#default_value' => $settings['max_length'],
44
    '#required' => FALSE,
45
    '#element_validate' => array('element_validate_integer_positive'),
46
    '#description' => t('The maximum length of the field in characters. Leave blank for an unlimited size.'),
47
  );
48
  return $form;
49
}
50

    
51
/**
52
 * Add settings to an instance field settings form.
53
 *
54
 * Invoked from field_ui_field_edit_form() to allow the module defining the
55
 * field to add settings for a field instance.
56
 *
57
 * @param $field
58
 *   The field structure being configured.
59
 * @param $instance
60
 *   The instance structure being configured.
61
 *
62
 * @return
63
 *   The form definition for the field instance settings.
64
 */
65
function hook_field_instance_settings_form($field, $instance) {
66
  $settings = $instance['settings'];
67

    
68
  $form['text_processing'] = array(
69
    '#type' => 'radios',
70
    '#title' => t('Text processing'),
71
    '#default_value' => $settings['text_processing'],
72
    '#options' => array(
73
      t('Plain text'),
74
      t('Filtered text (user selects text format)'),
75
    ),
76
  );
77
  if ($field['type'] == 'text_with_summary') {
78
    $form['display_summary'] = array(
79
      '#type' => 'select',
80
      '#title' => t('Display summary'),
81
      '#options' => array(
82
        t('No'),
83
        t('Yes'),
84
      ),
85
      '#description' => t('Display the summary to allow the user to input a summary value. Hide the summary to automatically fill it with a trimmed portion from the main post.'),
86
      '#default_value' => !empty($settings['display_summary']) ? $settings['display_summary'] :  0,
87
    );
88
  }
89

    
90
  return $form;
91
}
92

    
93
/**
94
 * Add settings to a widget settings form.
95
 *
96
 * Invoked from field_ui_field_edit_form() to allow the module defining the
97
 * widget to add settings for a widget instance.
98
 *
99
 * @param $field
100
 *   The field structure being configured.
101
 * @param $instance
102
 *   The instance structure being configured.
103
 *
104
 * @return
105
 *   The form definition for the widget settings.
106
 */
107
function hook_field_widget_settings_form($field, $instance) {
108
  $widget = $instance['widget'];
109
  $settings = $widget['settings'];
110

    
111
  if ($widget['type'] == 'text_textfield') {
112
    $form['size'] = array(
113
      '#type' => 'textfield',
114
      '#title' => t('Size of textfield'),
115
      '#default_value' => $settings['size'],
116
      '#element_validate' => array('element_validate_integer_positive'),
117
      '#required' => TRUE,
118
    );
119
  }
120
  else {
121
    $form['rows'] = array(
122
      '#type' => 'textfield',
123
      '#title' => t('Rows'),
124
      '#default_value' => $settings['rows'],
125
      '#element_validate' => array('element_validate_integer_positive'),
126
      '#required' => TRUE,
127
    );
128
  }
129

    
130
  return $form;
131
}
132

    
133

    
134
/**
135
 * Specify the form elements for a formatter's settings.
136
 *
137
 * This hook is only invoked if hook_field_formatter_settings_summary()
138
 * returns a non-empty value.
139
 *
140
 * @param $field
141
 *   The field structure being configured.
142
 * @param $instance
143
 *   The instance structure being configured.
144
 * @param $view_mode
145
 *   The view mode being configured.
146
 * @param $form
147
 *   The (entire) configuration form array, which will usually have no use here.
148
 * @param $form_state
149
 *   The form state of the (entire) configuration form.
150
 *
151
 * @return
152
 *   The form elements for the formatter settings.
153
 */
154
function hook_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
155
  $display = $instance['display'][$view_mode];
156
  $settings = $display['settings'];
157

    
158
  $element = array();
159

    
160
  if ($display['type'] == 'text_trimmed' || $display['type'] == 'text_summary_or_trimmed') {
161
    $element['trim_length'] = array(
162
      '#title' => t('Length'),
163
      '#type' => 'textfield',
164
      '#size' => 20,
165
      '#default_value' => $settings['trim_length'],
166
      '#element_validate' => array('element_validate_integer_positive'),
167
      '#required' => TRUE,
168
    );
169
  }
170

    
171
  return $element;
172

    
173
}
174

    
175
/**
176
 * Return a short summary for the current formatter settings of an instance.
177
 *
178
 * If an empty result is returned, the formatter is assumed to have no
179
 * configurable settings, and no UI will be provided to display a settings
180
 * form.
181
 *
182
 * @param $field
183
 *   The field structure.
184
 * @param $instance
185
 *   The instance structure.
186
 * @param $view_mode
187
 *   The view mode for which a settings summary is requested.
188
 *
189
 * @return
190
 *   A string containing a short summary of the formatter settings.
191
 */
192
function hook_field_formatter_settings_summary($field, $instance, $view_mode) {
193
  $display = $instance['display'][$view_mode];
194
  $settings = $display['settings'];
195

    
196
  $summary = '';
197

    
198
  if ($display['type'] == 'text_trimmed' || $display['type'] == 'text_summary_or_trimmed') {
199
    $summary = t('Length: @chars chars', array('@chars' => $settings['trim_length']));
200
  }
201

    
202
  return $summary;
203
}
204

    
205
/**
206
 * @} End of "addtogroup field_types".
207
 */