-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathadmin_menu.api.php
164 lines (157 loc) · 6.03 KB
/
admin_menu.api.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
<?php
/**
* @file
* API documentation for Administration menu.
*/
/**
* Provide expansion arguments for dynamic menu items.
*
* The map items must be keyed by the dynamic path to expand, i.e. a menu path
* containing one or more '%' placeholders. Each map item may have the following
* properties:
* - parent: The parent menu path to link the expanded items to.
* - arguments: An array of argument sets that will be used in the expansion.
* Each set consists of an array of one or more placeholders, which again is
* an array of possible expansion values. Upon expansion, each argument is
* combined with every other argument from the set (technically, the cartesian
* product of all arguments). The expansion values may be empty; that is, you
* do not need to insert logic to skip map items for which no values exist,
* since Administration menu will take care of that.
*
* @see admin_menu.map.inc
*/
function hook_admin_menu_map() {
// Expand content types below Structure > Content types.
// The key denotes the dynamic path to expand to multiple menu items.
$map['admin/structure/types/manage/%node_type'] = array(
// Link generated items directly to the "Content types" item.
'parent' => 'admin/structure/types',
// Create expansion arguments for the '%node_type' placeholder.
'arguments' => array(
array(
'%node_type' => array_keys(node_type_get_types()),
),
),
);
return $map;
}
/**
* Add to the administration menu content before it is rendered.
*
* Only use this hook to add new data to the menu structure. Use
* hook_admin_menu_output_alter() to *alter* existing data.
*
* @param array $content
* A structured array suitable for drupal_render(), potentially containing:
* - menu: The administrative menu of links below the path 'admin/*'.
* - icon: The icon menu.
* - account: The user account name and log out link.
* - users: The user counter.
* Additionally, these special properties:
* - #components: The actual components contained in $content are configurable
* and depend on the 'admin_menu_components' configuration value. #components
* holds a copy of that for convenience.
* - #complete: A Boolean indicating whether the complete menu should be built,
* ignoring the current configuration in #components.
* Passed by reference.
*
* @see hook_admin_menu_output_alter()
* @see admin_menu_links_menu()
* @see admin_menu_links_icon()
* @see admin_menu_links_user()
* @see theme_admin_menu_links()
*/
function hook_admin_menu_output_build(&$content) {
// In case your implementation provides a configurable component, check
// whether the component should be displayed:
if (empty($content['#components']['shortcut.links']) && !$content['#complete']) {
return;
}
// Add new top-level item to the menu.
if (isset($content['menu'])) {
$content['menu']['myitem'] = array(
'#title' => t('My item'),
// #attributes are used for list items (LI).
'#attributes' => array('class' => array('mymodule-myitem')),
'#href' => 'mymodule/path',
// #options are passed to l().
'#options' => array(
'query' => drupal_get_destination(),
// Apply a class on the link (anchor).
'attributes' => array('class' => array('myitem-link-anchor')),
),
// #weight controls the order of links in the resulting item list.
'#weight' => 50,
);
}
// Add link to the icon menu to manually run cron.
if (isset($content['icon'])) {
$content['icon']['myitem']['cron'] = array(
'#title' => t('Run cron'),
'#access' => user_access('administer site configuration'),
'#href' => 'admin/reports/status/run-cron',
);
}
}
/**
* Change the administration menu content before it is rendered.
*
* Only use this hook to alter existing data in the menu structure. Use
* hook_admin_menu_output_build() to *add* new data.
*
* @param array $content
* A structured array suitable for drupal_render(). Passed by reference.
*
* @see hook_admin_menu_output_build()
*/
function hook_admin_menu_output_alter(&$content) {
}
/**
* Return content to be replace via JS in the cached menu output.
*
* @param bool $complete
* A Boolean indicating whether all available components of the menu will be
* output and the cache will be skipped.
*
* @return array
* An associative array whose keys are jQuery selectors and whose values are
* strings containing the replacement content.
*/
function hook_admin_menu_replacements($complete) {
$items = array();
// If the complete menu is output, then it is uncached and will contain the
// current counts already.
if (!$complete) {
// Check whether the users count component is enabled.
$components = variable_get('admin_menu_components', array());
if (!empty($components['admin_menu.users']) && ($user_count = admin_menu_get_user_count())) {
// Replace the counters in the cached menu output with current counts.
$items['.admin-menu-users a'] = $user_count;
}
}
return $items;
}
/**
* Inform about additional module-specific caches that can be cleared.
*
* Administration menu uses this hook to gather information about available
* caches that can be flushed individually. Each returned item forms a separate
* menu link below the "Flush all caches" link in the icon menu.
*
* @return array
* An associative array whose keys denote internal identifiers for a
* particular caches (which can be freely defined, but should be in a module's
* namespace) and whose values are associative arrays containing:
* - title: The name of the cache, without "cache" suffix. This label is
* output as link text, but also for the "!title cache cleared."
* confirmation message after flushing the cache; make sure it works and
* makes sense to users in both locations.
* - callback: The name of a function to invoke to flush the individual cache.
*/
function hook_admin_menu_cache_info() {
$caches['update'] = array(
'title' => t('Update data'),
'callback' => '_update_cache_clear',
);
return $caches;
}