如何在 Drupal 8 的用户个人资料页面上添加自定义 HTML?

How to add custom HTML on user profile page in Drupal 8?

当用户登录时,会将他们带到他们的 /user 页面。此页面上通常有默认文本:成员 X 个月。但没有别的。

您可以在此处管理此显示:admin/config/people/accounts/display

问题是,如何在此页面上添加更多信息不是很明显。我更喜欢直接编辑用户配置文件模板,但这似乎不再用于 Drupal 8。

我要添加的东西类型:

我打算制作一个 "drupal block" 并在所有 /user 路径上显示它,但我认为我没有正确使用该页面。

  1. 有没有办法添加可用于显示此信息的字段? (以便我可以从 admin/config/people/accounts/display 管理它)
  2. 是否有我可以覆盖的用户配置文件模板

请记住,无论使用什么,一个用户绝不能访问另一个用户的个人资料。它只会用作已登录用户的登录页面,因此只有该用户才能看到他们帐户的详细信息。

更新

我看到您可以覆盖 user.html.twig,但这意味着文件中没有 PHP(这当然不是一个好方法)。那么如何将 PHP 逻辑添加到该模板中呢?

第一件事:您可以覆盖用户配置文件模板。在 yourtheme/templates/ 目录中创建一个名为 user--profile.html.twig 的模板。在此文件中,您可以在 {{ var_dump(user) }} 中找到用户实体。您可以根据需要呈现信息。

第二件事:如果你想在用户个人资料上增加额外的变量。您可以将这些变量附加到 hook_user_load() 中的用户。在这个钩子中,你可以编写所有的逻辑,你可以从这里附加你的块。并在树枝中以 {{ user.your_variable }} 的形式访问它们。

由于我们不能在 twig 中编写 php 代码,我们需要将所有东西从我们的钩子、module_functions、控制器到 twig 附加。这是很好的做法。

我采纳了 @Monal Sof 的上述建议,但在我的情况下不起作用,而且我复制了 MYTHEME/templates/user/user.html.twig 下的 user.html.twig 文件(来自用户模块)来定义我的自定义代码,但它显示在所有节点页面上。

所以我在 MYTHEME.theme 文件中使用了 hook_theme_suggestions_HOOK_alter() 来定义用户配置文件的自定义模板。

这是我遵循的步骤:

 /**
 * Implements hook_theme_suggestions_HOOK_alter().
 */
function MYTHEME_theme_suggestions_user_alter(array &$suggestions, array $variables) {
  $request = \Drupal::routeMatch()->getRouteObject();
  $path_args = explode('/', $request->getPath());
  if (\Drupal::currentUser()->isAuthenticated() && in_array('user', $path_args)) {
    $suggestions[] = 'user__profile';
  }
}

在此之后我将我的自定义模板放在 MYTHEME/templates/user/user--profile.html.twig 下并清除缓存。

有一个模块可以帮助完成此模板建议以及更多其他模块:https://www.drupal.org/project/twigsuggest