_function welcome_menu() {
$item=array();
$item['welcome'] = array(
'title' => 'welcome',
'access callback' => 'welcome_init',
'page callback' => 'welcome_test',
'type' => MENU_CALLBACK,
);
return $item;
}
/*
* Implements hook_init().
*/
function welcome_init() {
if (empty($GLOBALS['user']->uid)&& arg(0)!='welcome') {
drupal_goto('welcome');
}
}
function welcome_test() {
$output = 'welcome';
return $output;
}
_
匿名ユーザーをログインページに自動リダイレクトし、認証されたユーザーがこのページを表示できないようにしたい。 user_login_block()
をページコールバックとして使用するにはどうすればよいですか?
アクセスコールバックは、ユーザーがページにアクセスできる場合はTRUE
、ページにアクセスできない場合はFALSE
のブール値を返す必要があります。ユーザーを他のページにリダイレクトしないでください。
Drupalには、ユーザーが匿名の場合にTRUE
を返す関数があります。
function welcome_menu() {
$items = array();
$items['welcome'] = array(
'title' => 'welcome',
'access callback' => 'user_is_anonymous',
'page callback' => 'welcome_test',
'type' => MENU_CALLBACK,
);
return $item;
}
コードは、ユーザーモジュールで使用されるものと似ています。
function user_menu() {
// …
$items['user/login'] = array(
'title' => 'Log in',
'access callback' => 'user_is_anonymous',
'type' => MENU_DEFAULT_LOCAL_TASK,
);
// …
return $items;
}
メニューコールバックを使用してログインブロックを表示するには、関数コードを次のように変更する必要があります。
function welcome_test() {
return drupal_get_form('user_login_block');
}
hook_init() はキャッシュされたページに対して呼び出されず、Drupalは通常、匿名ユーザーのページをキャッシュします(そうするように設定されている場合)。
最も明白なことは、Drupalのコーディング標準にまったく準拠していないことです。それは読むのを非常に難しくします。
hook_init()はそれ自身のフックであり、アクセスコールバックとして使用しないでください。アクセスコールバックは、TRUEまたはFALSEのいずれかを返す必要があります。