Projet

Général

Profil

Paste
Télécharger (8,78 ko) Statistiques
| Branche: | Révision:

root / drupal7 / modules / system / theme.api.php @ db2d93dd

1
<?php
2

    
3
/**
4
 * @defgroup themeable Default theme implementations
5
 * @{
6
 * Functions and templates for the user interface to be implemented by themes.
7
 *
8
 * Drupal's presentation layer is a pluggable system known as the theme
9
 * layer. Each theme can take control over most of Drupal's output, and
10
 * has complete control over the CSS.
11
 *
12
 * Inside Drupal, the theme layer is utilized by the use of the theme()
13
 * function, which is passed the name of a component (the theme hook)
14
 * and an array of variables. For example,
15
 * theme('table', array('header' => $header, 'rows' => $rows));
16
 * Additionally, the theme() function can take an array of theme
17
 * hooks, which can be used to provide 'fallback' implementations to
18
 * allow for more specific control of output. For example, the function:
19
 * theme(array('table__foo', 'table'), $variables) would look to see if
20
 * 'table__foo' is registered anywhere; if it is not, it would 'fall back'
21
 * to the generic 'table' implementation. This can be used to attach specific
22
 * theme functions to named objects, allowing the themer more control over
23
 * specific types of output.
24
 *
25
 * As of Drupal 6, every theme hook is required to be registered by the
26
 * module that owns it, so that Drupal can tell what to do with it and
27
 * to make it simple for themes to identify and override the behavior
28
 * for these calls.
29
 *
30
 * The theme hooks are registered via hook_theme(), which returns an
31
 * array of arrays with information about the hook. It describes the
32
 * arguments the function or template will need, and provides
33
 * defaults for the template in case they are not filled in. If the default
34
 * implementation is a function, by convention it is named theme_HOOK().
35
 *
36
 * Each module should provide a default implementation for theme_hooks that
37
 * it registers. This implementation may be either a function or a template;
38
 * if it is a function it must be specified via hook_theme(). By convention,
39
 * default implementations of theme hooks are named theme_HOOK. Default
40
 * template implementations are stored in the module directory.
41
 *
42
 * Drupal's default template renderer is a simple PHP parsing engine that
43
 * includes the template and stores the output. Drupal's theme engines
44
 * can provide alternate template engines, such as XTemplate, Smarty and
45
 * PHPTal. The most common template engine is PHPTemplate (included with
46
 * Drupal and implemented in phptemplate.engine, which uses Drupal's default
47
 * template renderer.
48
 *
49
 * In order to create theme-specific implementations of these hooks, themes can
50
 * implement their own version of theme hooks, either as functions or templates.
51
 * These implementations will be used instead of the default implementation. If
52
 * using a pure .theme without an engine, the .theme is required to implement
53
 * its own version of hook_theme() to tell Drupal what it is implementing;
54
 * themes utilizing an engine will have their well-named theming functions
55
 * automatically registered for them. While this can vary based upon the theme
56
 * engine, the standard set by phptemplate is that theme functions should be
57
 * named THEMENAME_HOOK. For example, for Drupal's default theme (Bartik) to
58
 * implement the 'table' hook, the phptemplate.engine would find
59
 * bartik_table().
60
 *
61
 * The theme system is described and defined in theme.inc.
62
 *
63
 * @see theme()
64
 * @see hook_theme()
65
 * @see hooks
66
 * @see callbacks
67
 *
68
 * @} End of "defgroup themeable".
69
 */
70

    
71
/**
72
 * Allow themes to alter the theme-specific settings form.
73
 *
74
 * With this hook, themes can alter the theme-specific settings form in any way
75
 * allowable by Drupal's Form API, such as adding form elements, changing
76
 * default values and removing form elements. See the Form API documentation on
77
 * api.drupal.org for detailed information.
78
 *
79
 * Note that the base theme's form alterations will be run before any sub-theme
80
 * alterations.
81
 *
82
 * @param $form
83
 *   Nested array of form elements that comprise the form.
84
 * @param $form_state
85
 *   A keyed array containing the current state of the form.
86
 */
87
function hook_form_system_theme_settings_alter(&$form, &$form_state) {
88
  // Add a checkbox to toggle the breadcrumb trail.
89
  $form['toggle_breadcrumb'] = array(
90
    '#type' => 'checkbox',
91
    '#title' => t('Display the breadcrumb'),
92
    '#default_value' => theme_get_setting('toggle_breadcrumb'),
93
    '#description'   => t('Show a trail of links from the homepage to the current page.'),
94
  );
95
}
96

    
97
/**
98
 * Preprocess theme variables for templates.
99
 *
100
 * This hook allows modules to preprocess theme variables for theme templates.
101
 * It is called for all theme hooks implemented as templates, but not for theme
102
 * hooks implemented as functions. hook_preprocess_HOOK() can be used to
103
 * preprocess variables for a specific theme hook, whether implemented as a
104
 * template or function.
105
 *
106
 * For more detailed information, see theme().
107
 *
108
 * @param $variables
109
 *   The variables array (modify in place).
110
 * @param $hook
111
 *   The name of the theme hook.
112
 */
