[support] Menus Won't Display Properly

Steve Edwards killshot91 at comcast.net
Tue Nov 11 00:25:22 UTC 2008


D'oh!  That's it.  I was passing in a role name instead of a 
permission.  I'll try it the right way and see if that works.

Thanks.

Steve

David Rothstein wrote:
> Belated reply, but maybe this will still be helpful.  I noticed that
> you are using code like:
> ...
> 'access' => user_access('regular'),
> ...
> as the access parameter for your menu items.  The user_access()
> function takes a permission as input.  So in order for this code to
> work correctly, you would need to have a permission called "regular"
> defined on your site, and you would then have had to assign this
> permission to the appropriate user roles.  Did you do either of those
> things?  If not, that would explain why regular users cannot access
> your menu items.
>
> The reason I ask is that permission names normally would be phrased
> more along the lines of "access regular menu items" rather than the
> single word "regular"... so it looks to me like maybe you are sending
> the name of your role into the user_access() function?  If so, that
> won't work.
>
> As for why you see different behavior for resource-center/reg-assoc
> and resource-center/affiliate when logged in as the admin user, that
> I'm not immediately sure about.
>
> Hope this helps,
> David Rothstein
>
>
> On Tue, Nov 4, 2008 at 6:26 PM, Steve Edwards <killshot91 at comcast.net> wrote:
>   
>> No, not really.  All that did was add another tab on at
>> resource-center/reg-assoc..  I still get no tabs at all at
>> resource-center/affiliate.
>>
>> Steve
>>
>> Michael Prasuhn wrote:
>>
>> It looks like you are not defining your MENU_DEFAULT_LOCAL_TASK
>> correctly. Creating a page Y with X tabs requires X+1 entries in
>> hook_menu().
>>
>> See this example from node.module:
>>
>> $items[] = array(
>>    'path' => 'admin/content/types',
>>    'title' => t('Content types'),
>>    'description' => t('Manage posts by content type, including default
>> status, front page promotion, etc.'),
>>    'callback' => 'node_overview_types',
>>    'access' => user_access('administer content types'),
>> );
>> $items[] = array(
>>    'path' => 'admin/content/types/list',
>>    'title' => t('List'),
>>    'type' => MENU_DEFAULT_LOCAL_TASK,
>>    'weight' => -10,
>> );
>> $items[] = array(
>>    'path' => 'admin/content/types/add',
>>    'title' => t('Add content type'),
>>    'callback' => 'drupal_get_form',
>>    'callback arguments' => array('node_type_form'),
>>    'type' => MENU_LOCAL_TASK,
>> );
>>
>> In this case, the MENU_DEFAULT_LOCAL_TASK is actually just to define
>> the tab, which is the same as 'admin/content/types'.
>>
>> So basically it looks if you change your 'resource-center/reg-assoc/
>> basic' and 'resource-center/affiliate/basic' items to MENU_LOCAL_TASK,
>> and create an item such as 'resource-center/reg-assoc/view' and only
>> give it a title "view" or some such, a weight (usually -10), and the
>> path 'resource-center/reg-assoc/view' and type MENU_DEFAULT_LOCAL_TASK.
>>
>> I think that's what you're trying to do, let me know if that works.
>>
>> -Mike
>>
>>
>>
>> On Nov 4, 2008, at 2:28 PM, Steve Edwards wrote:
>>
>>
>>
>> I've been fighting with this for a couple weeks now with no
>> resolution, so I'm hoping someone can shed some light on this for
>> me.    I tried using the menu tabs capability in Views with no luck,
>> so I'm trying to accomplish the same thing in a module, still with
>> no luck, and I don't have much hair left to pull out...
>>
>> What I want to do is create a page with three tabbed menu items.
>> The text will be from a Page node, and the three tabs will be
>> views.  There are three roles - regular, associate, and affiliate -
>> that need to have access.  Regular and Associate can see all items,
>> and Affiliate role can only see what has been flagged as being
>> visible to the Affiliate role.  There are three categories - Basic
>> Information, Best Practices, and Technology.  I've created six views
>> accordingly.  What I'm trying to do is create two menu items: one
>> for Regular/Associate, and one for Affiliate, with the same intro
>> text.  Each will have three tabs, but the views will be different
>> Here is my hook_menu:
>>
>> function mymodule_menu($may_cache) {
>>   $items = array();
>>
>>   if ($may_cache) {
>>     $items[] = array(
>>       'path' => 'resource-center/reg-assoc',
>>       'title' => t('Resource Center - Regular'),
>>       'description' => t('Resource center for regular and associate
>> members'),
>>       'callback' => 'resource_center_base_page',
>>       'access' => user_access('regular'),
>>       'type' => MENU_NORMAL_ITEM,
>>     );
>>
>>     $items[] = array(
>>       'path' => 'resource-center/reg-assoc/basic',
>>       'title' => t('Basic Information'),
>>       'description' => t('Basic Information'),
>>       'callback' => 'resource_center_basic',
>>       'callback argument' => 'resources_reg_assoc_basic',
>>       'access' => user_access('regular'),
>>       'type' => MENU_DEFAULT_LOCAL_TASK,
>>     );
>>
>>     $items[] = array(
>>       'path' => 'resource-center/reg-assoc/best-practices',
>>       'title' => t('Best Practices'),
>>       'description' => t('Best Practices'),
>>       'callback' => 'resource_center_best',
>>       'callback argument' => 'resources_reg_assoc_best',
>>       'access' => user_access('regular'),
>>       'type' => MENU_LOCAL_TASK,
>>     );
>>
>>     $items[] = array(
>>       'path' => 'resource-center/reg-assoc/technology',
>>       'title' => t('Technology'),
>>       'description' => t('Technology'),
>>       'callback' => 'resource_center_technology',
>>       'callback argument' => 'resources_reg_assoc_technology',
>>       'access' => user_access('regular'),
>>       'type' => MENU_LOCAL_TASK,
>>     );
>>
>>     $items[] = array(
>>       'path' => 'resource-center/affiliate',
>>       'title' => t('Resource Center - Affiliate'),
>>       'description' => t('Resource center for affiliate members'),
>>       'callback' => 'resource_center_base_page',
>>       'access' => user_access('affiliate'),
>>       'type' => MENU_NORMAL_ITEM,
>>     );
>>      $items[] = array(
>>       'path' => 'resource-center/affiliate/basic',
>>       'title' => t('Basic Information'),
>>       'description' => t('Basic Information'),
>>       'callback' => 'resource_center_basic',
>>       'callback argument' => 'resources_affiliate_basic',
>>       'access' => user_access('affiliate'),
>>       'type' => MENU_DEFAULT_LOCAL_TASK,
>>     );
>>
>>     $items[] = array(
>>       'path' => 'resource-center/affiliate/best-practices',
>>       'title' => t('Best Practices'),
>>       'description' => t('Best Practices'),
>>       'callback' => 'resource_center_best_practices',
>>       'callback argument' => 'resources_affiliate_best',
>>       'access' => user_access('affiliate'),
>>       'type' => MENU_LOCAL_TASK,
>>     );
>>
>>     $items[] = array(
>>       'path' => 'resource-center/affiliate/technology',
>>       'title' => t('Technology'),
>>       'description' => t('Technology'),
>>       'callback' => 'resource_center_technology',
>>       'callback argument' => 'resources_affiliate_technology',
>>       'access' => user_access('affiliate'),
>>       'type' => MENU_LOCAL_TASK,
>>     );
>>   }
>>   return $items;
>> }
>>
>> The URLs for the views match the paths for the MENU_LOCAL_TASK items.
>>
>> Here is the function to call the page (as referred to in the menu
>> callback:
>>
>> function resource_center_base_page() {
>>   $output = '';
>>
>>   $base_node = node_load(84);
>>   $display = node_view($base_node);
>>
>>   $output = $display;
>>
>>   return $output;
>> }
>>
>> and then the functions to call the views:
>>
>> function resource_center_basic($view_name) {
>>   $view = views_get_view($view_name);
>>   print views_build_view('embed', $view, array(), false, false);
>> }
>>
>> function resource_center_best_practices($view_name) {
>>
>>   $view = views_get_view($view_name);
>>   print views_build_view('embed', $view, array(), false, false);
>> }
>>
>> function resource_center_technology($view_name) {
>>
>>   $view = views_get_view($view_name);
>>   print views_build_view('embed', $view, array(), false, false);
>> }
>>
>> After all that, what's happening is that the menu items are only
>> available to my admin user (the first one created).  When I go to
>> resource-center/reg-assoc, I get my page and the tabs, but when I go
>> to resource-center/affiliate, I just get the page with no tabs.
>> When I log in as a regular role, I don't see the menu items at all,
>> and if I go to resource-center/reg-assoc, I get Access Denied.  Am I
>> doing something wrong, or is this a bug in the menu system.
>>
>> Thanks.
>>
>> Steve
>>
>>
>>
>>
>> --
>> [ Drupal support list | http://lists.drupal.org/ ]
>>
>>
>> __________________
>> Michael Prasuhn
>> mike at mikeyp.net
>> http://mikeyp.net
>>
>>
>>
>>
>>
>>
>> --
>> [ Drupal support list | http://lists.drupal.org/ ]
>>
>>     
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.drupal.org/pipermail/support/attachments/20081110/41e92b84/attachment.htm 


More information about the support mailing list