【问题标题】:Inject php/html into user profile将 php/html 注入用户配置文件
【发布时间】:2018-02-26 13:39:11
【问题描述】:

我为 Drupal 7 制作了一个与用户数据一起使用的自定义模块(它有自己的数据库表和对这些数据执行一些逻辑的类)。我想在用户的个人资料中显示它们,但我不想使用 drupal 字段等(我不需要另一个数据库表来存储数据)..

简单地说,在每个用户配置文件上,我需要从我的模块中实例化新类(例如 new UserDataPresenter($user_id)),而在配置文件本身上,我需要“注入”(?)一些 html/php 数据,例如:

<?php $user = new UserDataPresenter($user_id); ?>
e.g. <b>User's apples: <?php echo $user->getUserApples() ?>
etc... 

这将显示在用户个人资料的顶部,如下所示:

这在 Drupal 7 中是否可行(没有任何外部模块)

我只想在每个用户的个人资料页面上显示用户相关数据 - 就是这样!仅此而已。

感谢您的回答。

【问题讨论】:

    标签: drupal


    【解决方案1】:

    你可以使用钩子hook_user_view_alter()

    function MYMODULE_user_view_alter(&$build) {
      $build['#post_render'][] = 'MYMODULE_user_post_render';
    }
    
    function MYMODULE_user_post_render($arg1, $form) {
      $user_id = $form['#account']->uid ;
      $user = new UserDataPresenter($user_id);
      return "<b>User's apples: ".$user->getUserApples() ;
    }
    

    编辑您可以直接在$build 数组中添加一个条目,而不是使用#post_render

    function MYMODULE_user_view_alter(&$build) {
        $uid = $build['#account']->uid;
        $user = new UserDataPresenter($uid);
    
        $build['my_html'] = [
            '#markup' => '<b>User\'s apples: '.$user->getUserApples().'</b>',
            '#weight' => 99,
        ] ;
    }
    

    然后使用 can #weight 将您的标记放置在您想要的位置。

    【讨论】:

    • 全局用户变量不存储登录用户吗?不是与每个配置文件相关联的那个?
    • @toddddos 我已更新 anwser 以获取当前用户 ID。
    • 谢谢。这种工作但完全用自定义页面替换了该配置文件页面的全部内容。有没有办法只添加现有的(drupal)内容?
    • 太棒了...这真的很有帮助,并且准确地解决了我的问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-07-04
    • 2012-09-07
    • 2014-04-13
    • 2016-01-07
    • 1970-01-01
    • 2017-06-28
    • 2022-11-25
    • 2016-03-21
    相关资源
    最近更新 更多