-
Notifications
You must be signed in to change notification settings - Fork 0
/
template.php
226 lines (215 loc) · 9.27 KB
/
template.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
<?php
/**
* @file
* Contains the theme's functions to manipulate Drupal's default markup.
*
* A QUICK OVERVIEW OF DRUPAL THEMING
*
* The default HTML for all of Drupal's markup is specified by its modules.
* For example, the comment.module provides the default HTML markup and CSS
* styling that is wrapped around each comment. Fortunately, each piece of
* markup can optionally be overridden by the theme.
*
* Drupal deals with each chunk of content using a "theme hook". The raw
* content is placed in PHP variables and passed through the theme hook, which
* can either be a template file (which you should already be familiary with)
* or a theme function. For example, the "comment" theme hook is implemented
* with a comment.tpl.php template file, but the "breadcrumb" theme hooks is
* implemented with a theme_breadcrumb() theme function. Regardless if the
* theme hook uses a template file or theme function, the template or function
* does the same kind of work; it takes the PHP variables passed to it and
* wraps the raw content with the desired HTML markup.
*
* Most theme hooks are implemented with template files. Theme hooks that use
* theme functions do so for performance reasons - theme_field() is faster
* than a field.tpl.php - or for legacy reasons - theme_breadcrumb() has "been
* that way forever."
*
* The variables used by theme functions or template files come from a handful
* of sources:
* - the contents of other theme hooks that have already been rendered into
* HTML. For example, the HTML from theme_breadcrumb() is put into the
* $breadcrumb variable of the page.tpl.php template file.
* - raw data provided directly by a module (often pulled from a database)
* - a "render element" provided directly by a module. A render element is a
* nested PHP array which contains both content and meta data with hints on
* how the content should be rendered. If a variable in a template file is a
* render element, it needs to be rendered with the render() function and
* then printed using:
* <?php print render($variable); ?>
*
* ABOUT THE TEMPLATE.PHP FILE
*
* The template.php file is one of the most useful files when creating or
* modifying Drupal themes. With this file you can do three things:
* - Modify any theme hooks variables or add your own variables, using
* preprocess or process functions.
* - Override any theme function. That is, replace a module's default theme
* function with one you write.
* - Call hook_*_alter() functions which allow you to alter various parts of
* Drupal's internals, including the render elements in forms. The most
* useful of which include hook_form_alter(), hook_form_FORM_ID_alter(),
* and hook_page_alter(). See api.drupal.org for more information about
* _alter functions.
*
* OVERRIDING THEME FUNCTIONS
*
* If a theme hook uses a theme function, Drupal will use the default theme
* function unless your theme overrides it. To override a theme function, you
* have to first find the theme function that generates the output. (The
* api.drupal.org website is a good place to find which file contains which
* function.) Then you can copy the original function in its entirety and
* paste it in this template.php file, changing the prefix from theme_ to
* ahern_. For example:
*
* original, found in modules/field/field.module: theme_field()
* theme override, found in template.php: ahern_field()
*
* where ahern is the name of your sub-theme. For example, the
* zen_classic theme would define a zen_classic_field() function.
*
* Note that base themes can also override theme functions. And those
* overrides will be used by sub-themes unless the sub-theme chooses to
* override again.
*
* Zen core only overrides one theme function. If you wish to override it, you
* should first look at how Zen core implements this function:
* theme_breadcrumbs() in zen/template.php
*
* For more information, please visit the Theme Developer's Guide on
* Drupal.org: http://drupal.org/node/173880
*
* CREATE OR MODIFY VARIABLES FOR YOUR THEME
*
* Each tpl.php template file has several variables which hold various pieces
* of content. You can modify those variables (or add new ones) before they
* are used in the template files by using preprocess functions.
*
* This makes THEME_preprocess_HOOK() functions the most powerful functions
* available to themers.
*
* It works by having one preprocess function for each template file or its
* derivatives (called theme hook suggestions). For example:
* THEME_preprocess_page alters the variables for page.tpl.php
* THEME_preprocess_node alters the variables for node.tpl.php or
* for node--forum.tpl.php
* THEME_preprocess_comment alters the variables for comment.tpl.php
* THEME_preprocess_block alters the variables for block.tpl.php
*
* For more information on preprocess functions and theme hook suggestions,
* please visit the Theme Developer's Guide on Drupal.org:
* http://drupal.org/node/223440 and http://drupal.org/node/1089656
*/
/**
* Override or insert variables into the maintenance page template.
*
* @param $variables
* An array of variables to pass to the theme template.
* @param $hook
* The name of the template being rendered ("maintenance_page" in this case.)
*/
/* -- Delete this line if you want to use this function
function ahern_preprocess_maintenance_page(&$variables, $hook) {
// When a variable is manipulated or added in preprocess_html or
// preprocess_page, that same work is probably needed for the maintenance page
// as well, so we can just re-use those functions to do that work here.
ahern_preprocess_html($variables, $hook);
ahern_preprocess_page($variables, $hook);
}
// */
/**
* Override or insert variables into the html templates.
*
* @param $variables
* An array of variables to pass to the theme template.
* @param $hook
* The name of the template being rendered ("html" in this case.)
*/
/* -- Delete this line if you want to use this function
function ahern_preprocess_html(&$variables, $hook) {
$variables['sample_variable'] = t('Lorem ipsum.');
// The body tag's classes are controlled by the $classes_array variable. To
// remove a class from $classes_array, use array_diff().
//$variables['classes_array'] = array_diff($variables['classes_array'], array('class-to-remove'));
}
// */
/**
* Override or insert variables into the page templates.
*
* @param $variables
* An array of variables to pass to the theme template.
* @param $hook
* The name of the template being rendered ("page" in this case.)
*/
/* -- Delete this line if you want to use this function
function ahern_preprocess_page(&$variables, $hook) {
$variables['sample_variable'] = t('Lorem ipsum.');
}
// */
/**
* Override or insert variables into the node templates.
*
* @param $variables
* An array of variables to pass to the theme template.
* @param $hook
* The name of the template being rendered ("node" in this case.)
*/
/* -- Delete this line if you want to use this function
function ahern_preprocess_node(&$variables, $hook) {
$variables['sample_variable'] = t('Lorem ipsum.');
// Optionally, run node-type-specific preprocess functions, like
// ahern_preprocess_node_page() or ahern_preprocess_node_story().
$function = __FUNCTION__ . '_' . $variables['node']->type;
if (function_exists($function)) {
$function($variables, $hook);
}
}
// */
/**
* Override or insert variables into the comment templates.
*
* @param $variables
* An array of variables to pass to the theme template.
* @param $hook
* The name of the template being rendered ("comment" in this case.)
*/
/* -- Delete this line if you want to use this function
function ahern_preprocess_comment(&$variables, $hook) {
$variables['sample_variable'] = t('Lorem ipsum.');
}
// */
/**
* Override or insert variables into the region templates.
*
* @param $variables
* An array of variables to pass to the theme template.
* @param $hook
* The name of the template being rendered ("region" in this case.)
*/
/* -- Delete this line if you want to use this function
function ahern_preprocess_region(&$variables, $hook) {
// Don't use Zen's region--sidebar.tpl.php template for sidebars.
//if (strpos($variables['region'], 'sidebar_') === 0) {
// $variables['theme_hook_suggestions'] = array_diff($variables['theme_hook_suggestions'], array('region__sidebar'));
//}
}
// */
/**
* Override or insert variables into the block templates.
*
* @param $variables
* An array of variables to pass to the theme template.
* @param $hook
* The name of the template being rendered ("block" in this case.)
*/
/* -- Delete this line if you want to use this function
function ahern_preprocess_block(&$variables, $hook) {
// Add a count to all the blocks in the region.
// $variables['classes_array'][] = 'count-' . $variables['block_id'];
// By default, Zen will use the block--no-wrapper.tpl.php for the main
// content. This optional bit of code undoes that:
//if ($variables['block_html_id'] == 'block-system-main') {
// $variables['theme_hook_suggestions'] = array_diff($variables['theme_hook_suggestions'], array('block__no_wrapper'));
//}
}
// */