web-dev-qa-db-ja.com

ログインユーザーとログアウトユーザーのCSSボディクラスを追加するにはどうすればよいですか?

Drupal 7では、テーマプロセス関数を追加して、必要なボディクラスを追加します。

function template_preprocess_html(&$variables) {
  $variables['classes_array'][] = $variables['is_front'] ? 'front' : 'not-front';
  // Add a class that tells us whether the page is viewed by an authenticated user or not.
  $variables['classes_array'][] = $variables['logged_in'] ? 'logged-in' : 'not-logged-in';
}

D8このテーマ関数は存在します ですが、ユーザーに必要なすべての変数がありません。

1
BigEd

わかりましたDrupal 8では、TWIGを使用して、必要なコンテンツタイプまたはユーザーのボディクラスを出力します。

Html.html.twig

{%
  set body_classes = [
    logged_in ? 'user-logged-in',
    not root_path ? 'path-frontpage' : 'path-' ~ root_path|clean_class,
    node_type ? 'page-node-type-' ~ node_type|clean_class,
    db_offline ? 'db-offline',
    user.hasPermission('administer')  ? 'isAdmin',
    user.getRoles()|join(' role_')
  ]
%}

次に、この行がボディクラスに追加されていることを確認します

   <body{{ attributes.addClass(body_classes) }}>

したがって、ユーザーがログアウトしている場合は、ロールクラスを使用してユーザーを識別できます。

   .anonymous { }

または :not Cssセレクター :notを使用できます

   :not.user-logged-in {}
3
BigEd

Html.html.twigとpage.html.twigには、デフォルトでlogged_inis_frontis_adminなどのさまざまな変数が用意されています。これらの変数を条件として使用して、クラスをbodyタグに追加できます。 path-frontpagepage-node-type-*などの一部のクラスは、デフォルトでノードに存在し、明示的に追加する必要はありません。

2
Rohit Tiwari