web-dev-qa-db-ja.com

プログラムでフロントページを設定する方法は?

Drupalフロントページを実行時にプログラムで設定したい。
これどうやってするの?これは可能ですか?

22
Ek Kosmos

そのために variable_set() を使用できます。

variable_set('site_frontpage', $value);
22
Rafael Caceres

匿名ユーザーと認証済みユーザー用に別のフロントページを設定できるモジュール( 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);
  }
}
16
kiamlaluno

非常に柔軟な解決策は Panels を使用することです。さまざまな表示を任意の基準に基づいて提示でき、UIを介して制御されます。

9
tim.plunkett

私はこのように修正しました:

/**
 * 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);
  }
}
4
r0ber

Rules モジュールを使用して、フロントページを「プログラムで」設定することもできます。

実際に作成されるルールは、 ログイン(認証済み)ユーザーをルールまたはphpコードを使用して別のフロントページにリダイレクトする での回答のバリエーションになります。

また、オプションで Flag モジュールと組み合わせると、ユーザーエクスペリエンスがさらに向上する可能性があります。たとえば、ログインしているユーザーが「お気に入り」と見なしている可能性のあるフロントページを示す場合。

1
Pierre.Vriens

プログラムでこれをグローバルに設定する場合は、settings.phpで変数を設定できます。

$conf['site_frontpage'] = 'some/custom/path';
1

hook_url_outbound_alter() に変数を設定して、(サブドメインの)ホームページノードを変更しました

variable_set('site_frontpage', $value);

そしてリダイレクト:

$_GET['q'] = 'node/' . $domain_homepage_node_id;
0
TvC