This is a simple module that enables the site to have drop down css/javascript menus for site navigation and admin navigation.

Remember to activate and configure the menus in %link

', array('%link' => l('admin/block', 'admin/block'))); break; } return $output; } // Implemention of hook_menu() function nice_menus_menu($may_cache) { if (!$may_cache) { // We only want to include the JS for IE, not browsers capable of doing everything in css // drupal_add_js(drupal_get_path('module', 'nice_menus').'/nice_menus.js'); drupal_add_js('misc/drupal.js'); // won't add if already added, but need this *before* our js drupal_set_html_head(''); //remove the IE check, since we need JS for all browsers (for the delay) theme_add_style(drupal_get_path('module', 'nice_menus').'/nice_menus.css'); } } // Implementation of hook_settings() function nice_menus_settings() { $form['nice_menus_number'] = array( '#type' => 'select', '#title' => t('Number of Nice Menus'), '#description' => t('The total number of independent nice menus (blocks) you want.'), '#default_value' => variable_get('nice_menus_number', '2'), '#options' => drupal_map_assoc(array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)) ); return $form; } // Implementation of hook_block(). function nice_menus_block($op = 'list', $delta = 0, $edit = array()) { global $user; switch ($op) { case 'list': for ($i=1;$i<=variable_get('nice_menus_number', '2');$i++) { $blocks[$i]['info'] = variable_get('nice_menus_name_'. $i, 'Nice Menu ' . $i) . ' (Nice Menu)'; } return $blocks; break; case 'configure': $form['nice_menus_name_'. $delta] = array( '#type' => 'textfield', '#title' => t('Menu Name'), '#default_value' => variable_get('nice_menus_name_'. $delta, 'Nice Menu ' . $delta) ); $form['nice_menus_menu_'. $delta] = array( '#type' => 'select', '#title' => t('Source Menu Tree'), '#description' => t('The menu tree from which to show a nice menu.'), '#default_value' => variable_get('nice_menus_menu_'. $delta, '1'), '#options' => menu_parent_options(0) ); $form['nice_menus_type_'. $delta] = array( '#type' => 'select', '#title' => t('Menu Style'), '#description' => t('right: menu items are listed on top of each other and expand to the right
left: menu items are listed on top of each other and expand to the left
down: menu items are listed side by side and expand down'), '#default_value' => variable_get('nice_menus_type_'. $delta, 'right'), '#options' => drupal_map_assoc(array('right','left','down')) ); return $form; break; case 'save': variable_set('nice_menus_name_'. $delta, $edit['nice_menus_name_'.$delta]); variable_set('nice_menus_menu_'. $delta, $edit['nice_menus_menu_'.$delta]); variable_set('nice_menus_type_'. $delta, $edit['nice_menus_type_'.$delta]); break; case 'view': if ($menu_tree = _nice_menu_tree(variable_get('nice_menus_menu_'.$delta, '1'))) { if ($menu_tree['content']) { $block['content'] = ""; if (variable_get('nice_menus_type_'.$delta,'right') == 'down') { $class = 'nice-menu-hide-title'; } else { $class = 'nice-menu-show-title'; } $block['subject'] = ''.check_plain($menu_tree['subject'] == t('Navigation') ? ($user->uid ? $user->name : t('Navigation')) : $menu_tree['subject']).''; } } else $block['content'] = false; return $block; break; } } // Private functions below function _nice_menu_tree($pid = 1) { $menu = menu_get_menu(); $output['content'] = ''; $output['subject'] = $menu['items'][$pid]['title']; if ($menu['visible'][$pid]['children']) { foreach ($menu['visible'][$pid]['children'] as $mid) { // Build class name based on menu path e.g. to give each menu item individual style $path_class = 'menu-path-'. str_replace('/', '-', $menu['items'][$mid]['path']); if (count($menu['visible'][$mid]['children']) > 0) { $output['content'].= ""; } else { $output['content'].= ""; } } } return $output; }