[support] Menus Won't Display Properly
Michael Prasuhn
mike at mikeyp.net
Tue Nov 4 23:01:49 UTC 2008
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
More information about the support
mailing list