回答:
variable_set()
そのために使用できます。
variable_set('site_frontpage', $value);
hook_install
またはでこれを使用hook_update_N
することは問題ありません。
匿名ユーザーと認証済みユーザーに異なるフロントページを設定できるモジュール(Frontpage、私が保守しているもの)があります。このモジュールにより、サードパーティのモジュールは、ユーザーがリダイレクトされるページを変更したり、ページのレンダリングに使用される構造体配列を変更したりできます。サードパーティモジュールは、匿名または認証のフロントページがFrontpageモジュール内に設定されていない場合、またはノードの読み込み中にエラーが発生した場合にのみ、リダイレクトURLを変更できます。モジュールはおそらく、サードパーティのモジュールがユーザーを選択した特定のページにリダイレクトできるようにするために将来変更されるでしょう。
別の方法として、Frontpageで使用されるものと同様のコードを使用して、特定の基準に基づいてユーザーを特定のページにリダイレクトするカスタムモジュールを作成できます。
モジュールはhook_menu()を実装し、メニューコールバックをたとえばhttp://example.com/frontpageに関連付ける必要があります。そのメニュー項目のページコールバックは、条件が検証されたことを確認してから、ユーザーを特定のURLにリダイレクトするだけです。
コードスケルトンは、次のようなものです。
/**
* Implements hook_menu().
*/
function mymodule_menu() {
$items = array();
$items['frontpage'] = array(
'page callback' => 'mymodule_frontpage_view',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
function mymodule_frontpage_view() {
// These variables can be useful to redirect the users
// to specific pages, basing on the language currently set for
// the content, or on the fact the user is logged in.
$langcode = $GLOBALS['language_content']->language;
$logged_in = user_is_logged_in();
if ($condition) {
drupal_goto($redirect);
}
}
非常に柔軟なソリューションは、Panelsを使用することです。さまざまな表示を任意の基準に基づいて表示でき、UIを介して制御されます。
私はこのように修正しました:
/**
* Implements hook_page_alter.
* @param type $page
*/
function my_module_page_alter(&$page){
global $user;
$is_fron_page = drupal_is_front_page();
if($is_fron_page && $user->uid){
$redirect = 'users/'.$user->name.'/my-argument';
drupal_goto($redirect);
}
}
hook_page_alter
、および使用drupal_is_front_page
使用して、リダイレクトのユーザーにdrupal_goto
(このケースでする$ user-> uidが0であってはならない)、いくつかの条件に基づいて、
ルールモジュールは、「プログラム的」フロントページを設定するためにも使用することができます。
実際に作成されるルールは、ルールまたはphpコードを使用して、ログイン(認証済み)ユーザーを別のフロントページにリダイレクトする際の回答のバリエーションです。
また、オプションでFlagモジュールと組み合わせると、ユーザーエクスペリエンスがさらに向上する可能性があります。たとえば、ログインしているユーザーが、どのフロントページを「お気に入り」と見なすかを示します。
プログラムでこれをグローバルに設定する場合は、settings.phpで変数を設定できます。
$conf['site_frontpage'] = 'some/custom/path';
hook_url_outbound_alter()の変数を設定して、ホームページノード(サブドメイン)を変更しました
variable_set('site_frontpage', $value);
そしてリダイレクト:
$_GET['q'] = 'node/' . $domain_homepage_node_id;