--- menu_breadcrumb.module_6.x-1.x-dev 2008-02-21 07:56:34.000000000 +1300 +++ menu_breadcrumb.module 2009-08-04 11:28:02.047000000 +1200 @@ -75,10 +75,20 @@ function menu_breadcrumb_disable() { */ function menu_breadcrumb_init() { if (variable_get('menu_breadcrumb_determine_menu', 1)) { + $menu_list = variable_get('menu_breadcrumb_menus', array('admin_menu', 'devel')); + $filter = variable_get('menu_breadcrumb_menus_filter', 'black_list'); $menu_item = menu_get_item(); - $menu_link = menu_link_load(db_result(db_query("SELECT mlid FROM {menu_links} WHERE link_path = '%s'", $menu_item['href']))); - $use_menu = $menu_link['menu_name']; - menu_set_active_menu_name($use_menu); + $result = db_query("SELECT mlid, menu_name FROM {menu_links} WHERE link_path = '%s'", $menu_item['href']); + while ($menu_link = db_fetch_array($result)) { + // @see http://www.php.net/manual/en/function.in-array.php#86695 + $menu_in_list = in_array($menu_link['menu_name'], $menu_list, TRUE); + if ($filter == 'white_list' && $menu_in_list + or $filter == 'black_list' && !$menu_in_list) + { + menu_set_active_menu_name($menu_link['menu_name']); + break; + } + } } $breadcrumb = drupal_get_breadcrumb(); @@ -134,5 +144,23 @@ function menu_breadcrumb_admin_settings_ '#default_value' => variable_get('menu_breadcrumb_hide_on_single_item', 0), ); + $form['menu_breadcrumb_menus'] = array( + '#type' => 'checkboxes', + '#title' => t('Menu list'), + '#description' => t('Menus marked here will be used or ignored by menu breadcrumb, according to the filter below.'), + '#options' => drupal_map_assoc(menu_get_names()), + '#default_value' => variable_get('menu_breadcrumb_menus', array('admin_menu', 'devel')), + ); + + $form['menu_breadcrumb_menus_filter'] = array( + '#type' => 'radios', + '#title' => t('Menu filter'), + '#options' => array( + 'black_list' => t('Menu items will never be chosen from the above selected menus (black list).'), + 'white_list' => t('Menu items will only be chosen from the above selected menus (white list).'), + ), + '#default_value' => variable_get('menu_breadcrumb_menus_filter', 'black_list'), + ); + return system_settings_form($form); } \ No newline at end of file