将php / html注入用户配置文件

时间:2018-02-26 13:39:11

标签: drupal

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

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

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

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

enter image description here

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

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

感谢您的回答。

1 个答案:

答案 0 :(得分: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() ;
}

修改您可以直接在#post_render数组中添加条目,而不是使用$build

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,
    ] ;
}

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