'SimpleMenu', 'description' => 'Select the menu to display.', 'page callback' => 'drupal_get_form', 'page arguments' => array('simplemenu_admin_settings'), 'access arguments' => array('administer simplemenu') ); return $items; } /** * Is simplemenu enabled for this page request? */ function simplemenu_enabled() { static $enabled; if(!isset($enabled)) { global $theme; $exclusions = variable_get('simplemenu_exclusions', array()); $enabled = (user_access('view simplemenu') && (!isset($exclusions[$theme]) || !$exclusions[$theme]) && _simplemenu_page_visibility()); } return $enabled; } /** * Implementation of hook_init(). */ function simplemenu_init() { // do a simple access check here, since theme isn't available to check yet if (user_access('view simplemenu')) { $path = drupal_get_path('module', 'simplemenu'); $simplemenu_theme = variable_get('simplemenu_theme', 'original'); drupal_add_css($path .'/simplemenu.css'); if ($simplemenu_theme != 'custom') { drupal_add_css($path .'/themes/'. $simplemenu_theme .'/'. $simplemenu_theme .'.css'); } $settings = array( 'effect' => variable_get('simplemenu_effect', 'opacity'), 'effectSpeed' => variable_get('simplemenu_effect_speed', 'fast'), 'element' => variable_get('simplemenu_element', 'body'), 'hideDelay' => variable_get('simplemenu_hide_delay', 800), 'placement' => variable_get('simplemenu_element_method', 'prepend'), 'detectPopup' => variable_get('simplemenu_detect_popop', 1), ); drupal_add_js(array('simplemenu' => $settings), 'setting'); drupal_add_js($path .'/simplemenu.js'); drupal_add_js($path .'/superfish.js'); } } /** * Implementation of hook_footer(). * * This has been broken off of simplemenu_init() because simplemenu_get_menu() * calls simplemenu_menu_tree() which calls menu_tree_output() which has several * calls to theme(). This initializes the theme system too early causing hard * to track bugs. * * @see http://drupal.org/node/219910 */ function simplemenu_footer() { if(simplemenu_enabled()) { $simplemenu = drupal_to_js(simplemenu_get_menu()); $path = base_path() . drupal_get_path('module', 'simplemenu'); $output = "\n"; return $output; } } /** * Implementation of hook_perm(). */ function simplemenu_perm() { return array('view simplemenu', 'administer simplemenu'); } /** * SimpleMenu settings page. */ function simplemenu_admin_settings() { if (module_exists('menu')) { $form['default_menu']['simplemenu_menu'] = array( '#type' => 'select', '#title' => t('Menu'), '#options' => menu_parent_options(menu_get_menus(), array( 'mlid' => 0 )), // return complete tree; '#default_value' => variable_get('simplemenu_menu', 'navigation:0'), '#description' => t('Select the menu to display.') ); } if (module_exists('devel')) { $form['default_menu']['simplemenu_devel'] = array( '#type' => 'checkbox', '#title' => t('Add devel module links'), '#default_value' => variable_get('simplemenu_devel', 0), '#description' => t('Add devel module links for those users that can access the devel module.') ); } $form['default_menu']['simplemenu_theme'] = array( '#type' => 'select', '#title' => t('Theme'), '#options' => array( 'original' => t('original'), 'blackblue' => t('black & blue'), 'custom' => t('custom'), ), '#default_value' => variable_get('simplemenu_theme', 'original'), '#description' => t('Select which theme to use. If you specify custom, you need to define CSS in your theme.') ); $form['default_menu']['advanced'] = array( '#type' => 'fieldset', '#title' => t('Advanced settings'), '#collapsible' => TRUE, '#collapsed' => TRUE ); $form['default_menu']['advanced']['simplemenu_element'] = array( '#type' => 'textfield', '#title' => t('CSS selector to attach menu to'), '#default_value' => variable_get('simplemenu_element', 'body'), '#description' => t('A valid CSS selector to attach the menu to. Example: body, #primary, div.my-class'), '#required' => TRUE ); $form['default_menu']['advanced']['simplemenu_element_method'] = array( '#type' => 'radios', '#title' => t('Attach method'), '#options' => array( 'prepend' => t('Prepend'), 'append' => t('Append'), ), '#default_value' => variable_get('simplemenu_element_method', 'prepend'), '#description' => t('Choose how the menu should be attached to the above selector.'), '#required' => TRUE ); $form['default_menu']['advanced']['simplemenu_exclusions'] = array( '#type' => 'checkboxes', '#title' => t('Theme exclusions'), '#options' => drupal_map_assoc(array_keys(list_themes())), '#default_value' => variable_get('simplemenu_exclusions', array()), '#description' => t('Select which themes to not display the menu. Use this when you have a theme that displays its own admin navigation.'), ); $form['default_menu']['advanced']['simplemenu_hide_delay'] = array( '#type' => 'textfield', '#title' => t('Hide delay'), '#size' => 4, '#default_value' => variable_get('simplemenu_hide_delay', 800), '#description' => t('How long (in milliseconds) should a menu still appear after losing focus.') ); $form['default_menu']['advanced']['simplemenu_effect'] = array( '#type' => 'radios', '#title' => t('Show effect'), '#options' => array('opacity' => t('Fade'), 'height' => t('Slide'), 'none' => t('None')), '#default_value' => variable_get('simplemenu_effect', 'opacity'), '#description' => t('The effect used when displaying a menu.') ); $form['default_menu']['advanced']['simplemenu_effect_speed'] = array( '#type' => 'radios', '#title' => t('Show speed'), '#options' => array('slow' => t('Slow'), 'medium' => t('Medium'), 'fast' => t('Fast')), '#default_value' => variable_get('simplemenu_effect_speed', 'fast'), '#description' => t('The speed of the effect, not used when "none" is set to show effect.') ); $form['default_menu']['advanced']['simplemenu_detect_popop'] = array( '#type' => 'checkbox', '#title' => t('Detect pop-up windows'), '#default_value' => variable_get('simplemenu_detect_popop', 1), '#description' => t("Choose whether SimpleMenu should attempt to detect if it is inside of a pop-up window. If enabled, SimpleMenu will not display if it is inside of a pop-up window."), ); $form['default_menu']['advanced']['simplemenu_visibility_operator'] = array( '#type' => 'radios', '#title' => t('Show block on specific pages'), '#default_value' => variable_get('simplemenu_visibility_operator', 0), '#options' => array( 0 => t('Show on every page except the listed pages.'), 1 => t('Show on only the listed pages.') ), ); $form['default_menu']['advanced']['simplemenu_visibility_pages'] = array( '#type' => 'textarea', '#title' => t('Pages'), '#default_value' => variable_get('simplemenu_visibility_pages', ''), '#description' => t("Enter one page per line as Drupal paths. The '*' character is a wildcard. Example paths are %blog for the blog page and %blog-wildcard for every personal blog. %front is the front page.", array('%blog' => 'blog', '%blog-wildcard' => 'blog/*', '%front' => '')), ); return system_settings_form($form); } /** * Render an HTML list of links for a given menu. */ function simplemenu_get_menu() { $output = ''; // if a user turned off menu module but SimpleMenu was previously set // reset variable so a menu appears $menu_name = module_exists('menu') ? variable_get('simplemenu_menu', 'navigation:0') : 'navigation:0'; $menu = simplemenu_menu_tree($menu_name); if (!$menu) { $menu = '
  • '. t('No menu items found. Try a different menu as the default.') .'
  • '; } // This is ugly, I know, but it is the only way I can see to get the additional // links inside the