web-dev-qa-db-ja.com

ユーザーのためのテンプレート提案を追加する方法--VIEW-MODE--ROLE.html.twig

私は hook_theme_suggestions_HOOK_alter

function MYTHEME_theme_suggestions_user_alter(&$suggestions, $vars, $hook) {

  // Define the view mode.
  $mode = $vars['elements']['#view_mode'];

  // Create a theme hook suggestion which has the view mode name in it.
  $suggestions[] = 'user__' . $mode;
}

これでuser--full.html.twigおよびuser--compact.html.twig

しかし、私にはeditorの役割があり、user--compact--editor.html.twigピックアップされます。ユーザーの役割に基づいてテンプレートの提案を追加するにはどうすればよいですか?

2

現在のユーザーオブジェクトを取得し、その役割を取得して、次のスニペットのように提案を追加するだけです。現在のユーザーは既に$variables

/**
 * Implements hook_theme_suggestions_HOOK_alter().
 */
function MYTHEME_theme_suggestions_user_alter(array &$suggestions, array $variables) {

  // Define the view mode.
  $mode = $variables['elements']['#view_mode'];

  // Create a theme hook suggestion which has the view mode name in it.
  $suggestions[] = 'user__' . $mode;

  // Get current user.
  $current_user = $variables['elements']['#user'];

  // Get current user's roles.
  $roles = $current_user->getRoles();

  // Add suggestion per role.
  foreach ($roles as $role) {
    $suggestions[] = 'user__' . $mode . '__' . $role;
  }
}

これはあなたに与えるでしょう:

<!-- FILE NAME SUGGESTIONS:
   * user--full--administrator.html.twig
   * user--full--authenticated.html.twig
   * user--full.html.twig
   x user.html.twig
-->
5
leymannx