web-dev-qa-db-ja.com

匿名ユーザーに別のテンプレートを使用するにはどうすればよいですか?

ユーザーが匿名ユーザーまたは認証済みユーザーの場合、page1.tpl.phpを使用します。他のロールでは、page.tpl.phpを使用します。
どのようにしてコードを書くのですか?

4
enjoylife

追加のpage1.tpl.phpは必要ありません。 page.tpl.phpでは、以下を使用できます。

<?php
  global $user;

  if ($user->uid > 0) {
    print /* Insert content only for authenticated users. */;
  }
?>

ユーザーが「管理者」ロールを持っているときにコンテンツを表示したい場合は、以下を使用できます。

<?php
  global $user;

  if (in_array('administrator', array_values($user->roles)))) {
    print /* Insert content only for users with "administrator" role. */;
  }
?>
4
WestieUK

さまざまなシナリオでさまざまなテンプレートを処理する場合は、 コンテキストモジュール が優れたツールです。このケースは非常に単純なので、提案されているようなコードで処理できます。ただし、コンテキストモジュールを使用すると、管理が少し簡単になり、使用するテンプレートを決定できるだけでなく、挿入するブロックも決定できます。これは素晴らしいモジュールであり、私が作成するほとんどすべてのサイトで使用しているモジュールの1つです。

5
googletorp

前処理機能が使えると思います。そんな感じ:

function yourtheme_preprocess_page($vars) {
   global $user;
   if (!$user->uid || in_array('user authenticated', array_values($user->roles))) {
      $vars['template_files'][] = 'page1';
   }
}
4
Rafael Caceres

Drupalサイトのすべてのユーザーは、匿名ユーザーまたは認証済みユーザーです。匿名または認証済みユーザーにpage1.tpl.phpテンプレートを使用することを要求すると、page1.tpl.phpテンプレートが常に使用されます。

認証されたユーザーが他の特定の役割を持たないユーザーを意味する場合は、page.tpl.phpファイルで次のコードを使用できます。

if (empty(array_diff(array_keys($GLOBALS['user']->roles), array(0, 1))) {
  // The user is anonymous, or the user doesn't have other roles
  // apart the one of authenticated user.
}
1
kiamlaluno