diff options
author | Dries Buytaert <dries@buytaert.net> | 2005-12-03 10:06:10 +0000 |
---|---|---|
committer | Dries Buytaert <dries@buytaert.net> | 2005-12-03 10:06:10 +0000 |
commit | 9677ab121fda26c2cb17bc592ee8cd2bfe586e83 (patch) | |
tree | ade742101aa4f5c03fe06f2cfdf28d1a1f758630 /modules/menu.module | |
parent | 94f290c8eeb6c9284b11005c79c72a9101f7d140 (diff) | |
download | brdo-9677ab121fda26c2cb17bc592ee8cd2bfe586e83.tar.gz brdo-9677ab121fda26c2cb17bc592ee8cd2bfe586e83.tar.bz2 |
- Patch #32665 by Richard Archer: add more functionality to menu item settings on node/*/edit pages.
Diffstat (limited to 'modules/menu.module')
-rw-r--r-- | modules/menu.module | 161 |
1 files changed, 130 insertions, 31 deletions
diff --git a/modules/menu.module b/modules/menu.module index 033ff049a..1558eae1e 100644 --- a/modules/menu.module +++ b/modules/menu.module @@ -106,17 +106,21 @@ function menu_configure() { $primary_options[$mid] = $menu['items'][$mid]['title']; } - $form['settings_links'] = array('#type' => 'fieldset', '#title' => t('Primary links settings')); + $form['settings_links'] = array( + '#type' => 'fieldset', + '#title' => t('Primary links settings'), + ); + $form['settings_links']['intro'] = array( - '#type' => 'markup', - '#value' => t('Primary links is a navigation system which usually (depending on your theme) appears at the top-right of the browser window. There are usually two rows of links, primary and secondary. You may control which links appear in this area by choosing a menu from which the links will be generated and then placing your links into the menu using the <a href="%menu">menu administration</a> or the \'Menu settings\' pane on each edit node form.', array('%menu' => url('admin/menu'))) + '#type' => 'item', + '#value' => t('Primary links is a navigation system which usually (depending on your theme) appears at the top-right of the browser window. There are usually two rows of links, primary and secondary. You may control which links appear in this area by choosing a menu from which the links will be generated and then placing your links into the menu using the <a href="%menu">menu administration</a> or the menu settings pane on each post authoring form.', array('%menu' => url('admin/menu'))), ); $form['settings_links']['menu_primary_menu'] = array( '#type' => 'select', '#title' => t('Menu containing primary links'), '#default_value' => variable_get('menu_primary_menu', 0), - '#options' => $primary_options + '#options' => $primary_options, ); $secondary_options[0] = t('No secondary links'); @@ -129,9 +133,32 @@ function menu_configure() { '#title' => t('Menu containing secondary links'), '#default_value' => variable_get('menu_secondary_menu', 0), '#options' => $secondary_options, - '#description' => t('If you select the same menu as primary links then secondary links will display the appropriate second level of your navigation hierarchy.') + '#description' => t('If you select the same menu as primary links then secondary links will display the appropriate second level of your navigation hierarchy.'), ); + $form['settings_authoring'] = array( + '#type' => 'fieldset', + '#title' => t('Post authoring form settings'), + ); + + $form['settings_authoring']['intro'] = array( + '#type' => 'item', + '#value' => t('On each post authoring form there is a menu settings pane. This setting allows you to limit what is displayed in the parent item drop-down menu of that pane. This can be used to force new menu items to be created in the primary links menu or to hide admin menu items.'), + ); + + $authoring_options = array(0 => t('Show all menus')); + foreach ($menu['items'][0]['children'] as $mid) { + $authoring_options[$mid] = $menu['items'][$mid]['title']; + } + + $form['settings_authoring']['menu_parent_items'] = array( + '#type' => 'select', + '#title' => t('Restrict parent items to'), + '#default_value' => variable_get('menu_parent_items', 0), + '#options' => $authoring_options, + '#description' => t('Choose the menu from which parent items will be made available. Only this menu item and its children will be shown.'), + ); + return system_settings_form('menu_configure', $form); } @@ -576,29 +603,51 @@ function menu_overview_tree_rows($pid = 0, $depth = 0) { /** * Return a list of menu items that are valid possible parents for the - * given menu item. + * given menu item. The list excludes the given item and its children. + * + * @param $mid + * The menu item id for which to generate a list of parents. + * If $mid == 0 then the complete tree is returned. + * @param $pid + * The menu item id of the menu item at which to start the tree. + * If $pid > 0 then this item will be included in the tree. + * @param $depth + * The current depth in the tree - used when recursing to indent the tree. + * @return + * An array of menu titles keyed on the mid. */ function menu_parent_options($mid, $pid = 0, $depth = 0) { $menu = menu_get_menu(); $options = array(); - if (isset($menu['items'][$pid]) && $menu['items'][$pid]['children']) { + if (!isset($menu['items'][$pid])) { + return $options; + } + + // Exclude $mid and its children from the list unless $mid is 0. + if ($mid && $mid == $pid) { + return $options; + } + + // Add the current $pid to the list. + if ($pid > 0 && ($menu['items'][$pid]['type'] & (MENU_MODIFIABLE_BY_ADMIN | MENU_IS_ROOT))) { + $title = ' '. $menu['items'][$pid]['title']; + for ($i = 0; $i < $depth; $i++) { + $title = '--'. $title; + } + if (!($menu['items'][$pid]['type'] & MENU_VISIBLE_IN_TREE)) { + $title .= ' ('. t('disabled') .')'; + } + $options[$pid] = $title; + $depth ++; + } + + // Add children of $pid to the list recursively. + if ($menu['items'][$pid]['children']) { usort($menu['items'][$pid]['children'], '_menu_sort'); foreach ($menu['items'][$pid]['children'] as $child) { - if ($child != $mid) { - if ($child > 0 && ($menu['items'][$child]['type'] & (MENU_MODIFIABLE_BY_ADMIN | MENU_IS_ROOT))) { - $title = ' '. $menu['items'][$child]['title']; - for ($i = 0; $i < $depth; $i++) { - $title = '--'. $title; - } - if (!($menu['items'][$child]['type'] & (MENU_VISIBLE_IN_TREE | MENU_VISIBLE_IF_HAS_CHILDREN))) { - $title .= ' ('. t('disabled') .')'; - } - $options[$child] = $title; - } - $options += menu_parent_options($mid, $child, $depth + 1); - } + $options += menu_parent_options($mid, $child, $depth); } } @@ -617,22 +666,72 @@ function menu_node_form($edit = array()) { } } - $form['menu'] = array('#type' => 'fieldset', '#title' => t('Menu settings'), '#collapsible' => TRUE, '#collapsed' => TRUE, '#tree' => TRUE); + $form['menu'] = array( + '#type' => 'fieldset', + '#title' => t('Menu settings'), + '#collapsible' => TRUE, + '#collapsed' => TRUE, + '#tree' => TRUE, + ); - $form['menu']['title'] = array('#type' => 'textfield', '#title' => t('Title'), '#default_value' => $item['title'], '#description' => t('The name to display for this link.')); + $form['menu']['title'] = array( + '#type' => 'textfield', + '#title' => t('Title'), + '#default_value' => $item['title'], + '#description' => t('The name to display for this link.'), + ); + + $form['menu']['description'] = array( + '#type' => 'textfield', + '#title' => t('Description'), + '#default_value' => $item['description'], + '#description' => t('The description displayed when hovering over a menu item.'), + ); - // Generate a list of possible parents (not including this item or descendants). - $options = menu_parent_options($item['mid']); - $form['menu']['pid'] = array('#type' => select, '#title' => t('Parent item'), '#default_value' => $item['pid'], '#options' => $options); - $form['menu']['description'] = array('#type' => 'hidden', '#value' => $item['description']); - $form['menu']['path'] = array('#type' => 'hidden', '#value' => $item['path']); - $form['menu']['weight'] = array('#type' => 'hidden', '#value' => $item['weight'] ? $item['weight'] : 0); + // Generate a list of possible parents. + $options = menu_parent_options($item['mid'], variable_get('menu_parent_items', 0)); - $form['menu']['mid'] = array('#type' => 'hidden', '#value' => $item['mid'] ? $item['mid'] : 0); - $form['menu']['type'] = array('#type' => 'hidden', '#value' => $item['type'] ? $item['type'] : MENU_CUSTOM_ITEM); + $form['menu']['pid'] = array( + '#type' => select, + '#title' => t('Parent item'), + '#default_value' => $item['pid'], + '#options' => $options, + ); + + $form['menu']['path'] = array( + '#type' => 'hidden', + '#value' => $item['path'], + ); + + $form['menu']['weight'] = array( + '#type' => 'weight', + '#title' => t('Weight'), + '#default_value' => $item['weight'], + '#delta' => 10, + '#description' => t('Optional. In the menu, the heavier items will sink and the lighter items will be positioned nearer the top.'), + ); + + $form['menu']['mid'] = array( + '#type' => 'hidden', + '#value' => $item['mid'] ? $item['mid'] : 0, + ); + + $form['menu']['type'] = array( + '#type' => 'hidden', + '#value' => $item['type'] ? $item['type'] : MENU_CUSTOM_ITEM, + ); if ($item['mid'] > 0) { - $form['menu']['delete'] = array('#type' => 'checkbox', '#title' => t('Check to delete this menu item.'), '#default_value' => $item['delete']); + $form['menu']['delete'] = array( + '#type' => 'checkbox', + '#title' => t('Check to delete this menu item.'), + '#default_value' => $item['delete'], + ); + + $form['menu']['advanced'] = array( + '#type' => 'item', + '#value' => t('You may also <a href="%edit">edit the advanced settings</a> for this menu item.', array('%edit' => url("admin/menu/item/edit/{$item['mid']}"))), + ); } return $form; |