Drupalフロントページを実行時にプログラムで設定したい。
これどうやってするの?これは可能ですか?
そのために variable_set()
を使用できます。
variable_set('site_frontpage', $value);
匿名ユーザーと認証済みユーザー用に別のフロントページを設定できるモジュール( 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);
}
}
Rules モジュールを使用して、フロントページを「プログラムで」設定することもできます。
実際に作成されるルールは、 ログイン(認証済み)ユーザーをルールまたは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;