【问题标题】:How to add custom HTML on user profile page in Drupal 8?如何在 Drupal 8 中的用户个人资料页面上添加自定义 HTML?
【发布时间】:2016-01-17 06:52:32
【问题描述】:

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

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

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

我要添加的东西的类型:

  • 一个图标菜单链接到用户帐户的不同方面(例如发票、订单、编辑帐户、我的积分等)
  • 随机文本块,例如:“X 发票到期”、“距离下一场比赛开始还有 X 时间”等
  • 从外部 API 获取的帐户信息(用户名、密码、地址、订单总数等)

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

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

请记住,无论使用什么,一个用户都不得访问另一个用户的个人资料。它将仅用作登录用户的登录页面,以便该用户和该用户只能查看其帐户的详细信息。

更新

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

【问题讨论】:

    标签: user-profile drupal-8


    【解决方案1】:

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

    第二件事:如果您想在用户配置文件中添加额外变量。您可以将这些变量附加到hook_user_load() 中的用户。在这个钩子中,您可以编写所有逻辑,您可以从此处附加您的块。并在 twig 中以 {{ user.your_variable }} 的身份访问它们。

    由于我们不能在 twig 中编写 php 代码,我们需要将所有东西都附加到东西上,从我们的钩子、模块函数、控制器到 twig。这是非常好的做法。

    【讨论】:

      【解决方案2】:

      我已经采纳了@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 下并清除缓存。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

        • 谢谢!附带说明一下,我永远不再使用 Drupal。我已经转向 Laravel,它在各方面都比 Drupal 好一百万倍。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多