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

时间:2016-01-17 06:52:33

标签: user-profile drupal-8

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

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

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

我要添加的内容类型:

  • 用于链接到用户帐户不同方面的图标菜单(例如发票,订单,编辑帐户,我的积分等)
  • 用于以下内容的随机文本块:" X发票到期"," X时间直到下一个游戏开始"等
  • 从外部API获取的帐户信息(用户名,密码,地址,总订单等)

我打算做一个" drupal block"并且只显示所有/用户路径,但我不认为我正确使用该页面。

  1. 我是否应该添加可用于显示此信息的字段? (这样我就可以通过admin / config / people / accounts / display来管理它)
  2. 是否可以覆盖用户个人资料模板
  3. 请记住,无论使用什么,一个用户都无法访问其他用户个人资料。它仅用作登录用户的登录页面,因此该用户和该用户只能查看其帐户的详细信息。

    更新

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

3 个答案:

答案 0 :(得分:3)

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

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

由于我们无法在twig中编写php代码,因此我们需要将所有内容从钩子,module_functions,controller到twig附加到thing。这是非常好的做法。

答案 1 :(得分:0)

我已通过@Monal Sof采纳了上述建议,但它在我的情况下不起作用,我还复制了user.html.twig MYTHEME/templates/user/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下并清除缓存。

答案 2 :(得分:0)

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