The reason that these menus is because a.) they appear in the if (!$may_cache) section of the hook_menu and b.) thay are wrapped in an if ($user !== FALSE) condition.
Note that there is also a separate /user path registered in the if ($may_cache) section of the hook_menu. This is the "default" path for /user and what shows up in the admin/menu screen.
You may be grappling with one of the core troubles with Drupal 5. Only menus that are in the if ($may_cache) section of the module may be moved around with the admin/menu user interface. If it's a dynamic menu, you just don't see it there. So if you make a dynamic menu item, you can't turn around and move it into a block. Although you may be able to move a the static parent menu item (defined in the if ($may_cache) section of the menu into a separate menu and menu block. This took me a little time to grok.
Finally you can't have the code define a new menu, but only create a menu tree section in code and then move it later using the admin menu interface.
Is that clearing any of this up for you?
Here's the relavent chunk of user_menu code for understanding. if ($may_cache) { $items[] = array('path' => 'user', 'title' => t('User account'), 'callback' => 'drupal_get_form', 'callback arguments' => array('user_login'), 'access' => !$user->uid, 'type' => MENU_CALLBACK);
$items[] = array('path' => 'user/autocomplete', 'title' => t('User autocomplete'), 'callback' => 'user_autocomplete', 'access' => $view_access, 'type' => MENU_CALLBACK); ... Bunch of code ommitted....
} else { ... Some code ommitted. if ($user !== FALSE) { // Always let a user view their own account $view_access |= $user->uid == arg(1); // Only admins can view blocked accounts $view_access &= $account->status || $admin_access;
$items[] = array('path' => 'user/'. arg(1), 'title' => t('User'), 'type' => MENU_CALLBACK, 'callback' => 'user_view', 'callback arguments' => array(arg(1)), 'access' => $view_access);
$items[] = array('path' => 'user/'. arg(1) .'/view', 'title' => t('View'), 'access' => $view_access, 'type' => MENU_DEFAULT_LOCAL_TASK, 'weight' => -10);
$items[] = array('path' => 'user/'. arg(1) .'/edit', 'title' => t('Edit'), 'callback' => 'drupal_get_form', 'callback arguments' => array('user_edit'), 'access' => $admin_access || $user->uid == arg(1), 'type' => MENU_LOCAL_TASK); $items[] = array('path' => 'user/'. arg(1) .'/delete', 'title' => t('Delete'), 'callback' => 'user_edit', 'access' => $admin_access, 'type' => MENU_CALLBACK);
if (arg(2) == 'edit') { if (($categories = _user_categories($account)) && (count($categories) > 1)) { foreach ($categories as $key => $category) { $items[] = array( 'path' => 'user/'. arg(1) .'/edit/'. $category['name'], 'title' => $category['title'], 'type' => $category['name'] == 'account' ? MENU_DEFAULT_LOCAL_TASK : MENU_LOCAL_TASK, 'weight' => $category['weight'], 'access' => ($admin_access || $user->uid == arg(1))); } } } } } -----Original Message----- From: support-bounces@drupal.org [mailto:support-bounces@drupal.org] On Behalf Of Ivan Sergio Borgonovo Sent: Monday, July 28, 2008 8:43 AM To: support@drupal.org Subject: Re: [support] tutorial on dynamically generating menu in D5
On Mon, 28 Jul 2008 16:07:50 +0200 Florent JOUSSEAUME florent.jousseaume@makina-corpus.com wrote:
For your example, this is not a switch, but 2 modules with differents ACL. The block 'login' is displayed for 'Anonymous' and the menu is displayed for 'Authenticated user' (block Navigation).
For the element's visibility in the menu, this is with the user_access
method defined in the function 'hook_menu' for each module.
It looks a bit hakish. And I still can't get it completely.
1) path user points to user_login if(uid) otherwise it should point to something else... but what is the alternative? In user_menu all paths are user/[something else] or admin/user/... I can't understand why once the user is logged in and the path user/[uid] becomes available the path /user reaches user_view
2) I can't yet understand the magic that make -My account appear in the Menu admin pages as locked. I still haven't had the time to read the code.
3) I miss how I can *render* menu with the admin interface and/or in modules. I'd expect that if I build up a $items hierarchy I could build up a menu from the "admin" interface adding a path and the menu system will take care of rendering children once I eg. put the menu in a block. What if I'd like to render the menu inside my code? I think I should use menu_tree... but well I bet there are a lot of tricks I could learn without guessing them from the API.
4) I haven't seen any tutorial, handbook... on any of the menu_ family of function. There is nothing on "Pro Drupal development" book.
thanks
-- Ivan Sergio Borgonovo http://www.webthatworks.it
-- [ Drupal support list | http://lists.drupal.org/ ]