113
function hook_preprocess(&$variables, $hook) {
114
 static $hooks;
115

    
116
  // Add contextual links to the variables, if the user has permission.
117

    
118
  if (!user_access('access contextual links')) {
119
    return;
120
  }
121

    
122
  if (!isset($hooks)) {
123
    $hooks = theme_get_registry();
124
  }
125

    
126
  // Determine the primary theme function argument.
127
  if (isset($hooks[$hook]['variables'])) {
128
    $keys = array_keys($hooks[$hook]['variables']);
129
    $key = $keys[0];
130
  }
131
  else {
132
    $key = $hooks[$hook]['render element'];
133
  }
134

    
135
  if (isset($variables[$key])) {
136
    $element = $variables[$key];
137
  }
138

    
139
  if (isset($element) && is_array($element) && !empty($element['#contextual_links'])) {
140
    $variables['title_suffix']['contextual_links'] = contextual_links_view($element);
141
    if (!empty($variables['title_suffix']['contextual_links'])) {
142
      $variables['classes_array'][] = 'contextual-links-region';
143
    }
144
  }
145
}
146

    
147
/**
148
 * Preprocess theme variables for a specific theme hook.
149
 *
150
 * This hook allows modules to preprocess theme variables for a specific theme
151
 * hook. It should only be used if a module needs to override or add to the
152
 * theme preprocessing for a theme hook it didn't define.
153
 *
154
 * For more detailed information, see theme().
155
 *
156
 * @param $variables
157
 *   The variables array (modify in place).
158
 */
159
function hook_preprocess_HOOK(&$variables) {
160
  // This example is from rdf_preprocess_image(). It adds an RDF attribute
161
  // to the image hook's variables.
162
  $variables['attributes']['typeof'] = array('foaf:Image');
163
}
164

    
165
/**
166
 * Process theme variables for templates.
167
 *
168
 * This hook allows modules to process theme variables for theme templates. It
169
 * is called for all theme hooks implemented as templates, but not for theme
170
 * hooks implemented as functions. hook_process_HOOK() can be used to process
171
 * variables for a specific theme hook, whether implemented as a template or
172
 * function.
173
 *
174
 * For more detailed information, see theme().
175
 *
176
 * @param $variables
177
 *   The variables array (modify in place).
178
 * @param $hook
179
 *   The name of the theme hook.
180
 */
181
function hook_process(&$variables, $hook) {
182
  // Wraps variables in RDF wrappers.
183
  if (!empty($variables['rdf_template_variable_attributes_array'])) {
184
    foreach ($variables['rdf_template_variable_attributes_array'] as $variable_name => $attributes) {
185
      $context = array(
186
        'hook' => $hook,
187
        'variable_name' => $variable_name,
188
        'variables' => $variables,
189
      );
190
      $variables[$variable_name] = theme('rdf_template_variable_wrapper', array('content' => $variables[$variable_name], 'attributes' => $attributes, 'context' => $context));
191
    }
192
  }
193
}
194

    
195
/**
196
 * Process theme variables for a specific theme hook.
197
 *
198
 * This hook allows modules to process theme variables for a specific theme
199
 * hook. It should only be used if a module needs to override or add to the
200
 * theme processing for a theme hook it didn't define.
201
 *
202
 * For more detailed information, see theme().
203
 *
204
 * @param $variables
205
 *   The variables array (modify in place).
206
 */
207
function hook_process_HOOK(&$variables) {
208
  // @todo There are no use-cases in Drupal core for this hook. Find one from a
209
  //   contributed module, or come up with a good example. Coming up with a good
210
  //   example might be tough, since the intent is for nearly everything to be
211
  //   achievable via preprocess functions, and for process functions to only be
212
  //   used when requiring the later execution time.
213
}
214

    
215
/**
216
 * Respond to themes being enabled.
217
 *
218
 * @param array $theme_list
219
 *   Array containing the names of the themes being enabled.
220
 *
221
 * @see theme_enable()
222
 */
223
function hook_themes_enabled($theme_list) {
224
  foreach ($theme_list as $theme) {
225
    block_theme_initialize($theme);
226
  }
227
}
228

    
229
/**
230
 * Respond to themes being disabled.
231
 *
232
 * @param array $theme_list
233
 *   Array containing the names of the themes being disabled.
234
 *
235
 * @see theme_disable()
236
 */
237
function hook_themes_disabled($theme_list) {
238
 // Clear all update module caches.
239
  _update_cache_clear();
240
}