2011-11-12 7 views
2

私は、ユーザーとゲストの間で異なるメニューを作りたい、ここに私はdrupal 7のユーザーとゲストのための異なるメニュービューを作成するには?

<?php 
    function my_module_menu() { 
    if(user_is_logged_in()) { 
     $items = array(); 
     $items['my_module/user1']=array(
     'title' => t('1. User menu 1'), 
      'page callback' => 'test1', 
      'access arguments' => array('access content'), 
      'type' => MENU_NORMAL_ITEM, 
     'expanded' => TRUE, 
     ); 
     $items['my_module/user2']=array(
     'title' => t('2. User Menu 2'), 
      'page callback' => 'test2', 
      'access arguments' => array('access content'), 
      'type' => MENU_NORMAL_ITEM, 
     'expanded' => TRUE, 
     ); 
    } 
    else{ 
     $items = array(); 
     $items['my_module/guest1']=array(
     'title' => t('1. Guest menu 1'), 
      'page callback' => '1test1', 
      'access arguments' => array('access content'), 
      'type' => MENU_NORMAL_ITEM, 
     'expanded' => TRUE, 
     ); 
     $items['my_module/user2']=array(
     'title' => t('2. Guest menu 2'), 
      'page callback' => '1test2', 
      'access arguments' => array('access content'), 
      'type' => MENU_NORMAL_ITEM, 
     'expanded' => TRUE, 
     ); 
    } 
    return $items; 
?> 

をしようとしているコードの問題は、私は、ユーザーがログインしているかどうかだけユーザビュー(ユーザーがログインしている)を取得するメニュービューでありますかどうか私のコードに何か問題がありますか?

答えて

4

問題があるのは、メニューが再構築されたときに呼び出され、すべての単一ページの読み込みではなく(これはパフォーマンスにとって非常に悪いため)。

メニュー項目にaccess argumentsキーの代わりにaccess callbackキーを使用して、ユーザーがログインしているかどうかをオンザフライで判断するのが最も簡単な方法です。Drupalにはaccess callback機能がFALSEを返すことを、あなたが欲しい効果買ってあげるいる任意のユーザーのためのメニュー項目:

function mymodule_menu() { 
    $items['my_module/user1']=array(
    'title' => t('1. User menu 1'), 
    'page callback' => 'test1', 
    'access callback' => 'user_is_logged_in', 
    'type' => MENU_NORMAL_ITEM, 
    'expanded' => TRUE, 
); 

    $items['my_module/user2']=array(
    'title' => t('2. User Menu 2'), 
    'page callback' => 'test2', 
    'access callback' => 'user_is_logged_in', 
    'type' => MENU_NORMAL_ITEM, 
    'expanded' => TRUE, 
); 

    $items['my_module/guest1']=array(
    'title' => t('1. Guest menu 1'), 
    'page callback' => '1test1', 
    'access callback' => 'user_is_anonymous', 
    'type' => MENU_NORMAL_ITEM, 
    'expanded' => TRUE, 
); 

    $items['my_module/user2']=array(
    'title' => t('2. Guest menu 2'), 
    'page callback' => '1test2', 
    'access callback' => 'user_is_anonymous', 
    'type' => MENU_NORMAL_ITEM, 
    'expanded' => TRUE, 
); 

    return $items; 
} 

は、これらのメニュー項目のすべてが同じメニューに追加されますが、2つだけは、これまでの任意で表示されますユーザーのために1回。

+0

ありがとう、その仕事:D – Altic

関連する問題