| 1 |
<?php
|
| 2 |
// $Id: menu_block.follow.inc,v 1.1 2008/12/01 09:56:56 johnalbin Exp $
|
| 3 |
|
| 4 |
/**
|
| 5 |
* @file
|
| 6 |
* Provides active menu item pruning.
|
| 7 |
*/
|
| 8 |
|
| 9 |
/**
|
| 10 |
* Prune a tree so that it begins at the active menu item.
|
| 11 |
*
|
| 12 |
* @param $tree
|
| 13 |
* array The menu tree to prune.
|
| 14 |
* @param $level
|
| 15 |
* string The level which the tree will be pruned to: 'active' or 'child'.
|
| 16 |
* @return
|
| 17 |
* void
|
| 18 |
*/
|
| 19 |
function _menu_tree_prune_active_tree(&$tree, $level) {
|
| 20 |
do {
|
| 21 |
$found_active_trail = FALSE;
|
| 22 |
// Examine each element at this level for the active trail.
|
| 23 |
foreach (array_keys($tree) AS $key) {
|
| 24 |
if ($tree[$key]['link']['in_active_trail']) {
|
| 25 |
$found_active_trail = TRUE;
|
| 26 |
// If the active trail item has children, examine them.
|
| 27 |
if ($tree[$key]['below']) {
|
| 28 |
// If we are pruning to the active menu item's level, check if this
|
| 29 |
// is the active menu item by checking its children.
|
| 30 |
if ($level == 'active') {
|
| 31 |
foreach (array_keys($tree[$key]['below']) AS $child_key) {
|
| 32 |
if ($tree[$key]['below'][$child_key]['link']['in_active_trail']) {
|
| 33 |
// Get the title for the pruned tree.
|
| 34 |
menu_block_set_title($tree[$key]['link']);
|
| 35 |
$tree = $tree[$key]['below'];
|
| 36 |
// Continue in the pruned tree.
|
| 37 |
break 2;
|
| 38 |
}
|
| 39 |
}
|
| 40 |
// If we've found the active item, we're done.
|
| 41 |
break 2;
|
| 42 |
}
|
| 43 |
// Get the title for the pruned tree.
|
| 44 |
menu_block_set_title($tree[$key]['link']);
|
| 45 |
// If we are pruning to the children of the active menu item, just
|
| 46 |
// prune the tree to the children of the item in the active trail.
|
| 47 |
$tree = $tree[$key]['below'];
|
| 48 |
// Continue in the pruned tree.
|
| 49 |
break;
|
| 50 |
}
|
| 51 |
// If the active menu item has no children, we're done.
|
| 52 |
else {
|
| 53 |
break 2;
|
| 54 |
}
|
| 55 |
}
|
| 56 |
}
|
| 57 |
} while ($found_active_trail);
|
| 58 |
}
|