function render_example_page_alter in Examples for Developers 7
Implements hook_page_alter().
Alters the page in several different ways based on how the form has been configured.
Related topics
File
- render_example/
render_example.module, line 330 - Demonstrates render arrays.
Code
function render_example_page_alter(&$page) {
// Re-sort the sidebar in reverse order.
if (variable_get('render_example_reverse_sidebar', FALSE) && !empty($page['sidebar_first'])) {
$page['sidebar_first'] = array_reverse($page['sidebar_first']);
foreach (element_children($page['sidebar_first']) as $element) {
// Reverse the weights if they exist.
if (!empty($page['sidebar_first'][$element]['#weight'])) {
$page['sidebar_first'][$element]['#weight'] *= -1;
}
}
$page['sidebar_first']['#sorted'] = FALSE;
}
// Add a list of items to the top of sidebar_first.
// This shows how #theme and #theme_wrappers work.
if (variable_get('render_example_note_about_render_arrays', FALSE) && !empty($page['sidebar_first'])) {
$items = array(
t('Render arrays are everywhere in D7'),
t('Leave content unrendered as much as possible'),
t('This allows rearrangement and alteration very late in page cycle'),
);
$note = array(
'#title' => t('Render Array Example'),
'#items' => $items,
// The functions in #pre_render get to alter the actual data before it
// gets rendered by the various theme functions.
'#pre_render' => array(
'render_example_change_to_ol',
),
// The functions in #post_render get both the element and the rendered
// data and can add to the rendered data.
'#post_render' => array(
'render_example_add_hr',
),
// The #theme theme operation gets the first chance at rendering the
// element and its children.
'#theme' => 'item_list',
// Then the theme operations in #theme_wrappers can wrap more around
// what #theme left in #chilren.
'#theme_wrappers' => array(
'render_example_add_div',
'render_example_add_notes',
),
'#weight' => -9999,
);
$page['sidebar_first']['render_array_note'] = $note;
$page['sidebar_first']['#sorted'] = FALSE;
}
// Move the navigation menu into the content area.
if (variable_get('render_example_move_navigation_menu', FALSE) && !empty($page['sidebar_first']['system_navigation']) && !empty($page['content'])) {
$page['content']['system_navigation'] = $page['sidebar_first']['system_navigation'];
$page['content']['system_navigation']['#weight'] = -99999;
unset($page['content']['#sorted']);
unset($page['sidebar_first']['system_navigation']);
}
// Show the render array used to build the page render array display.
if (variable_get('render_example_show_page', FALSE)) {
$form['render_example_page_fieldset'] = array(
'#type' => 'fieldset',
'#title' => t('Page render array'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$form['render_example_page_fieldset']['markup'] = array(
// The kpr() function is from devel module and is here only allow us
// to output the array in a way that's easy to explore.
'#markup' => kpr($page, TRUE),
);
$page['content']['page_render_array'] = drupal_get_form('render_example_embedded_form', $form);
$page['content']['page_render_array']['#weight'] = -999999;
$page['content']['#sorted'] = FALSE;
}
// Add render array to the bottom of each block.
if (variable_get('render_example_show_block', FALSE)) {
foreach (element_children($page) as $region_name) {
foreach (element_children($page[$region_name]) as $block_name) {
// Push the block down a level so we can add another block after it.
$old_block = $page[$region_name][$block_name];
$page[$region_name][$block_name] = array(
$block_name => $old_block,
);
$form = array();
$form['render_example_block_fieldset'] = array(
'#type' => 'fieldset',
'#title' => t('Block render array'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
);
$form['render_example_block_fieldset']['markup'] = array(
'#type' => 'item',
'#title' => t('%blockname block render array', array(
'%blockname' => $block_name,
)),
// The kpr() function is from devel module and is here only allow us
// to output the array in a way that's easy to explore.
'#markup' => kpr($old_block, TRUE),
);
// Add the new block that contains the render array.
$page[$region_name][$block_name]['render_example_block_render_array'] = drupal_get_form('render_example_embedded_form', $form);
$page[$region_name][$block_name]['render_example_block_render_array']['#weight'] = 999;
}
}
}
// Add #prefix and #suffix to a block to wrap a div around it.
if (variable_get('render_example_prefix', FALSE)) {
foreach (element_children($page) as $region_name) {
foreach (element_children($page[$region_name]) as $block_name) {
$block =& $page[$region_name][$block_name];
$block['#prefix'] = '<div class="block-prefix"><p>Prefixed</p>';
$block['#suffix'] = '<span class="block-suffix">Block suffix</span></div>';
}
}
}
}