[support] tutorial on dynamically generating menu in D5

bharani kumar bharanikumariyerphp at gmail.com
Mon Jul 28 20:17:43 UTC 2008


I thing This code enough for u,

Just copy this module into your site/module....

On Mon, Jul 28, 2008 at 10:46 PM, Metzler, David <metzlerd at evergreen.edu>wrote:

> 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 at drupal.org [mailto:support-bounces at drupal.org] On
> Behalf Of Ivan Sergio Borgonovo
> Sent: Monday, July 28, 2008 8:43 AM
> To: support at 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 at 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/ ]
> --
> [ Drupal support list | http://lists.drupal.org/ ]
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.drupal.org/pipermail/support/attachments/20080729/6ddadb8e/attachment-0001.htm 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: cShow.rar
Type: application/octet-stream
Size: 3533 bytes
Desc: not available
Url : http://lists.drupal.org/pipermail/support/attachments/20080729/6ddadb8e/attachment-0001.obj 


More information about the support mailing list